如何使用 ffprobe 提取字幕时间戳(未按预期工作)?

如何使用 ffprobe 提取字幕时间戳(未按预期工作)?

我正在尝试使用 从 M2TS 文件中提取字幕时间戳ffprobe。这没有按预期工作。已知 M2TS 文件在第 4 轨中包含 1001 个字幕,但我得到的时间戳约为 4000 个。此外,这些时间戳以奇怪的方式关联并且未排序。

我正在使用的命令行:

ffprobe -show_entries packet=stream_index,pts,duration -of compact=p=0:nk=1 input.m2ts > ts.txt

ts.txt然后包含如下块(为了便于阅读,我插入了空行):

4|57795041|N/A|
4|57795000|N/A|
4|57789168|N/A|
4|57789250|N/A|
4|57789250|N/A|
4|57982728|N/A|
4|57982687|N/A|
4|57982686|N/A|

4|63380621|N/A|
4|63380580|N/A|
4|63374748|N/A|
4|63374830|N/A|
4|63374830|N/A|

... and so on

每个块对应一个字幕。块中的时间戳不排序。块中的最后两个时间戳相同或最多相差 1 个刻度。时间基准为90000 ticks / s

我确信我的问题是由于我对ffprobe字幕时间戳的工作原理和嵌入容器的方式缺乏了解。有人能简单解释一下如何以正确的方式提取字幕时间戳吗?我只对 PTS 时间戳感兴趣。

然后,我将框架信息添加到输出并使其打印部分和键:

ffprobe -show_entries packet=stream_index,pts,duration:frame -of compact input.m2ts > ts.txt

这没有帮助;下面显示了输出的一个示例:

packet|stream_index=4|pts=76826553|duration=N/A|
packet|stream_index=4|pts=76826144|duration=N/A|
packet|stream_index=4|pts=76826143|duration=N/A|
subtitle|

除了更加冗长之外,现在还增加了subtitle部分条目,但它们不包含数据。当然,现在也有额外的frame部分条目,但我没有显示它们,因为它们都与字幕无关。

最后,我想说的是,ffprobe总体来说,这似乎是一个提取 PTS 时间戳的合适工具:我用同样的方式提取的音频和视频时间戳都是正确的。只是字幕时间戳有点问题。

相关内容