Skip to content Skip to footer

使用Python MoviePY拼接视频太慢了

为了获得最佳加速效果,您需要使用moviepy中的ffmpeg-tools。下面是一个示例:

from moviepy.video.io.ffmpeg_tools import ffmpeg_merge_video_audio

# printing logs can be a bottleneck sometimes, so we put ffmpeg_ouput=False

# and logger = None

# you can change video codec(vcodec) or audio codec (acodec) as per your need

ffmpeg_merge_video_audio(video_path,

audio_path,

output_path,

vcodec='copy',

acodec='copy',

ffmpeg_output=False,

logger=None)

我建议你将其运行在一个独立的进程中(而非主进程/线程)。你可以使用Python中的multiprocessing模块轻松实现。

但即使你想坚持使用final_video.write_videofile(),我建议你传递verbose=False和logger=None以获得更快的I/O速度。并且使用threads=as you want。如下所示:

final_video.write_videofile(video_dir + 'myoutfile.mp4',

fps=24,

verbose=False,

logger=None,

threads=32)

我其实不确定为什么这个操作如此缓慢,因为在底层,write_videofile() 实际上是使用 ffmpeg 的。例如:

# from the source of moviepy (ffmpeg_writer.py - line 80 onwards)

cmd = [

get_setting("FFMPEG_BINARY"),

'-y',

'-loglevel', 'error' if logfile == sp.PIPE else 'info',

'-f', 'rawvideo',

'-vcodec', 'rawvideo',

'-s', '%dx%d' % (size[0], size[1]),

'-pix_fmt', 'rgba' if withmask else 'rgb24',

'-r', '%.02f' % fps,

'-an', '-i', '-'

]

.... more codes

if threads is not None:

cmd.extend(["-threads", str(threads)])

Copyright © 2088 我的世界杯_瑞奇马丁世界杯主题曲 - msdc8.com All Rights Reserved.
友情链接