The WebM project is dedicated to developing a high-quality, open video format for the web that is freely available to everyone.

Googleがオープンソースソフトウェアとして公開したビデオコーデックVP8で利用されている動画圧縮技術の紹介がThe WebM Open Media Project Blog: inside webmに掲載されている。VP8がどういった仕組みを使うことで品質を保ったまま高い圧縮率を実現しているのか知ることができ参考になる。

VP8はブロックベースのコーデック。フレームをより小さなマクロブロックと呼ばれるブロックに分解して、マクロブロックごとに圧縮を実施する。VP8では4x4 luma、16x16 luma、8x8 chromaのマクロブロックが採用されている。ここでの「圧縮」は、周辺のデータやいくつか前のフレームからそのブロックのデータを予測する作業になるため、圧縮という言葉ではなく「予測」という言葉が使われる。VP8では古典的な次の2つの予測を採用しているという。

  • イントラ予測 - 単一フレーム内のデータのみを使用
  • インター予測 - 以前のエンコード済みデータも使用

それ以外のデータについてはトランスフォームコーディングなどそのほかのテクニックを使ってエンコードを実施していると説明がある。

1. イントラ予測

イントラ予測はキーフレームに対して適用される。周辺ブロックのデータから対象ブロックのデータを推測する方法で、基本的に次の4つの方法が使われているという。

  1. 水平予測: 左のデータをコピー
  2. 垂直予測: 上のデータをコピー
  3. DC予測: 上と左のデータの平均値を使う
  4. トゥルーモーション予測: 上と左と左上のデータを使う

VP8 Intra and Inter Predictionに掲載されている次の図をみるとどういった予測をおこなうものか理解しやすい。

トゥルーモーション予測の例 - Inside WebM Technology: VP8 Intra and Inter Prediction - The WebM Open Media Project Blogより抜粋

トゥルーモーション予測で予測されるデータは次の計算式で求められる。

Xij = Li + Aj - C (i, j=0, 1, 2, 3)

VP8のイントラ予測でもっとも多く使われているのは4のトゥルーモーション予測で、一般的なビデオシーケンスにおけるイントラ予測のうち、20%から40%がこの方法で圧縮されているという。VP8を特徴つけている機能のひとつとなっている。

2. インター予測

インター予測はノンキーフレームに対して適用される。3つのフレームからノンキーフレームのデータを推測する方法で、3つのフレームのどれかひとつからブロックをコピーすることを示すモーションベクタで構成される。ベクタは周辺のブロックから再利用することで圧縮率を上げている。またVP8では代替参照フレームという技術を使うことでこの予測元対象となるフレームをすべて保存せず、エンコード時に生成して使っている。これも高い圧縮率に一役かっている。

VP8のインター予測で特徴的なのはSPLTMVと呼ばれる技術。マクロブロックをさらに細かいサブブロックへ分割する仕組みで、マクロブロックの内部が異なるモーション特性を持っている場合などに適用される。これもVP8 Intra and Inter Predictionに掲載されている次の図をみるとわかりやすい。

インター予測SPLTMV技術 - Inside WebM Technology: VP8 Intra and Inter Prediction - The WebM Open Media Project Blogより抜粋

インター予測SPLTMV技術 - Inside WebM Technology: VP8 Intra and Inter Prediction - The WebM Open Media Project Blogより抜粋

左図は16x16のマクロブロックを、4x4のサブブロック16個へ分割し、それそれベクタを算出したもの。マクロブロックの周辺でベクタの再利用が実施されるように、サブブロックでも周辺のサブブロックのデータを再利用している。Newをベースにベクタを整理すると、右図のように3つの領域へ分解できることがわかる。