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 つのサブタイトルに対応します。ブロック内のタイムスタンプはソートされません。ブロック内の最後の 2 つのタイムスタンプは同一であるか、最大 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セクション エントリも追加されましたが、どれも字幕とは関係がないため、表示しませんでした。

最後に、PTS タイムスタンプを抽出するには、一般的に適切なツールであると思われることを述べたいと思いますffprobe。同じ方法で抽出したオーディオとビデオのタイムスタンプはすべて正しいです。問題となるのは字幕のタイムスタンプだけです。

関連情報