繁体   English   中英

为什么 moviepy 的 write_videofile function 在处理每一帧时变得越来越慢? 以及如何改进/修复它?

[英]why does moviepy's write_videofile function get slower and slower as it processes each frame? And how to improve/fix it?

我的脚本将两个电影文件作为输入,并写入一个 2x1 数组电影 output(立体并排半宽)。 输入视频片段具有相同的分辨率 (1280x720)、帧率 (60)、帧数 (23,899)、格式 (mp4)... 当 write_videofile function 开始处理时,它提供了一个非常合理的估计完成时间~20分钟。 随着它处理每一帧,过程变得越来越慢(由进度条和估计的完成时间指示)。 在我的例子中,输入的影片剪辑大约有 6 分钟长。 处理三分钟后,表示需要3个多小时才能完成。 处理半小时后,提示需要 24 小时以上才能完成。 我已经尝试了 write_videofile function 的“threads”选项,但没有帮助。 任何的想法? 谢谢您的帮助。

- - 脚本 - -

movie_L = 'movie_L.mp4'
movie_R = 'movie_R.mp4'
output_movie = 'new_movie.mp4')
clip_L = VideoFileClip(movie_L)
(width_L, height_L) = clip_L.size
clip_L = clip_L.resize((width_L/2, height_L))
clip_R = VideoFileClip(movie_R)
(width_R, height_R) = clip_R.size
clip_R = clip_R.resize((width_R/2, height_R))
print("*** Make an array of the two movies side by side")
arrayClip = clips_array([[clip_L, clip_R]])
print("*** Write the video file")
arrayClip.write_videofile(output_movie, threads=4, audio = False)  

我意识到这已经很老了,但对于仍然有此问题的任何人,请确保在您的代码中添加progress_bar = False 例如。

arrayClip.write_videofile(output_movie, threads=4, audio = False, progress_bar = False) 

每次更新到IDLE时都要打印进度条,这会占用大量内存,从而减慢了程序的运行速度,直到完全停止。

我也有渲染缓慢的问题。 我发现使用多线程和设置比特率有很大帮助。 这是我的配置: videoclip.write_videofile("fractal.mp4",fps=20,threads=16,logger=None,codec="mpeg4",preset="slow",ffmpeg_params=['-b:v',' 10000k'])

即使预设设置为慢,这也能很好地工作。 此设置为相同数量的比特提供更好的质量,如果这不是问题,您可以将其设置为中等或快速以获得更多速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM