我正在尝试使用 从 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 时间戳的合适工具:我用同样的方式提取的音频和视频时间戳都是正确的。只是字幕时间戳有点问题。