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


4

我有两个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来调整音轨的开始时间,但我正在尝试以编程方式为任何输入视频(当然是在相同的编码中)。我正在寻找不需要人工干预/手动调整的可能解决方案。或者,至少,了解正在发生的事情使得连接视频的第二部分不同步。

Answers:


7

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

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

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


谢谢!我有一个冻结帧,其中file1结束,file2开始,但音频继续播放。更改-cat … -cat为后-add … -cat,我同时收到音频和视频,但file2不同步。
Henrik N

1

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

首先,你需要mkvtoolnix。下载并安装它,那么你需要火起来了mkvmerge GUI(除非你喜欢命令行工具,这是罚款,由我-尽管你可能想看看在链接部分的文件中的了mkvmerge文档)。

单击“添加”添加第一个文件。然后,单击“追加”,然后打开第二个文件。设置输出文件,点击底部的“Start muxing”,然后离开!

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


我一直遇到MP4Box附加mp4文件的问题。音频搞砸了。我尝试了这个包中的mkvmerge.exe,效果很好!
cdavidyoung

»尝试使用Makostra视频容器。« - 它是不是被称为Matroska,为Matryoshka简化写作?
Lumi 2013年

0

从mkvtoolnix包中使用mkvmerge:

mkvmerge -o "output file" "input file" +"appended file"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.