MoviePy: не работает объединенный список видеоклипов

Я пытаюсь объединить кучу видео. Поэтому я использую Moviepy. Маловероятно, что moviepy выдает ошибку примерно в 20 строках, и я не знаю, что именно я сделал не так.

Мой код:

import os
from glob import glob
from moviepy.editor import VideoFileClip, concatenate_videoclips

PathList = []
if os.path.isfile("concat_output.mp4"):
    os.remove("concat_output.mp4")
for videoPath in sorted(glob("*.mp4")):
    PathList.append(VideoFileClip(videoPath))
final = concatenate_videoclips(PathList)
final.write_videofile('concat_output.mp4')
final.close()

Когда я запускаю это, я получаю эту ошибку, показанную ниже:

Traceback (most recent call last):
  File "C:\Users\jharm\.conda\envs\python\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 285, in ffmpeg_parse_infos
    line = [l for l in lines if keyword in l][index]
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\jharm\Documents\merge_vid.py", line 10, in <module>
    PathList.append(VideoFileClip(videoPath))
  File "C:\Users\jharm\.conda\envs\python\lib\site-packages\moviepy\video\io\VideoFileClip.py", line 91, in __init__
    fps_source=fps_source)
  File "C:\Users\jharm\.conda\envs\python\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 36, in __init__
    fps_source)
  File "C:\Users\jharm\.conda\envs\python\lib\site-packages\moviepy\video\io\ffmpeg_reader.py", line 291, in ffmpeg_parse_infos
    filename, infos))
OSError: MoviePy error: failed to read the duration of file firstvideo.mp4.
Here are the file infos returned by ffmpeg:

ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.2.1 (GCC) 20200122
  configuration: --enable-gpl --enable-version3 --enable-sdl2 --enable-fontconfig --enable-gnutls --enable-iconv --enable-libass --enable-libdav1d --enable-libbluray --enable-libfreetype --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libtheora --enable-libtwolame --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libzimg --enable-lzma --enable-zlib --enable-gmp --enable-libvidstab --enable-libvorbis --enable-libvo-amrwbenc --enable-libmysofa --enable-libspeex --enable-libxvid --enable-libaom --enable-libmfx --enable-amf --enable-ffnvcodec --enable-cuvid --enable-d3d11va --enable-nvenc --enable-nvdec --enable-dxva2 --enable-avisynth --enable-libopenmpt
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
firstvideo.mp4: Permission denied

«moviepy выдает ошибку примерно в 20 строках, и я не знаю, что именно я сделал не так». Он потратил 20 строк, пытаясь объяснить вам, что пошло не так. Вы пробовали что-то читать? Например, видите часть, где написано «не удалось прочитать продолжительность файла firstvideo.mp4»?

Karl Knechtel 14.04.2023 10:50

конечно я это читал. Но я не уверен, как это исправить. Я подумал, что это может быть проблема с разрешением, из-за которой moviepy не может получить доступ к видео. Поэтому я попытался дать разрешение пути через «os.chmod (путь, 777)». Это тоже не сработает. У вас есть другие предложения?

JanHarm22 14.04.2023 11:53

Что произойдет, если вы попытаетесь использовать ffmpeg самостоятельно из командной строки, чтобы получить информацию?

Karl Knechtel 14.04.2023 14:19

Затем он говорит: «Невозможно открыть 'firstvideo.mp4'

JanHarm22 17.04.2023 08:40

У вас открыт или используется файл mp4 при запуске скрипта. Если это так, закройте его перед запуском скрипта.

Gaurav Hazra 26.05.2023 18:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
5
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка была просто в цикле for (for videoPath in sorted(glob("*.mp4")):). Это должно быть изменено на for videoPath in sorted(glob("*/*.mp4",recursive=True)):. MoviePy выбрал неверный путь для своих операций. После этого изменения работает без проблем!

Другие вопросы по теме