Skip to content
自由人的 BLOG

ffmpeg 合并 MP4 M4A 文件

ffmpeg, mp4
阅读量

前两天下载了一部动画片,下载好的目录里除了一个有声音和图像的 MP4 文件,还有一个普通话对白的 M4A 音频文件。今天费了些功夫,终于用 ffmpeg 把两个文件合并在一起,生成一个双音轨的视频文件。

差强人意

开始搜索了下怎样用 ffmpeg 把这个额外的音频合并到原有的 MP4 文件里去,敲了几个命令,结果不尽如人意,尝试了几次没有成功,退而求其次,把 MP4 文件里的视频和 M4A 音频合并在一起了,算是把 MP4 原本的音轨替换掉了。

  • original.mp4 是下载好的 MP4 文件
  • mandarin.m4a 是下载好的普通话对白 M4A 音频文件
  • output.mp4 是最终的输出文件
  • -map 0:v:0 中的第一个 0 表示(-i 指定的)第一个输入文件,v 表示需要的其中的视频内容,第二个 0 指定要的是文件里的第一个视频
  • -map 1:a:0 与上面类似,表示的是第二个(1)输入文件的第一个(0)音频(a)内容

最后得到的 output.mp4 不包含 MP4 文件原本的音频内容了,只有新合进去的音频。

这一节的标题“差强人意”我应该没用错,这个结果的确让我还算满意,几乎决定不再继续下去了。

各种失败的尝试

下面是最开始的几次失败尝试。

结果跟原始文件基本一致。

考虑到 MP4 可能不支持多音轨——实际上是支持的,换用 mkv 作为输出格式,又做了一次尝试,结果表现仍然跟原始 MP4 文件一样。

最后的失败尝试,试了一个较为复杂的操作,从 MP4 文件里分离出视频和音频文件,再和已有的 M4A 文件一起合并。

仍然没得到“双音轨”。


Final

最终在做这份记录时,可能是理清了一些思路,忽然有了想法,通过几个 -map 参数分别指定一个视频流,两个音频流作为输入,合并为一个文件。

终于达到了最初的目的,一部有画面,有英文音轨,有普通话音轨的动画片。

← 近期写 Go 的一点语法碎片整理← 上一篇