![如何使用命令行工具在两个视频之间平滑且重复地过渡?](https://linux22.com/image/147855/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7%E5%9C%A8%E4%B8%A4%E4%B8%AA%E8%A7%86%E9%A2%91%E4%B9%8B%E9%97%B4%E5%B9%B3%E6%BB%91%E4%B8%94%E9%87%8D%E5%A4%8D%E5%9C%B0%E8%BF%87%E6%B8%A1%EF%BC%9F.png)
我想使用两个视频作为输入来输出一个视频,其中这两个视频每秒左右以平滑且重复的方式彼此淡入(或溶解)。我假设ffmpeg
与melt
、mkvmerge
或其他类似工具的组合可能会产生我想要的效果。基本上,我想ffmpeg
根据特定的时间间隔来剪切视频 A,丢弃每秒的剪切(自动)。对于视频 B 也是如此,但在这种情况下反转过程以保留丢弃的部分。我希望将这些部分交织在一起。
文件名的格式应正确,以便我可以按照上述工具之一使用通配符命令参数或批处理列表连接结果。过渡效果(例如“延时溶解”)并不是绝对必要的,但如果也有一个滤镜来实现这一点那就太好了。最后,如果这个过程能够完成那就太好了几乎不需要重新编码,以保持视频质量。
答案1
假设两个视频具有相同的分辨率和样本宽高比,您可以使用混合在 ffmpeg 中进行过滤。
举几个例子,
ffmpeg -i videoA -i videoB -filter_complex \
"[0][1]blend=all_expr=if(mod(trunc(T),2),A,B);\
[0]volume=0:enable='mod(trunc(t+1),2)'[a]; [1]volume=0:enable='mod(trunc(t),2)'[b];\
[a][b]amix" out.mp4
直切。
输出:
time, in seconds,
[0,1) -> videoB
[1,2) -> videoA
[2,3) -> videoB
...
[2N ,2N+1) -> videoB
[2N+1,2N+2) -> videoA
ffmpeg -i videoA -i videoB -filter_complex \
"[0][1]blend=all_expr='if(mod(trunc(T/2),2),min(1,2*(T-2*trunc(T/2))),max(0,1-2*(T-2*trunc(T/2))))*A+if(mod(trunc(T/2),2),max(0,1-2*(T-2*trunc(T/2))),min(1,2*(T-2*trunc(T/2))))*B';\
[0]volume='if(mod(trunc(t/2),2),min(1,2*(t-2*trunc(t/2))),max(0,1-2*(t-2*trunc(t/2))))':eval=frame[a]; [1]volume='if(mod(trunc(t/2),2),max(0,1-2*(t-2*trunc(t/2))),min(1,2*(t-2*trunc(t/2))))':eval=frame[b];\
[a][b]amix" out.mp4
每个输入的视频/音频持续 2 秒,过渡时间为 0.5 秒。
输出:
time, in seconds,
[0,0.5) -> videoA fades out 1 to 0 + videoB fades in from 0 to 1
[0.5,2) -> videoB
[2,2.5) -> videoB fades out 1 to 0 + videoA fades in from 0 to 1
[2.5,4) -> videoA
[4,4.5) -> videoA fades out 1 to 0 + videoB fades in from 0 to 1
[4.5,6) -> videoB
[6,6.5) -> videoB fades out 1 to 0 + videoA fades in from 0 to 1
[6.5,8) -> videoA
...
[4N ,4N+0.5) -> videoA fades out 1 to 0 + videoB fades in from 0 to 1
[4N+0.5,4N+2) -> videoB
[4N+2 ,4N+2.5) -> videoB fades out 1 to 0 + videoA fades in from 0 to 1
[4N+2.5,4N+4) -> videoA
答案2
你的问题很模糊。正如您所承认的,您已经开始使用一些可能的工具,但陷入困境或不知所措。因此我想回答一个方向而不是最终的解决方案。
MLT是您需要的工具。它在底层使用 ffmpeg 和其他工具。但您可以将所需的所有配置放入 MLT (XML) 配置文件中。
如果您查看熔化框架网页的顶部,您会看到一条注释:
尝试和学习 MLT 的最简单方法是下载镜头剪辑
我强烈建议您这样做并花一些时间熟悉 Shotcut。与其他基于 MLT 的编辑器不同,Shotcut 直接使用 MLT 配置文件作为其项目文件。
我建议您使用 Shotcut 将两个视频合并在一起,并替换每个视频中的剪辑。然后保存项目并在文本编辑器中打开它。然后,您可以使用它作为如何构建您自己的 MLT 配置文件的示例。