为什么在moviepy中制作电影的实现效率如此低下?

时间:2019-07-03 02:34:30

标签: python-3.x performance video video-processing moviepy

我正在使用moviepy,这是一个用于创建电影的python模块,用于创建一幅迈克图片的电影,然后一幅艾米莉图片的图片,每两张图片播放一首不同的歌曲。我是通过以下方式实现的:

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')

audiofiles,是音频文件名的列表。 images_mike和images_emily都是图像文件名的列表。

但是这种方法真的很慢。 video.write_videofile('my_movie.mp4')可能需要一个小时才能编译4分钟的剪辑。此外,当我尝试制作10分钟剪辑时,我遇到了内存分配错误。此实现有什么问题?当然,这是不对的。

我不知道这是否相关,但是我正在笔记本电脑上使用16GB内存和i7处理器。

2 个答案:

答案 0 :(得分:0)

如果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,看是否有帮助。

答案 1 :(得分:0)

尝试串联使用“ method ='chain'”。它使我的速度从4 it / s增至20 it / s。从视觉上看,我的输出完全没有差异,但这取决于您制作的代码和视频。