Recherche avancée

Médias (0)

Mot : - Tags -/xmlrpc

Aucun média correspondant à vos critères n’est disponible sur le site.

Autres articles (77)

  • Le profil des utilisateurs

    12 avril 2011, par

    Chaque utilisateur dispose d’une page de profil lui permettant de modifier ses informations personnelle. Dans le menu de haut de page par défaut, un élément de menu est automatiquement créé à l’initialisation de MediaSPIP, visible uniquement si le visiteur est identifié sur le site.
    L’utilisateur a accès à la modification de profil depuis sa page auteur, un lien dans la navigation "Modifier votre profil" est (...)

  • Configurer la prise en compte des langues

    15 novembre 2010, par

    Accéder à la configuration et ajouter des langues prises en compte
    Afin de configurer la prise en compte de nouvelles langues, il est nécessaire de se rendre dans la partie "Administrer" du site.
    De là, dans le menu de navigation, vous pouvez accéder à une partie "Gestion des langues" permettant d’activer la prise en compte de nouvelles langues.
    Chaque nouvelle langue ajoutée reste désactivable tant qu’aucun objet n’est créé dans cette langue. Dans ce cas, elle devient grisée dans la configuration et (...)

  • XMP PHP

    13 mai 2011, par

    Dixit Wikipedia, XMP signifie :
    Extensible Metadata Platform ou XMP est un format de métadonnées basé sur XML utilisé dans les applications PDF, de photographie et de graphisme. Il a été lancé par Adobe Systems en avril 2001 en étant intégré à la version 5.0 d’Adobe Acrobat.
    Étant basé sur XML, il gère un ensemble de tags dynamiques pour l’utilisation dans le cadre du Web sémantique.
    XMP permet d’enregistrer sous forme d’un document XML des informations relatives à un fichier : titre, auteur, historique (...)

Sur d’autres sites (11186)

  • avutil/log : added av_log_format_line2 which returns buffer length

    27 avril 2016, par Andreas Weis
    avutil/log : added av_log_format_line2 which returns buffer length
    

    The new function behaves the same as av_log_format_line, but also forwards
    the return value from the underlying snprintf call. This will allow
    callers to accurately determine the size requirements for the line buffer.

    Signed-off-by : Andreas Weis <github@ghulbus-inc.de>
    Signed-off-by : Michael Niedermayer <michael@niedermayer.cc>

    • [DH] doc/APIchanges
    • [DH] libavutil/log.c
    • [DH] libavutil/log.h
    • [DH] libavutil/version.h
  • How do I convert RTSP stream for iOS browser viewing

    6 mars 2017, par humble_coder

    TL ;DR

    I need to convert full RTSP (A/V) stream from Axis IP cameras to be viewed in a fully-contained/not-full-screen div in an iOS browser. Think : "Youtube live stream as viewed from iOS browser". I’ve seen several links that hint at the issue. . .

    . . .but they’re either "incomplete" or out of date.

    The solution must be local and remain behind site firewall (so no external services).

    MORE DETAIL

    I’m currently writing a custom "Axis IP Camera Manager" Vue/Laravel web app for a client. The initial requirements were very simple :

    1. scan network for axis devices and store addresses/info for future use

    2. display grid of MJPEG for selected camera(s).

    The initial requirements were fairly straightforward. Now, though, there are additional requirements :

    1. Record RTSP stream to [seconds] long MP4 streams.

    2. Convert an RTSP stream from AXIS IP CAMERA to something viewable in both desktop and mobile browsers with full A/V.

    I’ve successfully managed #3 by using ffmpeg to capture and store the stream to MP4. However, I’m no video aficionado, and the nature of #4 is still a bit fuzzy to me. Per my understanding I can’t watch RTSP streams in a browser in iOS, but I also can’t stream an "in-process" MP4 over HTTP. I’ve seen references to several items such as Red5, Live555, Wowza, ffserver (discontinued ?), etc. but I’m completely unfamiliar with them. In the short term, I’m looking for a quick "live" conversion solution. In the long term, I’m interested in a deeper understanding of the issue(s) at hand. Any current info/expertise/links/manuals would be appreciated.

  • Video encoding task not working with Django Celery Redis FFMPEG and GraphQL

    18 juin 2023, par phanio

    I'm having a hard time trying to understand how is this FFMPEG encoding works while using Django, Celery, Redis, GraphQL and Docker too.

    &#xA;

    I have this video / courses platform project and want I'm trying to do using FFMPEG, Celery and Redis is to create different video resolutions so I can display them the way Youtube does inside the videoplayer ( the videoplayer is handled in frontend by Nextjs and Apollo Client ), now on the backend I've just learned that in order to use properly the FFMPEG to resize the oridinal video size, I need to use Celery and Redis to perform asyncronus tasks. I've found a few older posts here on stackoverflow and google, but is not quite enough info for someone who is using the ffmpeg and clery and redis for the first time ( I've started already step by step and created that example that adds two numbers together with celery, that works well ). Now I'm not sure what is wrong with my code, because first of all I'm not really sure where should I trigger the task from, I mean from which file, because at the end of the task I want to send the data through api using GrapQL Strawberry.

    &#xA;

    This is what I've tried by now :

    &#xA;

    So first things first my project structure looks like this

    &#xA;

    - backend #root directory&#xA; --- backend&#xA;    -- __init__.py&#xA;    -- celery.py&#xA;    -- settings.py&#xA;    -- urls.py&#xA;      etc..&#xA;&#xA; --- static&#xA;   -- videos&#xA;&#xA; --- video&#xA;   -- models.py&#xA;   -- schema.py&#xA;   -- tasks.py&#xA;   -- types.py&#xA;   etc..&#xA;&#xA; --- .env&#xA;&#xA; --- db.sqlite3&#xA;&#xA; --- docker-compose.yml&#xA;&#xA; --- Dockerfile&#xA;&#xA; --- manage.py&#xA;&#xA; --- requirements.txt&#xA;

    &#xA;

    here is my settings.py file :

    &#xA;

    from pathlib import Path&#xA;import os&#xA;&#xA;# Build paths inside the project like this: BASE_DIR / &#x27;subdir&#x27;.&#xA;BASE_DIR = Path(__file__).resolve().parent.parent&#xA;&#xA;DEBUG = True&#xA;&#xA;ALLOWED_HOSTS=["localhost", "0.0.0.0", "127.0.0.1"]&#xA;&#xA;DEFAULT_AUTO_FIELD = &#x27;django.db.models.BigAutoField&#x27;&#xA;&#xA;&#xA;# Application definition&#xA;&#xA;INSTALLED_APPS = [&#xA;    "corsheaders",&#xA;    &#x27;django.contrib.admin&#x27;,&#xA;    &#x27;django.contrib.auth&#x27;,&#xA;    &#x27;django.contrib.contenttypes&#x27;,&#xA;    &#x27;django.contrib.sessions&#x27;,&#xA;    &#x27;django.contrib.messages&#x27;,&#xA;    &#x27;django.contrib.staticfiles&#x27;,&#xA;&#xA;    "strawberry.django",&#xA;    "video"&#xA;]&#xA;&#xA;etc...&#xA;&#xA;STATIC_URL = &#x27;/static/&#x27;&#xA;MEDIA_URL = &#x27;/videos/&#x27;&#xA;&#xA;STATICFILES_DIRS = [&#xA;    BASE_DIR / &#x27;static&#x27;,&#xA;    # BASE_DIR / &#x27;frontend/build/static&#x27;,&#xA;]&#xA;&#xA;MEDIA_ROOT = BASE_DIR / &#x27;static/videos&#x27;&#xA;&#xA;STATIC_ROOT = BASE_DIR / &#x27;staticfiles&#x27;&#xA;&#xA;STATICFILES_STORAGE = &#x27;whitenoise.storage.CompressedManifestStaticFilesStorage&#x27;&#xA;&#xA;CORS_ALLOW_ALL_ORIGINS = True&#xA;&#xA;&#xA;CELERY_BEAT_SCHEDULER = &#x27;django_celery_beat.schedulers:DatabaseScheduler&#x27;&#xA;&#xA;# REDIS CACHE&#xA;CACHES = {&#xA;    "default": {&#xA;        "BACKEND": "django_redis.cache.RedisCache",&#xA;        "LOCATION": f"redis://127.0.0.1:6379/1",&#xA;        "OPTIONS": {&#xA;            "CLIENT_CLASS": "django_redis.client.DefaultClient",&#xA;        },&#xA;    }&#xA;}&#xA;&#xA;# Docker&#xA;CELERY_BROKER_URL = os.environ.get("CELERY_BROKER", "redis://redis:6379/0")&#xA;CELERY_RESULT_BACKEND = os.environ.get("CELERY_BROKER", "redis://redis:6379/0")&#xA;

    &#xA;

    This is my main urls.py file :

    &#xA;

    from django.contrib import admin&#xA;from django.conf import settings&#xA;from django.conf.urls.static import static&#xA;from django.urls import path&#xA;from django.urls.conf import include&#xA;from strawberry.django.views import GraphQLView&#xA;&#xA;from video.schema import schema&#xA;&#xA;urlpatterns = [&#xA;    path(&#x27;admin/&#x27;, admin.site.urls),&#xA;    path("graphql", GraphQLView.as_view(schema=schema)),&#xA;]&#xA;&#xA;if settings.DEBUG:&#xA;    urlpatterns &#x2B;= static(settings.MEDIA_URL,&#xA;                          document_root=settings.MEDIA_ROOT)&#xA;    urlpatterns &#x2B;= static(settings.STATIC_URL,&#xA;                          document_root=settings.STATIC_ROOT)&#xA;

    &#xA;

    This is my celery.py file :

    &#xA;

    from __future__ import absolute_import, unicode_literals&#xA;import os&#xA;from celery import Celery&#xA;from django.conf import settings&#xA;&#xA;os.environ.setdefault(&#x27;DJANGO_SETTINGS_MODULE&#x27;, &#x27;backend.settings&#x27;)&#xA;&#xA;backend = Celery(&#x27;backend&#x27;)&#xA;&#xA;backend.config_from_object(&#x27;django.conf:settings&#x27;, namespace="CELERY")&#xA;&#xA;backend.autodiscover_tasks()&#xA;&#xA;@backend.task(bind=True)&#xA;def debug_task(self):&#xA;    print(&#x27;Request: {0!r}&#x27;.format(self.request))&#xA;

    &#xA;

    This is my init.py file :

    &#xA;

    from .celery import backend as celery_backend&#xA;&#xA;__all__ = (&#x27;celery_backend&#x27;,)&#xA;

    &#xA;

    This is my Dockerfile :

    &#xA;

    FROM python:3&#xA;ENV PYTHONUNBUFFERED=1&#xA;&#xA;WORKDIR /usr/src/backend&#xA;&#xA;RUN apt-get -y update&#xA;RUN apt-get -y upgrade&#xA;RUN apt-get install -y ffmpeg&#xA;&#xA;COPY requirements.txt ./&#xA;RUN pip install -r requirements.txt&#xA;

    &#xA;

    This is my docker-compose.yml file :

    &#xA;

    version: "3.8"&#xA;&#xA;services:&#xA;  django:&#xA;    build: .&#xA;    container_name: django&#xA;    command: python manage.py runserver 0.0.0.0:8000&#xA;    volumes:&#xA;      - .:/usr/src/backend/&#xA;    ports:&#xA;      - "8000:8000"&#xA;    environment:&#xA;      - DEBUG=1&#xA;      - DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]&#xA;      - CELERY_BROKER=redis://redis:6379/0&#xA;      - CELERY_BACKEND=redis://redis:6379/0&#xA;    depends_on:&#xA;      - pgdb&#xA;      - redis&#xA;&#xA;  celery:&#xA;    build: .&#xA;    command: celery -A backend worker -l INFO&#xA;    volumes:&#xA;      - .:/usr/src/backend&#xA;    depends_on:&#xA;      - django&#xA;      - redis&#xA;&#xA;  pgdb:&#xA;    image: postgres&#xA;    container_name: pgdb&#xA;    environment:&#xA;      - POSTGRES_DB=postgres&#xA;      - POSTGRES_USER=postgres&#xA;      - POSTGRES_PASSWORD=postgres&#xA;    volumes:&#xA;      - pgdata:/var/lib/postgresql/data/&#xA;&#xA;  redis:&#xA;    image: "redis:alpine"&#xA;&#xA;volumes:&#xA;  pgdata:&#xA;

    &#xA;

    And now inside my video app folder :

    &#xA;

    My models.py file :

    &#xA;

      &#xA;
    • here I've created separated fields for all resolution sizes, from video_file_2k to video_file_144, I was thinking that maybe after the process of the encoding this will populate those fields..
    • &#xA;

    &#xA;

    from django.db import models&#xA;from django.urls import reverse&#xA;&#xA;&#xA;class Video(models.Model):&#xA;    video_id = models.AutoField(primary_key=True, editable=False)&#xA;    slug = models.SlugField(max_length=255)&#xA;    title = models.CharField(max_length=150, blank=True, null=True)&#xA;    description = models.TextField(blank=True, null=True)&#xA;    video_file = models.FileField(null=False, blank=False)&#xA;    video_file_2k = models.FileField(null=True, blank=True)&#xA;    video_file_fullhd = models.FileField(null=True, blank=True)&#xA;    video_file_hd = models.FileField(null=True, blank=True)&#xA;    video_file_480 = models.FileField(null=True, blank=True)&#xA;    video_file_360 = models.FileField(null=True, blank=True)&#xA;    video_file_240 = models.FileField(null=True, blank=True)&#xA;    video_file_144 = models.FileField(null=True, blank=True)&#xA;    category = models.CharField(max_length=64, blank=False, null=False)&#xA;    created_at = models.DateTimeField(&#xA;        ("Created at"), auto_now_add=True, editable=False)&#xA;    updated_at = models.DateTimeField(("Updated at"), auto_now=True)&#xA;&#xA;    class Meta:&#xA;        ordering = ("-created_at",)&#xA;        verbose_name = ("Video")&#xA;        verbose_name_plural = ("Videos")&#xA;&#xA;    def get_absolute_url(self):&#xA;        return reverse("store:video_detail", args=[self.slug])&#xA;&#xA;    def __str__(self):&#xA;        return self.title&#xA;

    &#xA;

    This is my schema.py file :

    &#xA;

    import strawberry&#xA;from strawberry.file_uploads import Upload&#xA;from typing import List&#xA;from .types import VideoType&#xA;from .models import Video&#xA;from .tasks import task_video_encoding_1080p, task_video_encoding_720p&#xA;&#xA;&#xA;@strawberry.type&#xA;class Query:&#xA;    @strawberry.field&#xA;    def videos(self, category: str = None) -> List[VideoType]:&#xA;        if category:&#xA;            videos = Video.objects.filter(category=category)&#xA;            return videos&#xA;        return Video.objects.all()&#xA;&#xA;    @strawberry.field&#xA;    def video(self, slug: str) -> VideoType:&#xA;        if slug == slug:&#xA;            video = Video.objects.get(slug=slug)&#xA;            return video&#xA;&#xA;    @strawberry.field&#xA;    def video_by_id(self, video_id: int) -> VideoType:&#xA;        if video_id == video_id:&#xA;            video = Video.objects.get(pk=video_id)&#xA;&#xA;          # Here I&#x27;ve tried to trigger my tasks, when I visited 0.0.0.0:8000/graphql url&#xA;          # and I was querying for a video by it&#x27;s id , then I&#x27;ve got the error from celery &#xA;            task_video_encoding_1080p.delay(video_id)&#xA;            task_video_encoding_720p.delay(video_id)&#xA;&#xA;            return video&#xA;&#xA;&#xA;@strawberry.type&#xA;class Mutation:&#xA;    @strawberry.field&#xA;    def create_video(self, slug: str, title: str, description: str, video_file: Upload, video_file_2k: str, video_file_fullhd: str, video_file_hd: str, video_file_480: str, video_file_360: str, video_file_240: str, video_file_144: str, category: str) -> VideoType:&#xA;&#xA;        video = Video(slug=slug, title=title, description=description,&#xA;                      video_file=video_file, video_file_2k=video_file_2k, video_file_fullhd=video_file_fullhd, video_file_hd=video_file_hd, video_file_480=video_file_480, video_file_360=video_file_360, video_file_240=video_file_240, video_file_144=video_file_144,category=category)&#xA;        &#xA;        video.save()&#xA;        return video&#xA;&#xA;    @strawberry.field&#xA;    def update_video(self, video_id: int, slug: str, title: str, description: str, video_file: str, category: str) -> VideoType:&#xA;        video = Video.objects.get(video_id=video_id)&#xA;        video.slug = slug&#xA;        video.title = title&#xA;        video.description = description&#xA;        video.video_file = video_file&#xA;        video.category = category&#xA;        video.save()&#xA;        return video&#xA;&#xA;    @strawberry.field&#xA;    def delete_video(self, video_id: int) -> bool:&#xA;        video = Video.objects.get(video_id=video_id)&#xA;        video.delete&#xA;        return True&#xA;&#xA;&#xA;schema = strawberry.Schema(query=Query, mutation=Mutation)&#xA;

    &#xA;

    This is my types.py file ( strawberry graphql related ) :

    &#xA;

    import strawberry&#xA;&#xA;from .models import Video&#xA;&#xA;&#xA;@strawberry.django.type(Video)&#xA;class VideoType:&#xA;    video_id: int&#xA;    slug: str&#xA;    title: str&#xA;    description: str&#xA;    video_file: str&#xA;    video_file_2k: str&#xA;    video_file_fullhd: str&#xA;    video_file_hd: str&#xA;    video_file_480: str&#xA;    video_file_360: str&#xA;    video_file_240: str&#xA;    video_file_144: str&#xA;    category: str&#xA;

    &#xA;

    And this is my tasks.py file :

    &#xA;

    from __future__ import absolute_import, unicode_literals&#xA;import os, subprocess&#xA;from django.conf import settings&#xA;from django.core.exceptions import ValidationError&#xA;from celery import shared_task&#xA;from celery.utils.log import get_task_logger&#xA;from .models import Video&#xA;FFMPEG_PATH = os.environ["IMAGEIO_FFMPEG_EXE"] = "/opt/homebrew/Cellar/ffmpeg/6.0/bin/ffmpeg"&#xA;&#xA;logger = get_task_logger(__name__)&#xA;&#xA;&#xA;# CELERY TASKS&#xA;@shared_task&#xA;def add(x,y):&#xA;    return x &#x2B; y&#xA;&#xA;&#xA;@shared_task&#xA;def task_video_encoding_720p(video_id):&#xA;    logger.info(&#x27;Video Processing started&#x27;)&#xA;    try:&#xA;        video = Video.objects.get(video_id=video_id)&#xA;        input_file_path = video.video_file.path&#xA;        input_file_url = video.video_file.url&#xA;        input_file_name = video.video_file.name&#xA;&#xA;        # get the filename (without extension)&#xA;        filename = os.path.basename(input_file_url)&#xA;&#xA;        # path to the new file, change it according to where you want to put it&#xA;        output_file_name = os.path.join(&#x27;videos&#x27;, &#x27;mp4&#x27;, &#x27;{}.mp4&#x27;.format(filename))&#xA;        output_file_path = os.path.join(settings.MEDIA_ROOT, output_file_name)&#xA;&#xA;        # 2-pass encoding&#xA;        for i in range(1):&#xA;           new_video_720p = subprocess.call([FFMPEG_PATH, &#x27;-i&#x27;, input_file_path, &#x27;-s&#x27;, &#x27;1280x720&#x27;, &#x27;-vcodec&#x27;, &#x27;mpeg4&#x27;, &#x27;-acodec&#x27;, &#x27;libvo_aacenc&#x27;, &#x27;-b&#x27;, &#x27;10000k&#x27;, &#x27;-pass&#x27;, i, &#x27;-r&#x27;, &#x27;30&#x27;, output_file_path])&#xA;        #    new_video_720p = subprocess.call([FFMPEG_PATH, &#x27;-i&#x27;, input_file_path, &#x27;-s&#x27;, &#x27;{}x{}&#x27;.format(height * 16/9, height), &#x27;-vcodec&#x27;, &#x27;mpeg4&#x27;, &#x27;-acodec&#x27;, &#x27;libvo_aacenc&#x27;, &#x27;-b&#x27;, &#x27;10000k&#x27;, &#x27;-pass&#x27;, i, &#x27;-r&#x27;, &#x27;30&#x27;, output_file_path])&#xA;&#xA;        if new_video_720p == 0:&#xA;            # save the new file in the database&#xA;            # video.video_file_hd.name = output_file_name&#xA;            video.save(update_fields=[&#x27;video_file_hd&#x27;])&#xA;            logger.info(&#x27;Video Processing Finished&#x27;)&#xA;            return video&#xA;&#xA;        else:&#xA;            logger.info(&#x27;Proceesing Failed.&#x27;) # Just for now&#xA;&#xA;    except:&#xA;        raise ValidationError(&#x27;Something went wrong&#x27;)&#xA;&#xA;&#xA;@shared_task&#xA;# def task_video_encoding_1080p(video_id, height):&#xA;def task_video_encoding_1080p(video_id):&#xA;    logger.info(&#x27;Video Processing started&#x27;)&#xA;    try:&#xA;        video = Video.objects.get(video_id=video_id)&#xA;        input_file_path = video.video_file.url&#xA;        input_file_name = video.video_file.name&#xA;&#xA;        # get the filename (without extension)&#xA;        filename = os.path.basename(input_file_path)&#xA;&#xA;        # path to the new file, change it according to where you want to put it&#xA;        output_file_name = os.path.join(&#x27;videos&#x27;, &#x27;mp4&#x27;, &#x27;{}.mp4&#x27;.format(filename))&#xA;        output_file_path = os.path.join(settings.MEDIA_ROOT, output_file_name)&#xA;&#xA;        for i in range(1):&#xA;            new_video_1080p = subprocess.call([FFMPEG_PATH, &#x27;-i&#x27;, input_file_path, &#x27;-s&#x27;, &#x27;1920x1080&#x27;, &#x27;-vcodec&#x27;, &#x27;mpeg4&#x27;, &#x27;-acodec&#x27;, &#x27;libvo_aacenc&#x27;, &#x27;-b&#x27;, &#x27;10000k&#x27;, &#x27;-pass&#x27;, i, &#x27;-r&#x27;, &#x27;30&#x27;, output_file_path])&#xA;&#xA;        if new_video_1080p == 0:&#xA;            # save the new file in the database&#xA;            # video.video_file_hd.name = output_file_name&#xA;            video.save(update_fields=[&#x27;video_file_fullhd&#x27;])&#xA;            logger.info(&#x27;Video Processing Finished&#x27;)&#xA;            return video&#xA;        else:&#xA;            logger.info(&#x27;Proceesing Failed.&#x27;) # Just for now&#xA;&#xA;    except:&#xA;        raise ValidationError(&#x27;Something went wrong&#x27;)&#xA;

    &#xA;

    In my first attempt I wasn't triggering the tasks no where, then I've tried to trigger the task from the schema.py file from graphql inside the video_by_id, but there I've got this error :

    &#xA;

    backend-celery-1  | django.core.exceptions.ValidationError: [&#x27;Something went wrong&#x27;]&#xA;backend-celery-1  | [2023-06-18 16:38:52,859: ERROR/ForkPoolWorker-4] Task video.tasks.task_video_encoding_1080p[d33b1a42-5914-467c-ad5c-00565bc8be6f] raised unexpected: ValidationError([&#x27;Something went wrong&#x27;])&#xA;backend-celery-1  | Traceback (most recent call last):&#xA;backend-celery-1  |   File "/usr/src/backend/video/tasks.py", line 81, in task_video_encoding_1080p&#xA;backend-celery-1  |     new_video_1080p = subprocess.call([FFMPEG_PATH, &#x27;-i&#x27;, input_file_path, &#x27;-s&#x27;, &#x27;1920x1080&#x27;, &#x27;-vcodec&#x27;, &#x27;mpeg4&#x27;, &#x27;-acodec&#x27;, &#x27;libvo_aacenc&#x27;, &#x27;-b&#x27;, &#x27;10000k&#x27;, &#x27;-pass&#x27;, i, &#x27;-r&#x27;, &#x27;30&#x27;, output_file_path])&#xA;backend-celery-1  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^&#xA;backend-celery-1  |   File "/usr/local/lib/python3.11/subprocess.py", line 389, in call&#xA;backend-celery-1  |     with Popen(*popenargs, **kwargs) as p:&#xA;backend-celery-1  |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^&#xA;backend-celery-1  |   File "/usr/local/lib/python3.11/subprocess.py", line 1026, in __init__&#xA;backend-celery-1  |     self._execute_child(args, executable, preexec_fn, close_fds,&#xA;backend-celery-1  |   File "/usr/local/lib/python3.11/subprocess.py", line 1883, in _execute_child&#xA;backend-celery-1  |     self.pid = _fork_exec(&#xA;backend-celery-1  |                ^^^^^^^^^^^&#xA;backend-celery-1  | TypeError: expected str, bytes or os.PathLike object, not int&#xA;backend-celery-1  | &#xA;backend-celery-1  | During handling of the above exception, another exception occurred:&#xA;backend-celery-1  | &#xA;backend-celery-1  | Traceback (most recent call last):&#xA;backend-celery-1  |   File "/usr/local/lib/python3.11/site-packages/celery/app/trace.py", line 477, in trace_task&#xA;backend-celery-1  |     R = retval = fun(*args, **kwargs)&#xA;backend-celery-1  |                  ^^^^^^^^^^^^^^^^^^^^&#xA;backend-celery-1  |   File "/usr/local/lib/python3.11/site-packages/celery/app/trace.py", line 760, in __protected_call__&#xA;backend-celery-1  |     return self.run(*args, **kwargs)&#xA;backend-celery-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^&#xA;backend-celery-1  |   File "/usr/src/backend/video/tasks.py", line 93, in task_video_encoding_1080p&#xA;backend-celery-1  |     raise ValidationError(&#x27;Something went wrong&#x27;)&#xA;backend-celery-1  | django.core.exceptions.ValidationError: [&#x27;Something went wrong&#x27;]&#xA;

    &#xA;

    If anyone has done this kind of project or something like this please any suggestion or help is much appreciated.

    &#xA;

    Thank you in advance !

    &#xA;