惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Jina AI
Jina AI
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI
博客园 - 司徒正美
罗磊的独立博客
J
Java Code Geeks
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Vercel News
Vercel News
A
About on SuperTechFans
I
InfoQ
D
DataBreaches.Net
爱范儿
爱范儿
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
U
Unit 42
aimingoo的专栏
aimingoo的专栏
宝玉的分享
宝玉的分享
P
Proofpoint News Feed
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队

PixelNest

会议是效率的杀手 国庆出游记录 对居家办公的一些想法 2022 春节 《搏击俱乐部》的结局 纪念 PAI 头一回达到 100 卡片笔记法 《刑法学讲义》的部分摘录 迁移博客 《UNIX 传奇》摘录 就地过年 一点记录:docker-compose 编排不同项目间的网络 近期读的几本书 办新身份证 git 获取其他分支的单个文件或目录 我的高考成绩 推荐 2020 年上半年的 8 部影视作品 ChromeOS 开发者模式 终于下单了《守望者》 联通来电管家服务 一些实用的 bash 代码片段 关于 鸟枪换炮 《架构整洁之道》摘录 惨淡的星球大战 旧笔记本电脑 if...then... 命令行检测 SSL 证书过期时间 《程序员的职业素养》读书笔记 2019 国庆假期
ffmpeg 合并 MP4 M4A 文件
2018-08-22 · via PixelNest

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

差强人意

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

ffmpeg -i original.mp4 -i mandarin.m4a -c copy -map 0:v:0 -map 1:a:0 output.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 文件原本的音频内容了,只有新合进去的音频。

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

各种失败的尝试

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

ffmpeg -i original.mp4 -i mandarin.m4a -acodec copy -vcodec copy output.mp4

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

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

ffmpeg -i original.mp4 -i mandarin.m4a -c copy output.mkv

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

ffmpeg -i original.mp4 -an -c:v copy video.mp4
ffmpeg -i original.mp4 -vn -c:a copy audio.m4a
ffmpeg -i video.mp4 -i audio.m4a -i mandarin.m4a -c copy output.mkv

仍然没得到“双音轨”。


Final

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

ffmpeg -i original.mp4 -i mandarin.m4a -c copy -map 0:v:0 -map 0:a:0 -map 1:a:0 output.mkv

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