Time Base は、ストリームがカウントに使う時間の単位です。メディアファイルはタイムスタンプを秒で保存するのではなく、独自のクロックの「ティック」で数えます。Time Base はそのティック 1 回がどれくらいの長さかを表し、1 秒を分数で表したものです。
どのファイルがそれを保持しているかと、その値の由来
Time Base は、メディアファイル内の各ストリームごとに存在します。MP4、MOV、MKV、WebM、AVI、MPEG トランスポートストリーム内の映像・音声・字幕ストリーム、および単体の音声ファイルなどです。各ストリームはそれぞれ独自の Time Base を持つため、1 つのファイル内でも音声と映像が異なる単位でカウントされているのが一般的です。
値はエンコーダー、またはそのファイルを作成したプログラムによって決まります。コンテナ形式によっては特定の Time Base を要求し、それを固定するものもあります。形式側で選択が許されている場合は、書き込みを行うプログラムがコンテンツに適した値を選び、ファイルは単にそのプログラムのデフォルト値を持っているだけのこともあります。
その値がどのように表示されるか
Time Base は常に分数で表され、分母の数値は「1 秒あたりのティック数」です。
1/1000- ティック 1 回が 1 ミリ秒。Matroska や WebM ファイルでよく使われます。1/90000- MPEG トランスポートストリームで長く使われている値です。1/48000- 音声ストリームはしばしばサンプル数でカウントするため、Time Base はサンプリングレートに一致します。1/12800- MP4 ファイル内のビデオストリームでよく見られる値です。
タイムスタンプを秒に変換するには、その分数を掛けます。Time Base が 1/12800 のストリームで、プレゼンテーションタイムスタンプが 12800 の場合、その位置はちょうど 1 秒です。Time Base が 1/1000 の場合、タイムスタンプ 3500 は 3.5 秒の位置になります。このため、レポート内の生のタイムスタンプは非常に大きな数値に見えますが、それは秒ではなくティック数だからです。古いアプリでは、これとは別に「Codec Time Base」の行を併記していることもあります。
それが重要な理由
メディアファイル内の出来事はすべて整数個のティック単位で起こるため、Time Base はストリームが表現できる最も細かい時間分解能を決めます。フレームやサンプルの位置が 2 つのティックの間に来てしまう場合、そのタイムスタンプは丸められ、丸め誤差が蓄積していきます。
これは、フレームレートが整数ではない動画で現実的な問題になります。放送で使われる「1001 秒あたり 30000 フレーム」の場合、フレーム 1 枚は約 33 ミリ秒強ですが、きっちりしたミリ秒の整数にはなりません。そのため、ミリ秒単位の Time Base ではどのフレーム位置にも正確に合わせられません。1 秒あたりのティック数が多い、つまり分母が大きい Time Base なら、すべてのフレーム境界に正確に一致させることができます。このため、エンコーダーは単純なミリ秒よりも 1/12800 や 1/90000 のような値を好んで使います。
その影響は、単一フレームでは見分けにくく、タイミングの乱れとして現れます。音声が映像から少しずつずれていく、フレーム間隔が不均一になる、カットやシークした位置がわずかにずれる、などです。Time Base の異なるストリームを持つファイル同士を結合する場合、すべてのタイムスタンプを再スケーリングする必要があり、その変換処理は同期不具合の典型的な原因になります。このフィールド自体は、画像や音声の品質には影響せず、個人情報も含みません。