動き推定シミュレーター
フレーム間の動き推定、ブロックマッチング、探索パターン、圧縮残差をシミュレートする。
インタラクティブシミュレーションを読み込んでいます...
SADと探索の非効率性 🖖
動き推定は動画圧縮のボトルネックである。16×16サイズのマクロブロックは、探索ウィンドウ内で参照フレームと比較され、絶対差分和(SAD)が最小になる候補が探される。網羅的な全探索は(2r+1)²個すべての位置を評価するため遅い。ダイヤモンド探索や六角探索といった高速アルゴリズムは、探索中心を反復的に移動させることで一部の点だけを評価し、最小値がパターンの中心に来た時点で終了する。任意のブロックにカーソルを合わせると、その探索ウィンドウと候補の評価をリアルタイムで確認できる。
画素ではなく動きを送る理由 🖖
連続するビデオフレームはほとんど同じなので、コーデックは各フレームを丸ごと保存せず、現在のフレームを前のフレームのずれた断片として記述します。16×16の各ブロックには最良の一致を指す動きベクトルが割り当てられ、ずれで説明しきれなかった分は小さな残差として残ります。要点: なめらかなカメラのパンは1本のベクトルが数千画素を置き換えるため、見事に圧縮できます。
動きベクトルは本物の動きではない 🖖
エンコーダーは実際に何が動いたかを問わず、SADが最小のブロックを探すだけです。そのため平坦な領域やノイズの多い領域では、勝者のベクトルが真の変位とはまるで違う、でたらめな方向を指すことがあります。ノイズのスライダーを上げると、ベクトル場が混沌へと崩れていく様子が見えます。だからこそ動きベクトルはオプティカルフローには不向きでも、圧縮には最適なのです。物理ではなくビットレートに仕えているからです。
例題
- 低速パン - ゆっくりとした水平パン: 残差はほぼゼロで、動きベクトルは一様に右を向く
- 高速パン - 速いパン: 探索範囲の境界でSADが大きくなり、境界付近の残差エネルギーが高くなる
- 発散ズーム - ズームインの動き: 中心から放射状に広がるベクトルとなり、単一の平行移動ベクトルでは表せない
- ノイズのある手持ちカメラ - ノイズの多いカメラ映像: ベクトルは正しくてもSADが高くなる — ノイズのエネルギーが残差を支配する