无法弄清楚为什么在 FFmpeg 中会出现无效流说明符 0:a:0 错误?

无法弄清楚为什么在 FFmpeg 中会出现无效流说明符 0:a:0 错误?

我不知道为什么我会得到无效的流说明符。以下是我想做的事情

输入文件

  • 流 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应用第二个输出音频流。

相关内容