我有多个视频文件对(.mp4)基本上是相同的视频,但使用不同的语言(我的情况是原始英语和同步德语)。我知道使用 ffmpeg,我可以获取多个音频流(或文件)和一个视频文件,并将它们组合在一起,这样我就有一个包含所有输入流的输出文件,例如在 VLC 中,我可以启动视频,然后通过选择另一个音轨在菜单中切换语言。
为此,我使用以下代码:
ffmpeg -i 'in_video_german.mp4' -i 'in_video_english.mp4' -c:a copy -c:v copy
-map 1:v:0 -map 0:a:0 -map 1:a:0
-metadata:s:a:1 language=eng-shortest "out_video_combined.mp4"
然后,我在文件中就有了英文版的音轨和视频轨道out_video_combined.mp4
。到目前为止一切顺利。
现在来回答这个问题:
其中许多视频都是电视录制的(这完全合法,请不要试图告诉我其他事情),因此它们不会自动同步。我尽力计时录制的起点,但有时在其中一个(或两个)视频上,我会错过电影或剧集的前几秒钟。我现在该如何正确地合并视频?我可能需要将其中一个音轨(最好是德语音轨,因为英语音轨与演员的嘴唇同步)向前或向后移动一定量的时间,但我不知道要移动多少。我可能可以通过反复观看特定场景来找出以毫秒为单位的确切时间,但一定有更好的方法。
我已经做了一些研究:
- 溪流处置使用 ffmpeg
- 两个非常老的线程有类似的问题链接 1 链接 2
- A发布有关发现视觉差异的帖子两个视频之间
- 比较视频使用 OpenCV 和 Python
在最好的情况下,所有这些都应该可以工作而无需重新编码任何内容,因为这样速度更快,但如果我需要,我可以这样做。