Python 中的高性能视频编辑

High performance video edit in Python

我正在尝试在 mp4 视频的非常短的部分添加水印。它必须非常非常快。现在我试着用 moviepy 来做这是我的代码:

import moviepy.editor as mp

video = mp.VideoFileClip("video.mp4")
part1 = video.subclip(0,10)
part2 = video.subclip(10,15)
part3 = video.subclip(15,152.56)
logo = (mp.ImageClip("logo.png")
      .set_duration(part2.duration)
      .resize(height=50) # if you need to resize...
      .margin(right=8, top=8, opacity=0) # (optional) logo-border padding
      .set_pos(("right","top")))

partSubtitles = mp.CompositeVideoClip([part2, logo])
final_clip = mp.concatenate_videoclips([part1, partSubtitles, part3])
final_clip.write_videofile("my_concatenation.mp4")

添加徽标和合并视频几乎可以立即完成,但写入光盘需要 1 分钟才能写入 2 分钟的视频,这明显太长了。您知道一种只编辑几帧并更快保存的方法吗?

其次,转换后,新文件大约大了 40%。为什么?如何解决?

重新编码视频总是一个缓慢的过程,我怀疑 moviepy 默认使用(甚至可以使用)高性能编码器。如果可能的话,最快的通用解决方案可能是使用 FFMPEG 进行整个编辑。例如,here's a quick demonstration of how to add watermarks using FFMPEG. Using a low-level tool like that is probably your best chance to get high-performance editing, and if you need to execute it from Python, just call the ffmpeg command using subprocess.

我尝试了 FFMPEG,但性能也很低,无法按要求制作视频。

我们购买了更强大更大的服务器,现在我们一直在处理文件 - 随时为新观察者做好准备。它不是一个完美的解决方案,但它的可扩展性要高得多。

为了提高 videos/h 的速度,我没有使用 moviepy,而是使用了 FFMPEG - 性能提高了 30%,视频质量的下降更少/文件大小的增加。