FFMPEG:向视频文件添加额外的音轨

Posted

技术标签:

【中文标题】FFMPEG:向视频文件添加额外的音轨【英文标题】:FFMPEG: Add additional audio track to video file 【发布时间】:2016-03-09 12:25:10 【问题描述】:

我有两个包含以下流的视频文件:

文件 1:

流 #0:0(deu):音频:aac (LC) (mp4a / 0x6134706D),48000 Hz,立体声,fltp,126 kb/s(默认) 流 #0:1(deu):音频:ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 384 kb/s 流 #0:2(eng):视频:h264(高)(avc1 / 0x31637661)、yuv420p(tv、bt709)、1920x1080 [SAR 1:1 DAR 16:9]、4971 kb/s、23.98 fps、23.98 tbr , 2997 tb, 5994 tbc (默认) 流#0:3:视频:mjpeg、yuvj420p(pc, bt470bg/unknown/unknown), 480x480 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc

文件 2:

流 #0:0(eng):音频:aac (LC) (mp4a / 0x6134706D),48000 Hz,立体声,fltp,126 kb/s(默认) 流 #0:1(eng):音频:ac3 (ac-3 / 0x332D6361),48000 Hz,5.1(side),fltp,384 kb/s 流 #0:2(eng):视频:h264(高)(avc1 / 0x31637661)、yuv420p(tv、bt709)、1920x1080 [SAR 1:1 DAR 16:9]、4925 kb/s、23.98 fps、23.98 tbr , 23976 tb, 47952 tbc (默认) 流 #0:3(eng):字幕:eia_608 (c608 / 0x38303663), 1920x1080, 0 kb/s 流 #0:4:视频:mjpeg、yuvj420p(pc、bt470bg/unknown/unknown)、480x480 [SAR 72:72 DAR 1:1]、90k tbr、90k tbn、90k tbc

两个文件的视频内容完全相同,但第一个视频有德语音轨,第二个视频有英语音轨。

如何从德语视频文件中提取音轨并将其添加到英文视频文件中,而不会丢失英文字幕并且能够在媒体播放器中的这些音轨之间进行选择?

我对此进行了搜索,找到了多个类似问题的答案,但没有一个有效:有些只包含一个音轨,有些同时播放了两个。

我不确定这个问题是否应该在Super User上问,但是由于Stack Overflow上关于ffmpeg的问题已经很多了,所以我在这里问了。

【问题讨论】:

此问题的新读者请注意:这不是 Stack Overflow 上的主题。请参阅the help pages,尤其是名为"What topics can I ask about here?" 和"What types of questions should I avoid asking?" 的部分。 【参考方案1】:

需要注意的是,FFmpeg 不能添加到文件中,它必须一次性创建一个包含流、设置和元数据的新文件。如果创建新文件不是问题,这使它成为解决问题的好程序。

ffmpeg -i FILE1 \
     -i FILE2 \
     -map 1:2 -map 1:0 -map 1:1 -map 0:0 -map 0:1 -map 1:3 -map 1:4 \
     -c copy \
     -disposition:a -default -disposition:a:0 default \
     -disposition:v -default -disposition:v:0 default \
     OUTPUT

有关上述命令的信息,请访问FFmpeg Documentation 5.4 Main Options 和5.11 Advanced options。

生成的 OUTPUT 文件将具有如下映射的流:

Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 4925 kb/s, 23.98 fps, 23.98 tbr, 23976 tbn, 47952 tbc (default)
Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s (default)
Stream #0:2(eng): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:3(deu): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 126 kb/s
Stream #0:4(deu): Audio: ac3 (ac-3 / 0x332D6361), 48000 Hz, 5.1(side), fltp, 384 kb/s
Stream #0:5(eng): Subtitle: eia_608 (c608 / 0x38303663), 1920x1080, 0 kb/s (default)
Stream #0:6: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 480x480 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc

【讨论】:

以上是关于FFMPEG:向视频文件添加额外的音轨的主要内容,如果未能解决你的问题,请参考以下文章

如何让 FFmpeg 在单循环静音视频中自动注入 mp3 音轨?

如何使用 VLC 或 FFMPEG 命令行将外部音轨添加到视频文件

拆分长度不正确的音轨 - FFMPEG

在 SOX 中混合带有偏移量的音轨

ffmpeg 音轨提取

评估链式过滤器时忽略过滤器分号的 FFmpeg 结尾