我不知道为什么我会得到无效的流说明符。以下是我想做的事情
输入文件
- 流 0:0:视频流(我正在将其转码为h.264。)
- 流 0:1:5.1 AC3(我正在将其转码为 5.1 AAC。)
- 流 0:2:AAC立体声音轨评论(我想复制这个。)
- 直播 0:3:电影的字幕轨道(我想复制这个。)
- 流 0:4:导演评论的字幕轨道(我想复制这个。)
命令:
ffmpeg -i guard.mkv -c:v libx264 -crf 17 -c:0:a:0 aac -cutoff 20000 -ac 6 -b:a 512K -c:0:a:1 copy -c:s copy guard1-1.mkv
我也尝试了下面的命令,但最终编码为默认的 Vorbis 而不是 AAC。我也不知道为什么:
ffmpeg -i guard.mkv -c:v libx264 -crf 17 -map 0 -c:a:1 aac -cutoff 20000 -ac 6 -b:a 512K -c:a:2 copy -c:s copy guard1-1.mkv
如果有人能建议正确的命令并解释我哪里错了我就可以下次改进!
答案1
我们可以为每个音频流应用流号说明符,并映射所有内容:
ffmpeg -y -i guard.mkv -c:v libx264 -crf 17 -c:a:0 aac -cutoff:a:0 20000 -ac:0 6 -b:a:0 512k -c:a:1 copy -c:s copy -map 0:v -map 0:a:0 -map 0:a:1 -map 0:s guard1-1.mkv
默认映射仅适用于一个音频流,而由于我们有两个音频流,因此我们必须映射两者:-map 0:a:0 -map 0:a:1
,并且由于我们使用映射,因此我们必须映射所有流,因此我们使用-map 0:v -map 0:a:0 -map 0:a:1 -map 0:s
。
为了指定哪个参数应用哪个音频流,我们必须在每个参数中使用流号,其中a:0
应用第一个并a:1
应用第二个输出音频流。
-c:a:0 aac -cutoff:a:0 20000 -ac:0 6 -b:a:0 512k
应用第一个输出音频流。-c:a:1 copy
应用第二个输出音频流。