You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何为带有多音轨与多字幕轨的视频添加可切换英文音轨

如何为带有多音轨与多字幕轨的视频添加可切换英文音轨

嘿,我懂你碰到的糟心事——第一次加英文音轨把字幕搞没了,第二次想着带上字幕但好像还是没完全解决对吧?让我帮你理清楚问题,给你能直接用的解决方案。

先说说你两次尝试的问题出在哪:

  • 第一次的命令里,你只映射了视频轨和音轨(原音轨+新英文音轨),完全没加字幕轨的映射指令-map 0:s,输出的视频自然就没字幕了,QuickTime里当然看不到字幕切换选项。
  • 第二次的命令方向是对的,加了-map 0:s想保留字幕,但有两个细节没处理到位,导致字幕可能没正常出现在切换列表里:一是音轨格式的兼容性,二是编码参数的设置。

正确的解决方案命令

直接用这条命令,既能保住所有原音轨、字幕轨,又能让新加的英文音轨在QuickTime里正常切换:

ffmpeg -i m.mp4 -i eng.mp3 \
-map 0:v \
-map 0:a \
-map 1:a \
-map 0:s \
-metadata:s:a:3 language=eng \
-c:v copy \
-c:a aac \
-c:s copy \
out.mp4

命令细节拆解

我给你把每部分的作用讲明白,方便你后续调整:

  • -map 0:v:保留原视频里的视频轨
  • -map 0:a:保留原视频的3条原生音轨(意大利语、法语、德语)
  • -map 1:a:把新的英文MP3音轨添加到输出文件里
  • -map 0:s:保留原视频的4条字幕轨
  • -metadata:s:a:3 language=eng:给第4条音频轨(从0开始计数,原3条是0/1/2,新添加的是3)标记英文语言标签,这样播放器能识别出这是英文音轨
  • -c:v copy:直接复制视频轨编码,避免重新编码浪费时间还损失画质
  • -c:a aac:把你的MP3英文音轨转成和原音轨一致的AAC格式,保证QuickTime的兼容性(如果直接用copy,MP3和原AAC混装可能出现识别问题)
  • -c:s copy:直接复制原字幕轨编码,只要原字幕能在QuickTime里正常切换,这个设置就没问题

额外注意事项

  1. 如果复制字幕时出现报错,或者输出后字幕还是不显示,可能是原字幕格式(比如SRT)在MP4容器里和QuickTime兼容不好,这时候把-c:s copy改成-c:s mov_text,让ffmpeg把字幕转成QuickTime支持的格式。
  2. 你可以用ffmpeg -i out.mp4命令检查输出文件的轨信息,确认所有音轨、字幕轨都存在,并且英文音轨的语言标签正确。
  3. 轨的顺序其实不影响QuickTime识别,但把音轨都放在字幕前面的话,切换列表里的顺序会更符合日常使用习惯。

备注:内容来源于stack exchange,提问作者Tony M

火山引擎 最新活动