Как получить длительность видео при загрузке файла в представлении Django.(с помощью ffprobe)

Я создаю службу потокового видео с помощью Django. Я хочу получить длительность видео, когда видео кодируется. Я установил ffmpeg с помощью brew (Mac OS), создал команду с подпроцессом, но она не работает. Я не знаю, что мне нужно сделать.

Это вещи, которые я пробовал.

views.py

class MovieUpload(user_mixins.MoiveUploadPermissionView, FormView):

    """MovieUpload View"""

    form_class = forms.MovieUploadForm
    template_name = "movies/movie_upload.html"

    def form_valid(self, form):
        movie = form.save()
        filename = movie.video.path
        result = subprocess.check_output(
            f'ffprobe -v quiet -show_streams -select_streams v:0 -of json "{filename}"',
            shell=True,
        ).decode()
        fields = json.loads(result)["streams"][0]

        duration = fields["tags"]["DURATION"]
        print(duration)
        movie.user = self.request.user
        movie.save()
        return redirect(reverse("movies:detail", kwargs={"pk": movie.pk}))

Я пробовал это, но выдает ошибку: Команда 'ffprobe -v quiet -show_streams -select_streams v:0 -of json "/Users/bami/Documents/cineacca/uploads/SampleVideo_1280x720_20mb.mp4" вернула ненулевой статус выхода 1. Я попробовал использовать только имя файла, а не filepath, но ошибка была той же самой.

class MovieUpload(user_mixins.MoiveUploadPermissionView, FormView):

    """MovieUpload View"""

    form_class = forms.MovieUploadForm
    template_name = "movies/movie_upload.html"

    def form_valid(self, form):
        movie = form.save()
        filename = movie.video.path
        duration = subprocess.check_output(
            [
                "ffprobe",
                "-i",
                f"{filename}",
                "-show_entries",
                "format=duration",
                "-v",
                "quiet",
                "-of",
                "csv=%s" % ("p=0"),
            ]
        )
        print(duration)
        movie.user = self.request.user
        movie.save()
        return redirect(reverse("movies:detail", kwargs={"pk": movie.pk}))

Этот код выдает ту же ошибку.

class MovieUpload(user_mixins.MoiveUploadPermissionView, FormView):

    """MovieUpload View"""

    form_class = forms.MovieUploadForm
    template_name = "movies/movie_upload.html"

    def form_valid(self, form):
        movie = form.save()
        filename = movie.video.path
        result = subprocess.run(
            [
                "ffprobe",
                "-v",
                "error",
                "-show_entries",
                "format=duration", 
                "-of",
                "default=noprint_wrappers=1:nokey=1",
                filename,
            ],
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT,
        )
        print(result)
        movie.user = self.request.user
        movie.save()
        return redirect(reverse("movies:detail", kwargs={"pk": movie.pk}))

Этот код не приводит к той же ошибке, и новый объект создается хорошо но все равно не работает, в моей консоли выдает следующее сообщение,

CompletedProcess(args=['ffprobe', '-v', 'error', '-show_entries', 'format=duration', '-of', 'default=noprint_wrappers=1:nokey=1', '/Users/bami/Documents/cineacca/uploads/SampleVideo_1280x720_20mb. mp4'], returncode=1, stdout=b'/Users/bami/Documents/cineacca/uploads/SampleVideo_1280x720_20mb.mp4: No such file or directory\n')

>
Вернуться на верх