我想连接随机格式的不同视频文件。首先,我将它们转换为 flv,将每个视频的帧速率调整为最低的相关视频。下一步是对它们进行解码并删除标题(但不是序列中第一个视频的标题,然后我将它们与 cat 连接,最后对结果序列进行编码。
但是从序列部分到序列部分,视频和音频轨道越来越不同步。
很高兴有任何想法。
我想连接随机格式的不同视频文件。首先,我将它们转换为 flv,将每个视频的帧速率调整为最低的相关视频。下一步是对它们进行解码并删除标题(但不是序列中第一个视频的标题,然后我将它们与 cat 连接,最后对结果序列进行编码。
但是从序列部分到序列部分,视频和音频轨道越来越不同步。
很高兴有任何想法。
然后,您的问题是在进行 concat 过程时保持同步。经验法则,步骤越少越好。这应该可以解决您的问题。首先,使用 mpg 而不是 flv 作为中间格式。其次,将 -copyts 添加到每个命令(复制时间戳以保持同步)。此外,无需转到最低帧速率。您可以通过此过程保留最高视频的质量。尝试这个:
$ ffmpeg -i a.mp4 -qscale:v 1 -copyts a.mpg
$ ffmpeg -i b.flv -qscale:v 1 -copyts b.mpg
现在你应该有两个(大)兼容视频质量的中间文件(变量:)-qscale:v 1
。您已准备好将它们粘合在一起。
$ ffmpeg -i concat:"a.mpg|b.mpg" -c copy all.mpg
如果你在 Windows 上,你会没事的。在 UNIX 风格上,您需要在管道之前添加一个反斜杠。(在我的版本中,我遇到了大量buffer underflow / packet too large, ignoring buffer limits to mux it
错误。它们似乎是无害的。)现在您可以转换为您想要的任何更有用的格式,并且质量更逼真。
$ ffmpeg -i all.mpg -qscale:v 2 -copyts all.mp4
我已经成功地使连接的视频保持同步,但质量似乎不如应有的好。也许调整中间文件参数。