如何使用短转场高效自动地加入视频剪辑?

ber*_*ieb 1 python ffmpeg video-editing melt

我希望以一种简单、自动化和高效的方式使用一些短过渡(最好是交叉淡入淡出)来加入一组视频剪辑(带音频)。

IE:

ClipA ---> ClipB --> ClipC --> ClipD
[aaaaaaaa][bbbbbbbb][cccccccc][dddddddd]
(--> indicate crossfades, not to scale!)
Run Code Online (Sandbox Code Playgroud)

澄清:

  • 通过简单的,最好将涉及使用“标准”工具(即那些我已经熟悉了这样的ffmpeg,但不太知名的工具,如melt肯定出线,我愿意去探索像MoviePy新的视野)
  • 通过自动我的意思的东西,可以进行参数设置,并放入python/shell的/ etc脚本
  • 通过高效的我的意思是快于编码或最大限度地减少重新编码

目前我正在使用pythonffmpeg使用基于文本文件中的时间码的流复制参数(非常快)来切割 Matroska/h264/aac 中已经存在的视频文件。然后melt使用短亮度(交叉淡入淡出)转换(由于重新编码整个序列而非常慢)一个接一个地将这些剪辑串起来。

在我看来,这些长视频剪辑中只有几秒钟需要处理和重新编码——过渡本身。其余的可以复制。是否有一种已经存在的/直观的方法来做到这一点?我天真的方法是将剪辑进一步切成子剪辑,使用melt创建过渡,并使用concat过滤器将混乱粘合在一起。

例如:

ClipA1 ClipA2 ClipB1 ClipB2 ClipB3 ClipC1 ClipC2 ClipC3 ClipD1 Clip D2
[aaaaaaa] + [a][b] + [bbbbbb] + [b][c] + [cccccc] + [c][d] + [ddddddd]
(+ indicates concat-ing of subclips; [x][y] indicates a short xfade from x to y)
Run Code Online (Sandbox Code Playgroud)

不过,我沉默寡言关机充电什么可能是一个傻瓜的差事,因为我预料melt/ffmpeg周围切口和音频同步的时间-相关陷阱; 我不想因为 I 帧放置或你有什么而错过视频或音频的部分。另外,我有一种感觉,我不是第一个遇到这个问题的人,所以我很好奇那些比我更聪明的人是如何解决这个问题的——正如我所说,我的解决方案往往很幼稚!

希望这已经很清楚了。为阅读干杯,并提前致谢!


就上下文而言,我的目的是将未经编辑的直播视频游戏画面减少为有趣/“有用”的视频;这消除了加载东西、整理连接问题等无聊的毛病。但它也可以概括为突出显示,显示进展的蒙太奇。由于理论上每次出现新镜头时都会出现这种情况,因此我对以最有效(主动最懒惰)的方式进行处理非常感兴趣。

小智 7

我没有时间测试它,但是如果您想使用 MoviePy,这应该可以工作:

from moviepy.editor import *

clips = [ VideoFileClip("vid1.mp4"),
          VideoFileClip("vid2.mp4"),
          VideoFileClip("vid3.mp4"), ... ]


fade_duration = 1 # 1-second fade-in for each clip
clips = [clip.crossfadein(fade_duration) for clip in clips]

final_clip = concatenate_videoclips(clips, padding = -fade_duration)

# You can write any format, in any quality.
final_clip.write_videofile("final.mp4", bitrate="5000k")
Run Code Online (Sandbox Code Playgroud)