Почему моя реализация создания фильма в moviepy так неэффективна? - PullRequest
0 голосов
/ 03 июля 2019

Я использую moviepy, модуль python для создания фильмов, для создания фильмов с одним изображением Майка, за которым следует один снимок Эмили с другой песней каждые 2 изображения. Я реализовал это следующим образом:

clips = []
for i in range(n):
    audio = AudioFileClip(audiofiles[i]).set_duration(10)
    video1 = ImageClip(images_mike[i]).set_duration(5)
    video2 = ImageClip(images_emily[i]).set_duration(5)
    video = concatenate([video1,video2],method='compose')
    movie.set_audio(audio)
    clips.append(movie)
video = concatenate(clips,method='compose')
video.write_videofile('my_movie.mp4')

аудиофайлы, это список имен файлов аудио. images_mike и images_emily - это каждый список имен файлов изображений.

Но этот метод действительно очень медленный. video.write_videofile ('my_movie.mp4') может занять час, чтобы скомпилировать 4-минутный клип. Кроме того, я сталкиваюсь с ошибками выделения памяти при попытке сделать 10-минутный клип. Что не так с этой реализацией? Конечно, это не так.

Не знаю, насколько это актуально, но я на ноутбуке с 16 Гб оперативной памяти и процессором i7.

1 Ответ

0 голосов
/ 03 июля 2019

Если медленный write_videofile, существует аргумент preset, который сообщает FFMPEG, сколько времени нужно потратить на оптимизацию сжатия. По умолчанию это «средний». Если вам все равно, насколько велик размер вашего видеофайла, попробуйте использовать preset='ultrafast'. Согласно документации, качество не изменится, независимо от того, какой вариант вы выберете, но файл может стать намного больше с более быстрой настройкой.

video.write_videofile('my_movie.mp4', preset='ultrafast')

Choices are: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo.

Вы также можете использовать аргумент threads, который по умолчанию равен None ... попробуйте установить его в 2 или 3 и посмотрите, поможет ли это.

...