Special
» 2004年02月17日 10時55分 公開

DivXで圧縮の奥深さにハマろうわかりたい人のための動画エンコード講座(1/3 ページ)

 前回は能書きばかりたれてしまったので、少しは実用的なお話をしてみたい。基本的にはDivX Pro(発売元:ホロン)を使う時にどんなことに気をつければいいのか、という話だが、動画圧縮技術でやっていることというのは、そう大きく変わるわけではない。他の技術に関しても応用が効くお話になるものと信じている。

[姉歯康,ITmedia]

VBRってナニ?

 VBRというのはVariable Bit Rate、「可変ビットレート」の略である。「ビットレートが一定ではない」ということである。

 前回も述べたように、動画圧縮の多くにおいては、フレーム毎の静止画ベースの圧縮の他に、前後のフレームからの引き算によってデータ量を落とすというワザが使われている。

 映像の動きが大きくなれば、その差分は大きくなるし、動きがほとんどなければ、差分は小さくなる。これは元映像に依存するワケだが、「せっかくそういう違いがあるんだから、落とせる部分は思いっきり落として、その分のデータを落とせない部分に割り当てて、まあ、なんとかファイルを小さく収めましょうや」というのがVBRなのである。あくまでも「ファイルを効率よく小さく圧縮する」という点で優れた技術なのである。

 視点を変えると、VBRは「一定のビットレートで流し続ける」のが目的の場合にはあまり意味がないということになる。まあ、DivXの場合にはあまり関係ないわけだが、ストリーミングで使うものに対して、ワザワザVBRを使うことはないのだ。そもそも、そうやって前や後ろのフレームを見比べていけば、圧縮時間はかかってしまうのである。

1パスVBRとマルチパスVBR

 さて、DivXには「1パスVBR」「マルチパスVBR」という概念がある。1パスというのは、頭からファイルを調べながら圧縮していく方法。ビットレートなどを指定して、ある程度の線を守りながら圧縮を進めていく。当然、DivXのエンコーダさんは、先にどんな画像が待ち受けているかを知らずに圧縮し続けている。だから、最後の最後にまったく系統の違う映像が出てきたりすると、エンコーダさんは、「アチャー! 先に教えてよ! もう下げらんねーよ!」となって、指定の平均ビットレートを守ることができなくなってしまったりする。

 そこで、まず一度動画を調べてログを書き出し、分析してから、「よし、ここが難しいから思いっきりビットレートを上げるぞ、ここは思いっきり下げる。で、平均ビットレートは○Mビット」と決めた上で、2回目に予測通りのものを仕上げるという方法がある。これが2パスVBR。

 ではマルチパスとは何か? 1パス目のログに対して、さらにユーザーが手心を加えて、「もっとここのクオリティを上げて」などと、いろいろと調整できるということである。要するに、ログの部分を何度でもいじり倒せるという意味で、何度も圧縮するという意味ではない。何度も圧縮したら、結果は汚くなるだけだ。

 このマルチパスがどれくらい「効く」かというと、それは元のムービーの性質とDivXの設定による。1パスより2パスがいいのは明らかだが、2パスと3パス目以降の違いは、「ユーザーが調整できるか否か」という程度であって、ユーザーが何も考えていなければ2パスで十分なのだ。言っておくが、そこで「常に最適の設定を探そう」などと考え始めると、徹夜の連続になる。たぶん、販売元に聞いても開発元に聞いても「正解」は存在しない。圧縮というのはそういうものだと思ったほうがいい。

圧縮しにくい映像とは?

 先ほどVBRの説明の中で、「圧縮が難しい」部分がどうのこうのという話をした。では、どんな映像が圧縮が難しいのだろうか?

 これはそこで扱われている技術によって異なってくるが、一般的に言って、

 1.動きの速いもの

 2.細かなものがたくさん動いているもの

 3.ラインなどがたくさんあるもの

こういったものは圧縮しにくいものだ。

 1については、お分かりだろう。「前後のフレームの差だけを送る」ということによってデータ量を減らしているのだ。前後がまったく違っていれば、この方法は意味をなさない。それだけ圧縮率は下がってしまうのだ。

 2は、例えば公園の緑がユラユラとか、波がザップンとか、髪の毛がサラサラとか、そういうヤツだ。動画圧縮の多くは、1ピクセル毎に差分を見ているワケではない。例えば15ピクセル×16ピクセルといったブロック単位で圧縮が行われている。その中でそれぞれ圧縮作業をして組み合わせていると、どうしても整合性がとれなくなることがある。そんな時に出てしまうのが「ブロック歪み」である(「ブロックノイズ」という言い方が一般的であり、私もよく使うが、実は表現としては正しくない。ノイズじゃないから)。モザイクがかかったような圧縮画像、よく見たことはありませんか?

 3.は、たとえばシマシマの洋服を着た人が動いている映像を圧縮してごらんなさい。なかなかビットレートは下がらないは、汚くなるは。さらにそのシマシマが斜めにでも入っていようものなら、驚くほど汚い結果が待ち受けている。これも理由はほぼ2と同じである。

では、ここでサンプルをいくつか。読者の方にもわかっていただくため、DVフォーマットで撮影したデータを、できるだけ汚く、トンデモない、ムチャクチャな圧縮をしてみた(640×480ピクセルで160Kbpsを目指している……)。DivXは「あらゆる手を使って、汚くならないような戦法をとってくる」ものなので、ここまで汚くするのは、なかなか大変であった……。

 以下、データレートが目標を大きく上回るような例がたくさん出てくるが、それは私がワザとそういう設定をしたためである。DivXできちんと抑え込めば、しっかりとレート内に収めることは可能だし、以下に見られる不具合も、きちんと使えば出てこないものである。

1.シマシマの例

シマシマの例として、網戸越しに撮影したものである。上がソース映像、下が圧縮後。網そのものも汚いが、建物のあたりにブロック歪みが発生している。目標ビットレートは160KBPS(=80Kバイト/秒)だが、上限をルーズに設定したところ、この3倍以上となってしまった
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.