Ошибка при работе с moviepy
Необходимо обрезать видео если оно длиной больше 30 секунд (с 30 секудны и до конца видео отрезок не нужен ,также длина видео разная поэтому точное значение окончания видео не известно и меняется).
При запуске кода (ниже) происходит только две вещи:
- Cохраняется только аудио (даже если добавляю кодек), либо вообще выдает ошибку, что не удалось определить длину видео.
ОС windows 10, ffmpeg установлен (судя по документации, ставится автоматом, также скачал еще один новой версии и в конфиге сделал к нему путь) - Появляется куча ошибок от библиотеки.
Требуется только обрезка видео если оно длительностью более определенного времени (30-60 сек). Может есть какие-то другие библиотеки для этой цели ?
from moviepy.editor import VideoFileClip, CompositeVideoClip, concatenate_videoclips , clips_array, vfx, AudioFileClip
import ffmpeg
import os
# пишем путь к файлу
files = os.listdir("C:\\Users\\Пользователь\\Desktop\\eredità\\AvtoTT\\videos\\")
# создаем пустой список в переменной video , в которую будет передаваться имя файла
video = []
# цикл for с переменной videos (новая переменная ,которая будет перебирать значения(видосы) в папке с видео
for videos in files:
print(videos)
if videos.endswith(".mp4"): # если строка которую мы передаем в videos заканчивается на vid
video.append(videos) # то передаем в конец списка
if len(video) == 0: # len() - количество элементов в списке ,если значение равно 0 ,то это ошибка
print('ошибка/n')
else: # если в списке имеется видео ,то запускается цикл
for videos in video:
print("пошел процесс...")
# выясняем длину видео
video = VideoFileClip("C:\\Users\\Пользователь\\Desktop\\eredità\\AvtoTT\\videos\\" +videos)
# обрезаем видео с 30 секунд до конца (round функция ,которая округляет число )
video = video.cutout(15,round(30))
# сохранение нового видео в файле
video.write_videofile("videos\\vid.mp4"+videos , fps=30,)
ошибки которые выдает :
Moviepy - Building video videos\vid0.mp4.
MoviePy - Writing audio in vid0TEMP_MPY_wvf_snd.mp3
t: 0%| | 0/900 [00:00<?, ?it/s, now=None]MoviePy - Done.
Moviepy - Writing video videos\vid0.mp4
Traceback (most recent call last):
File "D:\python\Lib\site-packages\moviepy\video\io\ffmpeg_writer.py", line 136, in write_frame
self.proc.stdin.write(img_array.tobytes())
BrokenPipeError: [Errno 32] Broken pipe
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Пользователь\Desktop\eredità\Pes.py", line 31, in <module>
video.write_videofile("videos\\"+videos , fps=30)
File "<decorator-gen-55>", line 2, in write_videofile
File "D:\python\Lib\site-packages\moviepy\decorators.py", line 54, in requires_duration
return f(clip, *a, **k)
^^^^^^^^^^^^^^^^
File "<decorator-gen-54>", line 2, in write_videofile
File "D:\python\Lib\site-packages\moviepy\decorators.py", line 135, in use_clip_fps_by_default
return f(clip, *new_a, **new_kw)
^^^^^^^^^^^^^^^^^^^^^^^^^
File "<decorator-gen-53>", line 2, in write_videofile
File "D:\python\Lib\site-packages\moviepy\decorators.py", line 22, in convert_masks_to_RGB
return f(clip, *a, **k)
^^^^^^^^^^^^^^^^
File "D:\python\Lib\site-packages\moviepy\video\VideoClip.py", line 300, in write_videofile
ffmpeg_write_video(self, filename, fps, codec,
File "D:\python\Lib\site-packages\moviepy\video\io\ffmpeg_writer.py", line 228, in ffmpeg_write_video
writer.write_frame(frame)
File "D:\python\Lib\site-packages\moviepy\video\io\ffmpeg_writer.py", line 180, in write_frame
raise IOError(error)
OSError: [Errno 32] Broken pipe
MoviePy error: FFMPEG encountered the following error while writing file videos\vid0.mp4:
b'videos\\vid0.mp4: No such file or directory\r\n'
Process finished with exit code 1
Источник: Stack Overflow на русском