用語集

動画におけるBフレームとは何ですか

Bフレームとは、前後両方のフレームを利用できる動画フレームです。Bフレームの仕組みと、お使いのファイルにある Has B Frames の値が何を意味するのかを学びます。

b-frames

Bフレームとは、前後のフレームの両方を利用して画像を再構成できる動画フレームのことです。B は「bidirectional(二方向)」を意味します。Bフレームは他のフレーム形式よりも多くの圧縮率を実現できるため、動画サイズを小さく保つのに役立ちます。

動画ファイルのメタデータには、Has B Frames や has_b_frames という項目が表示されることがあります。名前からは「はい・いいえ」で答える項目のように見えますが、実際の値は数値です。この数値は、動画を正しい順序で表示するために、デコーダーがメモリ内に保持しておく必要があるフレーム数を表します。

bフレーム とは:IフレームやPフレームとの違い

動画の圧縮は一般的に、フレーム同士を比較し、その差分のみを記録することで行われます。MPEG-2 動画では、次の3種類のフレームが定義されています。

  • Iフレーム: 他のフレームを参照せずに符号化されるため、このフレームからデコードを開始できます
  • Pフレーム: 直前の Iフレームまたは Pフレームを参照できます
  • Bフレーム: 前後の Iフレームまたは Pフレームの両方を参照できます

Bフレームは、時間的に後に現れるフレームに依存する場合があります。そのため、その後のフレームを先に保存しておく必要があります。保存される順序は、画面に表示される順序と異なります。代表的な MPEG-2 のフレーム列は次のようになります。

  • 表示順序: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • 保存順序: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

値の見え方

Has B Frames の値は整数です。FFmpeg では、この値をデコーダー内のフレーム並べ替えバッファの大きさとして説明しています。MPEG-2 動画では、FFmpeg は次の2つの値を定義しています。

  • 0: Iフレームと Pフレームのみを使用する低遅延動画
  • 1: Iフレーム、Pフレーム、および Bフレームを使用する動画

H.264 や HEVC のエンコーダーでは、一部の Bフレームを他のフレームの参照用として保持することもできます。FFmpeg の H.264 用テストファイルは、この設定によって値がどのように変化するかを示しています。ファイル名にはエンコーダー設定が反映されています。

  • 連続する Bフレームを最大3枚とし、参照用に保持しない場合: 1
  • 連続する Bフレームを最大3枚とし、一部を参照用に保持する場合: 2
  • 連続する Bフレームを最大4枚とし、一部を参照用に保持する場合: 2

したがって、この値は Bフレームの枚数そのものではありません。ffprobe プログラムは、各フレームの種類を pict_type 値として I、P、B のいずれかで表示します。NB Frames 項目はフレームの総数を示しますが、種類は示しません。

値の由来

この項目名は FFmpeg に由来し、ffprobe プログラムが動画ストリームに対して has_b_frames として出力します。H.264 ストリームでは、この値をヘッダー内に記載できる場合があります。ヘッダーに値が記載されていない場合、FFmpeg はフレームとそのタイミングから値を算出します。

動画が Bフレームを使用するかどうかは、エンコーダーの設定によって決まります。FFmpeg や Microsoft H.264 エンコーダーでは、0 を指定すると Bフレームが無効になります。

どのファイルがそれを持っているか

この項目は動画ストリーム専用です。MP4、MOV、MKV、WebM、AVI ファイルの動画ストリームでこの項目を確認できます。フレームの順序が並べ替えられている MOV ファイルには、各フレームのデコードと表示の時間差を記録したテーブルも保存されます。

Bフレームを使用できるかどうかはコーデックによって決まります。MPEG-2 動画や H.264 Main プロファイルでは Bフレームを使用できますが、H.264 Baseline プロファイルでは使用できません。WebM ファイルで使われる VP8 コーデックには Bフレームがありません。VP8 では、フレームが後続フレームから予測されることがないためです。

それが重要な理由

Bフレームは動画サイズの削減に役立ちますが、その分遅延が増えます。エンコーダーはフレームを保存する前に並べ替える必要があり、この遅延は連続する Bフレームの数に依存します。

フレームが並べ替えられた動画では、各フレームには「デコードするタイミング」と「表示するタイミング」という2種類の時間情報があります。FFmpeg は、これらをストリームのタイムベースに基づくタイムスタンプとして出力します。

メタキー