Duration は、何かが続く時間の長さのことです。メディアファイルでは、duration は合計の再生時間を意味します。Video duration は動画が最初から最後まで再生される長さを指し、audio duration も曲や録音の再生時間について同じ意味になります。
通常はメディアプレーヤーで合計時間としてこの数値が表示されます。メタデータでは、同じ情報が Duration という名前のフィールドに入っています。
どのファイルがそれを持っているか
Duration は時間の経過とともに再生されるファイル、つまり音声ファイルと動画ファイルに付く値です。静止画像やテキスト文書には、通常 duration フィールドはありません。
アニメーション画像は特別なケースです。GIF ファイルはフレームごとの遅延時間を保存しますが、合計時間は保存しません。それでも ExifTool は、アニメーションを 1 回再生する際の Duration を出力します。
値の由来
形式によっては長さを直接保存します。別の形式では、ソフトウェアが長さを計算するために使う値を保存します。
- MP4 と MOV: ムービーヘッダーにタイムスケールと duration が保存されます。タイムスケールは 1 秒あたりの時間単位の数で、duration はその単位を数えたものです。
- MKV と WebM: セグメント情報に、ティック単位で数えたオプションの
Duration要素を含めることができます。既定では、1 ティックは 1 ミリ秒です。 - MP3: ID3 タグには、長さをミリ秒単位で持つ
TLENフレームを含めることができます。ExifTool は、ファイルサイズやビットレートなどの他の値から長さを計算します。 - FLAC: ファイルにはサンプルの総数とサンプルレートが保存されます。ソフトウェアはこれら 2 つの値から長さを計算し、合計が
0の場合は総サンプル数が不明であることを意味します。 - WAV: ExifTool は、平均バイト数/秒とファイルサイズから長さを計算します。
値の見え方
同じ長さでも、ファイルを読み取るプログラムによって表示形式が異なることがあります。
00:05:15: 時・分・秒です。このファイルは 5 分 15 秒再生されます。15.23 s: 単位付きの秒数です。200.541000: 単位のない数値です。FFmpeg プロジェクトの ffprobe プログラムは、duration を小数点以下 6 桁でこの形式で表示します。この数値は 200.541 秒、約 3 分 21 秒を意味します。N/A: 既定の出力形式では、duration が存在しないときに ffprobe はこう表示します。JSON と XML の出力形式では、代わりに duration が省略されます。
単位のない数値が、必ずしも秒を意味するとは限りません。TLEN フレームはミリ秒を数え、ffprobe の duration_ts 値はストリームのtime base の単位を数えます。どのフィールドからその数値を取得したのか確認してください。
なぜプログラムによって表示される duration が異なるのか
同じファイルでも、プログラムによって表示される duration が異なることがあり、どちらのプログラムも必ずしも間違いとは限りません。主な理由は次の 4 つです。
- 丸め: 秒単位のみを表示するプレーヤーは、
200.541を四捨五入して表示します。 - トラックの分離: 映像と音声は別々のトラックを持ち、それぞれに duration があります。MOV ファイルでは、ムービーの duration は最も長いトラックに対応します。
- 開始時刻: 各ストリームはそれぞれ独自の開始時刻を持つことができます。FFmpeg は最も早い開始から最も遅い終了までを測定できるため、遅い開始があると合計が長くなることがあります。
- 推定値: ビットレートはあるが duration がないファイルもあります。その場合、FFmpeg はビットレートとファイルサイズから duration を推定し、その結果が正確でない可能性があると警告します。
それが重要な理由
Duration を見ることで、ファイルを再生せずに確認できます。5 分 15 秒のクリップを想定していて 15.23 s と表示された場合、そのファイルは期待していたものではない可能性があります。
Duration は他の値とも関係します。FFmpeg はファイルサイズと duration から全体のビットレートを計算できます。