我有两个需要连接起来的 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"