インターフレームとは、ビデオ圧縮ストリームにおいて、1つまたは複数の隣接フレームに基づいて表現されるフレームのことです。「インター」という部分は、インターフレーム予測の利用を指しています。これは、隣接フレーム間の時間的な冗長性を活用することで、より高い圧縮率を実現しようとするものです。
インターコードされたフレームは、マクロブロックと呼ばれるブロックに分割されます。その後、エンコーダは各ブロックの生のピクセル値を直接エンコードする代わりに、以前にエンコードされたフレーム(参照フレームと呼ばれる)上で、エンコード中のブロックに類似したブロックを探します。この処理は、ブロックマッチングアルゴリズムによって行われます。エンコーダが検索に成功すると、そのブロックはモーションベクトルと呼ばれるベクトルによってエンコードされます。モーションベクトルは、参照フレームにおける一致するブロックの位置を示します。モーションベクトルを決定する処理は、モーション推定と呼ばれます。
ほとんどの場合、エンコーダは正常に動作しますが、検出されたブロックはエンコード対象のブロックと完全に一致するとは限りません。そのため、エンコーダは両者の差分を計算します。これらの差分値は予測誤差と呼ばれ、変換してデコーダに送信する必要があります。
要約すると、エンコーダが参照フレーム上で一致するブロックを見つけることに成功すると、一致したブロックを指す動きベクトルと予測誤差が得られます。デコーダはこれらの要素を用いて、ブロックの元のピクセルを復元することができます。以下の図は、このプロセス全体をグラフィカルに示しています。

この種の予測には、長所と短所がある。
これらの欠点があるため、この技術を効率的かつ有用にするには、信頼性が高く、時間的に周期的な参照フレームを使用する必要があります。その参照フレームはイントラフレームと呼ばれ、厳密にイントラ符号化されているため、追加情報なしで常に復号できます。
ほとんどの設計では、インターフレームにはPフレームとBフレームの2種類があります。これらの2種類のフレームとIフレーム(イントラ符号化画像)は通常、GOP(画像グループ)にまとめられます。Iフレームは復号化に追加の情報を必要とせず、信頼性の高い参照として使用できます。この構造により、デコーダの同期に必要なIフレームの周期性も実現できます。
PフレームとBフレームの違いは、それぞれが使用できる基準フレームの種類にある。
Pフレームとは、前方予測画像を定義するために使用される用語です。予測は、主にIフレームまたはPフレームといった前の画像から行われるため、必要な符号化データ量が少なくなります(Iフレームのサイズと比較して約50%)。
この予測に必要なデータ量は、動きベクトルと予測補正を表す変換係数から構成されます。これには動き補償の利用が含まれます。
Bフレームとは、双方向予測画像を表す用語です。この種の予測方法は、一般的にPフレームよりも少ない符号化データ量で済みます(Iフレームサイズと比較して約25%)。これは、予測が前のフレーム、後のフレーム、またはその両方から行われるためです。(ただし、特定のケース(例:ロスレス符号化)では、BフレームはPフレームよりも効率が悪くなる場合もあります。 [ 1 ]
Pフレームと同様に、Bフレームは動きベクトルと変換係数として表現されます。伝播エラーの増大を避けるため、ほとんどのエンコーディング規格では、Bフレームはさらなる予測を行うための参照として使用されません。ただし、新しいエンコーディング方式(H.264/MPEG-4 AVCやHEVCなど)では、時間的冗長性をより有効に活用するために、Bフレームが参照として使用される場合があります。[ 2 ] [ 3 ]

典型的な画像グループ(GOP)の構造はIBBBBPP...です。Iフレームは最初のPフレームを予測するために使用され、これら2つのフレームは最初のBフレームと2番目のBフレームを予測するためにも使用されます。2番目のPフレームも最初のIフレームを使用して予測されます。両方のPフレームが結合して、3番目と4番目のBフレームを予測します。この構成は次の図に示されています。
この構造は、2番目と3番目のフレーム(Bフレーム)を予測するために4番目のフレーム(Pフレーム)が必要となるため、問題があります。そのため、Bフレームの前にPフレームを送信する必要があり、送信が遅延します(Pフレームを保持する必要があるため)。 この構造には、次のような利点があります。
しかし、弱点もある。
H.264技術が、それ以前の規格(特にMPEG-2)と比較して最も大きく改善された点は以下のとおりです。
輝度ブロックの分割は、16×16(MPEG-2)、16×8、8×16、および8×8で行われます。最後のケースでは、ブロックを4×8、8×4、または4×4の新しいブロックに分割することができます。
![]()
符号化対象のフレームは、上の図に示すように、等しいサイズのブロックに分割されます。各ブロックの予測結果は、参照画像と同じサイズのブロックですが、わずかなずれが生じます。
半ピクセル位置のピクセルは、長さ6のフィルタを適用することによって得られます。
H=[1 -5 20 20 -5 1]、つまり 半ピクセル「b」=A - 5B + 20C + 20D - 5E + F
1/4ピクセル位置のピクセルは、双線形補間によって取得されます。
MPEG-2では1/2ピクセルの解像度が許容されていましたが、インターフレームでは最大1/4ピクセルの解像度が許容されます。これは、符号化対象フレーム内のブロックを他の参照フレームで検索したり、存在しないピクセルを補間して現在のブロックにより適したブロックを見つけたりすることが可能であることを意味します。モーションベクトルがサンプル単位の整数値である場合、参照画像内で補正された動きのあるブロックを見つけることが可能です。モーションベクトルが整数値でない場合、予測値は補間フィルタによって水平方向と垂直方向に補間されたピクセルから得られます。

動き推定への複数の参照により、合計最大 16 フレームを含む 2 つのバッファ (リスト 0 は過去の画像、リスト 1 は将来の画像) から最適な参照を見つけることができます。[ 4 ] [ 5 ]ブロック予測は、参照画像のブロックの重み付き合計によって行われます。これにより、平面、ズーム、または新しいオブジェクトが出現するシーンで画質が向上します。
![]()
スキップモードとダイレクトモードは、特にBフレームにおいて非常に頻繁に使用されます。これらのモードは、符号化するビット数を大幅に削減します。これらのモードは、残差誤差や動きベクトルを送信せずにブロックを符号化する場合に使用されます。エンコーダは、それがスキップマクロブロックであることのみを記録します。デコーダは、既に復号された他のブロックから、ダイレクトモードまたはスキップモードで符号化されたブロックの動きベクトルを推測します。
運動を推測する方法は2つあります。 ![]()

上の図において、ピンク色のブロックはダイレクト/スキップモードで符号化されたブロックです。ご覧のとおり、これらは主にBフレームで非常に頻繁に使用されています。
「フレーム」という用語は非公式な場面ではよく使われますが、多くの場合(MPEGやVCEGによるビデオ符号化の国際規格など)は、「フレーム」ではなく「ピクチャ」という言葉を使うことで、より一般的な概念が適用されます。ここでいうピクチャとは、完全なフレーム、または単一のインターレースフィールドのいずれかを指します。
MPEG-2、H.264、Ogg Theoraなどのビデオコーデックは、キーフレームの後に1つ以上のインターフレームを挿入することで、ストリーム内のデータ量を削減します。これらのインターフレームは、画像の大部分が通常類似しているため、キーフレームに必要なビットレートよりも低いビットレートでエンコードできます。つまり、変化する部分だけをエンコードすればよいのです。