このページの本文へ

エンコードテクニック虎の巻 第5回

マルチパスエンコード(VBR)を極める!【可変ビットレート編】

2008年06月11日 21時00分更新

文● 藤山 哲人

  • この記事をはてなブックマークに追加
  • 本文印刷

固定ビットレートなのにビットレートが上下する?
動き予測のしくみ

 さて映像比較の記事で、CBR 1,000kbpsでエンコードしているにも関わらず、コマによってビットレートが違っていたのにお気づきだろうか?
 そう一応常に1,000kbpsを消費しているとしているが、キーフレームは画面全体をデータ化しているため、瞬間的に1,000kbpsを越す場合がある。また動いた部分が少ないと、データが少なくて済むため1,000kbpsを大幅に割り込むこともある。
 これを解明するのが、MPEGの動き予測と差分データだ。DivXもWMVもほぼ同じようなしくみを使っているハズだ。
 たとえばこんな映像。各コマの間隔は1/30秒だ。テレビは1秒間に30コマの映像を順次表示していて、1/30秒の1コマの映像を「フレーム」と呼んでいる。

左から右に進む車のみ動いている

一定の速度で走る車の映像

 エンコーダは、直前のコマと現在のフレームを見比べ、画面中を動いているものに着目する。イラストの場合、(1)と(2)の車の動きから、(3)の車の位置が予測可能だ。
 (3)を描画する際には、(2)の車の画像を予測位置にコピー&ペーストして処理をごまかす(笑)。そして元あった車の背景のみを新規に描画するというわけだ。単純だけど、実に素晴らしい技術だ。
 実際にはエンコーダ内部で、こんなことが行なうわれている。
 まずは画面を縦横16×16ピクセルに分解、

動き検索のセル

以前に登場したこのマトリックス単位で動き検査が行なうわれる

 ブロックを拡大したのが次のイラストだ。

周囲に同じ形をしたブロックがないかを調べる

紫と青で描かれた1/4の円が16×16ピクセルの動き検査用のブロック

 同じ形をしたブロックが回りにないかを探し出すのだ。薄い水色の範囲が、仮想のエンコーダの動き検索範囲。この範囲は、エンコーダによってまちまちだが、範囲を調整できるエンコーダもある。こうして周囲に同じ形をしたものがあると、「このブロックは右に12ピクセル、下に10ピクセル移動した」という(セル番号とベクトル)情報だけを記録するのだ。画像自体はコピー&ペーストである。こうすることで、映像ファイルに記録するデータを極力少なくするのだ。VBRの1パス目では、このような映像チェックも行なうわれており、ビットレートの稼ぎどころを検知する。
 飛行機が飛んでいく様子を想像してみて欲しい。若干小さくなったり見え方が変わっていくが、1/30秒後の次のフレームは、飛行機の大半の映像が流用できるでしょ。  ただ理論どおりに行なうかないのが世の中の常。車が急加速したり、UFOの瞬間移動光線を浴びて次のコマではなくなってしまう場合だってある。
 そんなときは、3段構えの予測データとの差分のみをデータ化して、その場をしのぐのだ。

予測が外れた周囲の部分のみをデータ化する

上段から、予測位置とほぼ一致、予測位置通り、予測とかなり外れた場合

 中段は予測と完全位置した場合だ。動き情報のみを記録すれば、車の形のデータをファイルに保存する必要はない。上段は予測とほぼ一致している(おそらくアクセルを緩めたか何かだ)ので、動き情報に加え輪郭部分のセルの予測と違う映像のみをセル単位で記録する。
 下段はバックミラーにパトカーが見え、急にアクセルを踏んだときだろう。予測とかなり外れてしまっているので、広い範囲を描き直す必要があり、大量のデータを記録する(場合によっては動きデータを無視してキーフレームにすることもあるかも?)。
 このように差分データを見つけては、ムービーのデータにしているため、フレームごとにデータ量がかなりかわってくるのだ。これがCBRでも、コマごとにビットレートが異なってくる理由。
 VBRの場合は、1パス目で映像全体の動きを検査している。つまり2パス目のエンコードでは、数フレーム後に激しいシーンが来て予測が大幅にズレることが分かるので、そんなときはキーフレームを追加して画面全体をデータ化してやる。これで予測の誤差をカバーできるのでキレイな映像となる。考えた人は、頭いいね。
 ところがCBRは「あっ!予測が外れた! うわわっ!次のコマもこんな展開かよっ!予測できネー!」となってしまい、過去に入れたキーフレームとの差分データの誤差がどんどん溜まりまくり、映像が劣化する原因になる。

(次ページへ続く)

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

ASCII.jpメール アキバマガジン

クルマ情報byASCII

ピックアップ