从具有多个音轨的 MKV 文件中获取语言代码的最优雅方法是什么?

What's the most elegant way to get the language codes from an MKV file with multiple audio tracks?

我需要一种方法来从具有多个音轨的 MKV 文件中获取语言代码。

ffmpeg 生成输出,然后我可以使用正则表达式对其进行过滤,但它看起来不是很优雅:

$ ffmpeg -i file.mkv 2>&1 | grep Audio
Stream #0:1(eng): Audio: mp2, 48000 Hz, stereo, s16, 192 kb/s (default)
Stream #0:2(nar): Audio: mp2, 48000 Hz, mono, s16, 64 kb/s (default)

mediainfo 具有提取语言信息的能力,但在具有多个音轨的文件中,它将代码连接成一个字符串:

$ mediainfo file.mkv --inform="Audio;%Language%"  
ennar

是否有工具或命令可以更好地 return 多条轨道的语言代码,或者可以让我指定轨道编号和 return 语言代码的工具只跟踪?

运行 这个 ffprobe 命令

ffprobe in.mp4 -show_entries stream=index:stream_tags=language -select_streams a -v 0 -of compact=p=0:nk=1

将产生此输出

1|eng
2|deu
3|eng
4|eng
5|fre

其中第一个字段是绝对流索引,即计算所有类型V/A/S并且是基于 0 的。

ffprobe in.mp4 -show_entries stream=index:stream_tags=language -select_streams a:2 -v 0 -of compact=p=0:nk=1

将仅显示第三个音频流。

ffprobe in.mp4 -show_entries stream=index:stream_tags=language -select_streams 2 -v 0 -of compact=p=0:nk=1

将仅显示第三个流,无论其类型如何。