我有一个包含 2 个音轨的视频文件。我希望使用一个ffmpeg
操作来制作包含以下内容的视频:
- 合并音频
- 音频 #1
- 音频 #2
通过这个我可以合并音频,最终得到带有单个合并音轨的视频:
ffmpeg -i "myvideo-with-2-audio-tracks.mkv" -c:v copy -c:a aac -ac 2 -filter_complex amerge=inputs=2 "myvideo-with-1-merged-audio-track.mkv"
我可以使用第二个命令来合并所有内容,但这需要处理两次。如果我添加-c:a copy
到末尾,则会收到错误:
Streamcopy requested for output stream fed from a complex filtergraph.
Filtering and streamcopy cannot be used together
答案1
我们可以使用通道映射和编解码器索引:
ffmpeg -i "myvideo-with-2-audio-tracks.mkv" -c:v copy -filter_complex "amerge=inputs=2[a]" -map 0:v -map "[a]" -map 0:a:0 -map 0:a:1 -c:a:0 aac -ac:0:2 2 -c:a:1 copy -c:a:2 copy "myvideo-with-1-merged-audio-track.mkv"
"amerge=inputs=2[a]"
- 为合并的音频提供一个临时名称[a]
。-map 0:v -map "[a]" -map 0:a:0 -map 0:a:1
- 映射视频,然后映射合并的音频,然后映射第一个输入音频流,然后映射第二个输入音频流(映射到输出流)。-c:a:0 aac -ac:0:2 2 -c:a:1 copy -c:a:2 copy
- 应用aac
合并音频的编解码器,以及copy
两个输入音频流的编解码器。
正如原帖作者所言,我们必须设置,-ac:a:0 2
而不仅仅是-ac:0 2
获取具有 2 个音频通道的音轨 #1。
添加将-disposition:a:0 default
第一个音轨定义为默认音轨。