空間圧縮と時間圧縮:ビデオコーデックの核心理論
「なぜ同じ画質でも、H.264とHEVCでファイルサイズがここまで違うのか」「ブラウザで動画をエンコードする際、GOP長はどう設定すべきか」——こうした問いに答えるためには、**ビデオコーデックがどのように動作するか(how video codec works)**を、数式とアルゴリズムのレベルで理解する必要があります。
本記事は、**動画圧縮アルゴリズム(video compression algorithms)**の根幹である「空間圧縮(Spatial Compression)」と「時間圧縮(Temporal Compression)」に焦点を当て、エンジニアや開発者の視点からその理論を解きほぐします。私たちがSquishyfileでブラウザ上のWASMエンコーダを開発する中で直面した、実装上の制約と理論的な最適解も交えながら、専門的な知見を共有します。
非圧縮動画データがなぜ巨大なのか?:数値で見る圧縮の必然性
コーデックの仕組みを語る前に、まず「圧縮なしの動画データ(Uncompressed Video)」がどれほど巨大かを定量化します。これが、動画圧縮技術が存在し続ける理由そのものです。
1秒間のフルHD非圧縮動画は約373MB
一般的なフルHD動画(1920×1080画素、24bitカラー、60fps)の1秒間の非圧縮データ量を計算します。
- 1フレームの画素数:1920 × 1080 = 2,073,600 画素
- 1画素あたりの情報量:24bit = 3バイト
- 1フレームのデータ量:2,073,600 × 3 = 6,220,800 バイト(約5.93MB)
- 1秒間(60fps)のデータ量:6,220,800 × 60 = 373,248,000 バイト(約373MB/秒)
つまり、1分間の非圧縮フルHD動画は約22.4GB、1時間で約1.3TBに達します。現在の家庭用光回線(1Gbpsでも理論値125MB/秒)では、リアルタイムでこのデータを転送することは不可能です。ストレージコスト、配信帯域、ブラウザのメモリ制限——どの観点から見ても、**コーデックによる圧縮は「利便性」の問題ではなく「物理的な生存条件」**なのです。
空間圧縮(Spatial Compression / Intra-frame):1枚のフレーム内を削減する
動画の圧縮は、まず「1枚の静止画をどれだけ小さくするか」から始まります。これを**空間圧縮(イントラフレーム圧縮)**といいます。JPEGと同じ原理であり、以下の3段階の処理で構成されています。
マクロブロックへの分割
コーデックは、フレームを縦横16×16画素(場合により8×8や32×32)の単位である**マクロブロック(Macroblocks)**に分割します。人間の視覚は、画像全体を一括して処理するのではなく、局所的なパターンに対して異なる感度を持つため、この分割は後続の処理効率を高めます。
離散コサイン変換(DCT):空間情報を周波数情報へ
各マクロブロックに対して、**離散コサイン変換(Discrete Cosine Transform, DCT)**が適用されます。これは、画像の輝度・色差データを「空間ドメイン」から「周波数ドメイン」に変換する数学的操作です。
DCTの本質は、画像内の細かい変化(高周波成分)と大まかな変化(低周波成分)を分離することにあります。人間の目は、高周波成分(細かいテクスチャや急激な色の変化)に対して鈍感であり、低周波成分(大きな輪郭や緩やかなグラデーション)に敏感です。コーデックは、この特性を利用して高周波成分を量子化(Quantization)により粗く丸め、情報量を削減します。不可逆圧縮の核心部分がここに存在します。
クロマサブサンプリング:人間の視覚特性の活用
さらに、コーデックは**クロマサブサンプリング(Chroma Subsampling)**を行います。人間の網膜は、輝度(Y:Luminance)に対して非常に敏感ですが、色度(Cb/Cr:Chrominance)に対しては比較的鈍感です。典型的な4:2:0サブサンプリングでは、輝度情報は全画素で保持しつつ、色度情報は2×2画素ごとに1つの値で共有します。これだけで、色差データは理論上75%削減されます。
このように、空間圧縮は「人間の視覚特性に合わせて、知覚的に不要な情報を戦略的に破棄する」技術なのです。
時間圧縮(Temporal Compression / Inter-frame):フレーム間の無駄を削減する
動画は、連続するフレーム間で大部分の画素が変化しない——これが**時間圧縮(インターフレーム圧縮)**の前提です。空間圧縮だけでは各フレームを独立して圧縮するため、1秒間60枚の「JPEG画像」を並べたに過ぎません。時間圧縮により、フレーム間の重複情報を排除し、圧縮率を飛躍的に高めます。
Iフレーム、Pフレーム、Bフレーム:3種類のフレーム構造
コーデックは、フレームを以下の3種類に分類して処理します。
Iフレーム(Intra-coded Frame / 独立フレーム) 空間圧縮のみで完結する「キーフレーム」です。他のフレームを参照せず、単独で完全な画像情報を保持しています。動画の頭やシーン切り替わりの地点に配置され、ランダムアクセス(シーク)の基準点となります。GOP(Group of Pictures)の先頭に必ず存在します。
Pフレーム(Predicted Frame / 前方予測フレーム) 直前のIフレームまたはPフレームを参照し、「どの画素がどこに移動したか」という**動きベクトル(Motion Vector)**と、予測誤差(残差データ)のみを記録します。例えば、背景が固定でキャラクターが右に移動するシーンでは、Pフレームは「背景はそのまま、キャラクターのブロックは右に10画素移動」という情報だけを保持し、画素値そのものを再記録しません。
Bフレーム(Bidirectional Predicted Frame / 双方向予測フレーム) Pフレームをさらに進化させ、過去のフレームと未来のフレームの両方を参照して予測を行います。時間軸上で前後の情報を補間することで、より正確な動き予測が可能となり、Pフレームよりもさらに少ないデータ量で高い画質を維持できます。ただし、エンコード時には未来のフレームを先に処理しておく必要があるため、エンコーダのメモリ負荷と遅延(latency)は増加します。
動き予測(Motion Estimation):圧縮の核心アルゴリズム
PフレームとBフレームの核心となるのが、**動き予測(Motion Estimation)**です。エンコーダは、現在のフレーム内の各マクロブロックに対して、参照フレーム内で最も類似した領域を探索します。類似度は、通常「絶対差の和(SAD)」や「分散誤差(MSE)」で定量化されます。
最もマッチした位置との座標差が**動きベクトル(Motion Vector)**として符号化され、実際の画素値との差分(Residual)がDCTと量子化を経て圧縮されます。動きがほとんどない背景部分では、動きベクトルがゼロで残差も極めて小さくなるため、驚くべき圧縮率が達成されます。
このメカニズムが理解できれば、「なぜ激しく動くシーンではモスキートノイズが発生しやすいのか」「なぜBフレームを多用するとシーク性能が低下するのか」といった現象も、理論的に説明できるようになります。
H.264、HEVC、AV1:空間・時間圧縮の進化とコーデック選択
空間圧縮と時間圧縮の理論は、MPEG-2時代から本質的には変わっていません。現代のコーデック間の差異は、「どれだけ効率的に動きを予測し、どれだけ賢く人間の視覚特性を利用するか」という実装とアルゴリズムの最適化の違いにあります。
H.264/AVC:万能型の基準点
H.264は、マクロブロック(最大16×16)を単位とした比較的シンプルな構造です。空間圧縮には4×4および8×8のDCTを使用し、時間圧縮では複数の参照フレームと細かな動きベクトル精度(1/4画素精度)を導入しました。Web配信のデファクトスタンダードであり、ブラウザ互換性という観点からは今もなお最も安全な選択肢です。
HEVC/H.265:圧縮効率の飛躍とコストのトレードオフ
HEVCは、H.264のマクロブロックを発展させた**Coding Tree Unit(CTU:最大64×64)**を導入し、より大きな均一な領域を効率的に圧縮します。動き予測の精度は1/8画素に向上し、空間圧縮にはDCTに加えて離散サイン変換(DST)も採用しています。結果として、同じ画質で約50%のビットレート削減が可能です。しかし、特許プールの複雑さと、エンコード・デコードの計算コスト増大が課題です。
AV1:オープンソースと次世代の最適化
AV1は、HEVCの圧縮効率を維持しつつ、ロイヤリティフリー(Royalty-free)を目指して開発されました。可変ブロックサイズの分割、より高度なイントラ予測(方向性予測の精度向上)、および複雑な時間的予測(Compound Prediction)を実装しています。特に、ブラウザ上でのWASM実装やWebRTCとの親和性を考慮する現代の開発者にとって、AV1は無視できない選択肢となっています。
結論として:リアルタイム配信や低遅延が求められる場面ではH.264が、圧縮率を最重視するアーカイブ用途ではHEVCやAV1が、それぞれ理論的に最適解となります。
まとめ
ビデオコーデックの本質は、「空間的な無駄(1枚の画像内の知覚的不要情報)」と「時間的な無駄(連続フレーム間の重複情報)」を、人間の視覚特性と動きの法則を用いて数学的に削減することにあります。
- 空間圧縮(Spatial Compression):DCT変換とクロマサブサンプリングにより、1フレーム内の視覚的冗長性を除去
- 時間圧縮(Temporal Compression):I/P/Bフレームの構造と動き予測により、フレーム間の時間的冗長性を除去
この2つの柱を理解すれば、単なる「ツールのユーザー」ではなく、「なぜこの設定でこの画質とファイルサイズが生まれるのか」を説明できる技術者となります。私たちがSquishyfileでブラウザベースのWASMエンコーダを設計する際も、この理論的根拠に基づいて、ローカル処理の制約内で最適なGOP構造と量子化パラメータを選定しています。
動画圧縮は、単なる「サイズを小さくする技術」ではありません。それは、人間の知覚の限界と情報理論の交差点に立つ、計算機科学の粋なのです。