Bフレーム
Bi-directional predicted frame / ビーフレーム
前のフレームと後ろのフレームの両方を参照して差分を記録する圧縮フレームのことです。同じ画質ならデータ量を最も小さくできる一方、フレームを並べ替えて符号化するため遅延が増えます。
- 意味
- 表示順で前と後ろの両方のフレームを参照して符号化したフレーム
- 別の呼び方
- Bピクチャ、双方向予測フレーム
- データ量
- IフレームやPフレームより小さくなることが多い
- 符号化の順番
- 参照する後ろのフレームを先に送るため、表示順と並びが入れ替わる
- 遅延
- 並べ替えのぶん、エンコードとデコードの両方で待ちが生じる
- H.264のプロファイル
- Baselineでは使えない。MainやHighで使える
- 設定の目安
- x264の `bframes` の既定は3枚。低遅延の配信では0にする
- 参照Bフレーム
- Bフレームを他のBフレームの参照に使う構造。Bピラミッドと呼ぶ
エンコーダの設定に「Bフレーム 3」のような欄があり、ライブ配信の手引きでは0にするよう書かれていることがあります。Bフレームは前後の両方を見て差分を作るのでよく縮みますが、そのために映像を並べ替えて処理する必要があり、その並べ替えが遅延になります。
Bフレームが使われる場面
ファイルとして配る動画では、Bフレームを入れるのが標準的です。H.264やHEVCで書き出したMP4、放送で使われるMPEG-2のストリームはいずれもIBBPのような並びを取り、同じビットレートでも画質を稼げます。Blu-rayやオンデマンド配信のファイルも同様です。
一方、遅延を詰めたいライブでは外します。スポーツ中継の低遅延配信や、双方向のやり取りがある場面ではBフレームを0にし、IフレームとPフレームだけで組みます。LL-HLSのように1秒未満の区切りで送る方式でも、並べ替えの待ちは邪魔になります。
古い端末や組み込み機器に向けた配信でも外すことがあります。H.264のBaselineプロファイルはBフレームを使えない決まりなので、Baselineを指定した時点で自動的にIフレームとPフレームだけの構成になります。
Bフレームの仕組みと符号化の順番
Bフレームは、前のフレームと後ろのフレームの両方から予測します。人が横切って背景が隠れ、また現れるような場面では、後ろのフレームに写っている背景を使えるため、前だけを見るPフレームより少ないデータで表せます。
ここで問題になるのが順番です。後ろを参照するには、そのフレームを先に復号しておく必要があります。そこでエンコーダは表示順を組み替え、参照される側を先に送ります。表示順がI・B・B・Pなら、符号化と伝送の順はI・P・B・Bになります。ファイルの中では、この2つの順番をPTSとDTSという別々のタイムスタンプで管理します。
並べ替えのために、エンコーダは後ろのフレームが入ってくるまで出力を待ちます。Bフレームを3枚挟む設定なら、その枚数ぶんの入力を待ってから送り出すので、フレーム数に応じた遅延が積み上がります。Bフレームを0にすると遅延が減るのは、この待ちがなくなるからです。
H.264以降では、Bフレームを他のBフレームの参照に使えます。この構造をBピラミッド、参照Bフレームと呼び、圧縮率はさらに上がりますが、参照の関係は複雑になります。
Bフレームの設定で間違えやすい点
多いのは、遅延の原因を回線だけで探してしまうことです。配信の遅延が数百ミリ秒ぶん想定より大きいときは、エンコーダのBフレームの枚数と先読みの設定を先に確かめてください。x264では bframes に加えて rc-lookahead も遅延に効きます。
編集用の素材にBフレームの多いファイルを使うのも、つまずきやすい点です。任意の1コマを出すには前後のフレームを復号する必要があり、コマ送りやスクラブが重くなります。編集ではオールイントラの素材か、プロキシに置き換えて進めるのが確実です。
納品仕様でBフレームの有無やGOPの構造が指定されることもあります。書き出したファイルの実際の並びは、ffprobeでフレームの種類を出せば確認できます。
よくある質問
Bフレームは0にしたほうがよいですか
低遅延が要るライブ配信では0が向いています。ファイルとして配る動画や録画では、入れたほうが同じ画質で容量を抑えられるので、そのまま使ってかまいません。
Bフレームは何枚が適切ですか
汎用のエンコードでは2枚から3枚あたりが一般的で、x264は既定で3枚を使います。増やすほど縮みは良くなりますが、効き目は次第に小さくなり、遅延と処理時間は増えます。
Bフレームを使うと画質は落ちますか
同じビットレートなら、むしろ上がる方向に働きます。差分の記録に使うデータが減り、そのぶんを他のフレームに回せるためです。画質が落ちたように見えるときは、ビットレート自体か参照の設定を見直してください。
似ている形式との違い
関連する用語
最終更新