Probe score とは、FFmpeg がファイルのコンテナ形式についてどれくらい確信を持っているかを表す指標です。FFmpeg は音声・動画ファイルを読み取り変換するマルチメディアフレームワークであり、そのプログラム ffprobe がこのスコアを出力します。
スコアは 0 から 100 までの整数で、数値が高いほど形式がよく一致していることを意味します。スコアは MKV や MP4 などのコンテナ形式だけを表します。音声や映像の品質を評価するものではありません。
値の由来
Probe score はファイル内に保存されていません。FFmpeg はファイルを開くたびに、その都度スコアを計算します。
FFmpeg には多くの形式ごとに小さな検出器が用意されています。各検出器はファイルの先頭部分を読み込み、自分の形式の特徴を探し、スコアを返します。最も高いスコアを得た形式が採用されます。
FFmpeg はまず 2048 バイト分のデータから検出を開始します。どの形式も 25 を超えるスコアにならない場合、データ量を 2 倍にして再試行します。
既定の上限は 1,048,576 バイト、約 1 MB です。最後の試行では、0 より大きいスコアがあれば十分と見なされます。
入力に、ある形式と一致する MIME タイプ が含まれている場合、その形式には最大 100 まで 30 点のボーナスが加算されます。最高スコアで 2 つの形式が同点になった場合、FFmpeg はどちらの形式も採用しません。最後の試行のあとに候補が残らなければ、FFmpeg は Invalid data found when processing input というエラーを出して停止します。
ファイル拡張子がスコアに与える影響
高い probe score があっても、ファイル拡張子 が正しいと証明できるわけではありません。例えば、Matroska の検出器は、ファイルヘッダー内に既知のドキュメントタイプがあれば、ファイル名に関係なくスコア 100 を返します。
検出器がある形式の場合、一致する拡張子によってスコアは通常 0 から 1 に引き上げられる程度です。検出器がない形式は拡張子に依存しており、一致するとその形式のスコアは 50 になります。拡張子が疑わしいときは、スコアの横に ffprobe が表示する形式名と拡張子を見比べて確認してください。
その値がどのように表示されるか
-show_format オプションを使うと、ffprobe はフォーマットセクション内の 1 行としてスコアを表示します: probe_score=100。ffprobe の XML レポートも、probe_score という属性名で同じ数値を含みます。
一般的な値
これらの例は FFmpeg 9.0 のソースコードに基づくものです。他のバージョンでは異なる数値になることがあり、例えば FFmpeg 8.1 では MP3 の例が 51 になることがあります。
100:ftypまたはmoovというセクションを持つ MP4 または MOV ファイル100: 既知のドキュメントタイプを持つ Matroska または WebM ファイル100: 妥当なストリーム情報を持つ FLAC ファイル99: 標準的な RIFF ヘッダーを持つ WAV ファイル52: 先頭に少なくとも 7 フレームの音声フレームがある MP3 ファイル51: 先頭に少なくとも 3 フレームの音声フレームがある ADTS 形式の AAC ファイル50: 検出器がなく、拡張子だけで一致した形式のファイル0:-fオプションで形式が強制され、FFmpeg が検出処理をスキップしたファイル
ファイルにとって重要な理由
検出されたスコアが 25 以下の場合は注意が必要ですが、それだけで不具合があると断定できるわけではありません。この場合、FFmpeg は misdetection possible という文言を含むメッセージを出力し、形式を誤検出している可能性があることを示します。
MP3 や AAC ファイルでは、検出器が最大でも 52 までしか返さないため、スコアが 50 前後になるのが通常です。そのため、51 や 52 というスコアであっても、MP3 ファイルに問題があることを意味するわけではありません。
検出されたスコアが 25 以下の場合、FFmpeg 開発者向けドキュメントでは、より多くのデータで再試行することが推奨されています。-formatprobesize オプションは、形式検出に使うデータ量の上限をバイト単位で設定します。-probesize オプションと -analyzeduration オプションは別の役割を持ち、ストリーム詳細を見つけるために FFmpeg が読み取るデータ量と時間を制限します。