为什么我在moviepy中创建电影的实现效率如此低下?

问题描述 投票:0回答:3

我正在使用 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 处理器。

python-3.x performance video video-processing moviepy
3个回答
3
投票

如果是

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


0
投票

尝试在连接中使用“method='chain'”。它将我的速度从 4 it/s 提高到 20 it/s。从视觉上看,我的输出没有任何差异,但是,这取决于您正在制作的代码和视频。


0
投票

请使用 ImageSequenceClip() 而不是 concatenate() 例如:

ImageSequenceClip(/dir/where_your_pics/are,fps=20)

另请注意,由于某种原因,ImageSequenceClip() 尚未在网络上记录,请询问 ChatGPT 以了解更多详细信息,或在 .../io/ImageSequenceClip 上查看 moviepy 的 GitHub 存储库

© www.soinside.com 2019 - 2024. All rights reserved.