显示字幕列表,获取每个字幕轨道的ID和名称。

12

我想获取所有可用的字幕轨道列表,例如:

#1 - id, name
#2 - id, name
#3 - id, name
...

如何列出我拥有的字幕轨道数量,显示每个轨道的ID和名称

是否有任何FFmpeg选项可以显示此类列表?

2个回答

24

示例

ffprobe 命令用于列出流 ID 和语言:

ffprobe -loglevel error -select_streams s -show_entries stream=index:stream_tags=language -of csv=p=0 input.mkv

结果

5,eng
6,fao
7,ain

这显示了流ID #5是英语,#6是法罗语,#7是阿伊努语。请参见ISO 639代码列表(参考639-2/T或639-2/B)获取语言缩写。

-map选项

您可以使用此信息创建命令。如果您想使用英语和阿伊努语,请使用:

-map 0:5 -map 0:7

或者

-map 0:s:0 -map 0:s:2

或者

-map 0:s:m:language:eng -map 0:s:m:language:ain

请查阅-map选项的文档以获取更多信息。


是的,我需要语言(或容器作者命名为字幕,无所谓)。我只想使用 FFmpeg 工作,因为我在 Android 上使用它(https://github.com/WritingMinds/ffmpeg-android-java),而且没有 FFprobe - user25
@user25 ffmpeg 从0开始计数。我猜其他工具从1开始。 - llogan
ffprobe 使用的是 ISO 639-2T/639-3(三字母)而不是 ISO 639-1(两字母)。 mediainfo 使用的是 ISO 639-1 语言缩写。 - MrPotatoHead
@MrPotatoHead 在回答中进行了澄清。我之前只是复制并粘贴了链接标题。 - llogan

1

FFmpeg似乎没有这样的选项

所以我们只能通过ffmpeg -i VIDEO_FILE_NAME解析所有打印出来的数据(过滤掉非流文本轨道行)

此外,FFmpeg并不真正打印出那个ID(它只是由FFmpeg生成的流位置),就像MediaInfo会打印出来的那样。


1
懒惰的读者请注意:ffprobe input.mkv 2>&1 >/dev/null | grep Stream - Giancarlo Sportelli

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接