FFMPEG 选择特定语言的第一个音频流
FFMPEG Pick First Audio Stream of Specific Language
我正在尝试从视频文件(大约有 10 种不同的音频流)中提取特定语言的单个音频流。
所以我尝试使用这个命令:
ffmpeg -i file.mkv -map 0:a:m:language:eng output.mp3
问题是该视频包含多个英语音频流。所以我得到错误:
Invalid audio stream. Exactly one MP3 audio stream is required.
这是流映射:
Stream #0:1 -> #0:0
Stream #0:4 -> #0:1
在这两个流中,我只想要第一个。我尝试使用 -map 0:a:m:language:eng -map 0:0
,但这无助于缩小范围。
注意:我需要语言过滤器,因为流编号在多个文件中不一致。但是数字较小的英文流总是我要映射的正确流。
感谢@kesh post 我找到了解决方案。
通过将命令拆分为 2 个并在下一个中进行管道传输,可以获得预期的行为。
这是对我有用的代码:
ffmpeg -i input.mkv -map 0:a:m:language:eng -acodec copy -f matroska pipe: | ffmpeg -i pipe: -map 0:0 -c:a libmp3lame output.mp3
我正在尝试从视频文件(大约有 10 种不同的音频流)中提取特定语言的单个音频流。
所以我尝试使用这个命令:
ffmpeg -i file.mkv -map 0:a:m:language:eng output.mp3
问题是该视频包含多个英语音频流。所以我得到错误:
Invalid audio stream. Exactly one MP3 audio stream is required.
这是流映射:
Stream #0:1 -> #0:0
Stream #0:4 -> #0:1
在这两个流中,我只想要第一个。我尝试使用 -map 0:a:m:language:eng -map 0:0
,但这无助于缩小范围。
注意:我需要语言过滤器,因为流编号在多个文件中不一致。但是数字较小的英文流总是我要映射的正确流。
感谢@kesh post 我找到了解决方案。
通过将命令拆分为 2 个并在下一个中进行管道传输,可以获得预期的行为。
这是对我有用的代码:
ffmpeg -i input.mkv -map 0:a:m:language:eng -acodec copy -f matroska pipe: | ffmpeg -i pipe: -map 0:0 -c:a libmp3lame output.mp3