使用 MP4Box/ffmpeg 同步音频和视频以连接文件

使用 MP4Box/ffmpeg 同步音频和视频以连接文件

我有两个需要连接起来的 H.264 编码的 MPEG-4 文件。我一直使用 MP4Box 来完成这项任务,首先确保文件的编码相同(甚至比较了视频轨道上 h264_parse 的输出),然后使用以下命令进行连接:

MP4Box -cat file1.mp4 -cat file2.mp4 output_file.mp4

这是可行的,并且输出文件可以播放,但在 Quicktime 或 VLC 中播放时,第二个视频的音频开始得太早,导致连接文件的整个第二部分不同步。

我已尝试使用 ffmpeg 重新编码输出-vcodec copy-acodec copy但同步问题仍然存在。

我也尝试过先转换为 MPEG-2 格式,然后将其与简单格式连接cat file1.mpg file2.mpg > output.mpg,最后再用 ffmpeg 对结果进行重新编码。结果更糟。

我知道我可以将命令传递给 MP4Box 来调整音轨的开始时间,但我正尝试以编程方式对任何输入视频执行此操作(当然是相同的编码)。我正在寻找不需要人工干预/手动调整的可能解决方案。或者,至少,了解导致连接视频的第二部分不同步的原因。

答案1

我遇到了同样的问题。为了正确同步,您必须按如下方式编写 MP4Box 命令:

MP4Box -add file1.mp4 -cat file2.mp4 -new output_file.mp4

而不是在第一个视频之前使用-cat-add其余选项是正确的,您可以将其放在-new输出视频参数之前。

答案2

尝试使用 Matroskra 视频容器 (MKV)。

首先,你需要mkvtoolnix。下载并安装它,然后你需要启动 mkvmerge GUI(除非你喜欢命令行工具,这对我来说没问题 - 虽然你可能想看看文件链接部分mkvmerge 文档)。

点击“添加”添加第一个文件。然后点击“追加”,打开第二个文件。设置输出文件,点击底部的“开始混流”,就可以了!

如果容器不适合您的需要,您可以重新编码,或者尝试将其转换为其他格式...尽管 MKV 是一个非常可爱的容器!

答案3

从 mkvtoolnix 包中使用 mkvmerge:

mkvmerge -o "output file" "input file" +"appended file"

相关内容