remove
powerd by nog twitter


圧縮率と画質実験(失敗)



  動画ファイルをHDDやCD-Rに多く保存するためには、動画を圧縮する必要があります。
  画質が良くても、圧縮率が低ければHDDがすぐに満タンになってしまいます。
  そこで、画質を最大限に保ちながら圧縮率を高めるコーデックを調査してみました。

  まず、前回の「コーデック別画質実験」のデータにより、
  DivX5.11、WMV9VCM、XviD、VP6の4強コーデックを利用することにします。
  この4つの中で、「高圧縮で画質効率が最大のもの」は何なのかを今度はファイルサイズを同じにして、
  できるだけ公平に審査しようと考えました。

  前回の実験の結果より学んだ事を羅列しますと
  ・DivX5.11のVFWデコードにはバグがありました
  ・WMV9VCMやXviDの最高画質は高ビットレートだったので今回は不利かもしれないです
  ・VP6の1-passは最初から高圧縮でした。また、再生が粉っぽいのでvp6dec.axを入れ替えました。
  という3つを念頭において、実験の不備を埋めるようにします。



  実験に使うソースは、前回と同じ10秒(30fps、300フレーム)の未圧縮AVIです。
  今回は前回と違い、MS-MPEG4は除外しました。(ベリベリノイズとm4c誤作動、2-passが無いため)
  設定は「ビットレート」を全てのファイルで一定にする必要があるので、2-passを使用します。
  また、比較するビットレートは、4種類のコーデックのファイルサイズが揃うように微調整を
  繰り返して決定します。よって1000kbpsなど「区切りの良い」ビットレートでの結果は得られません。
  250kbps(超高圧縮、音声並み)、500kbps(高圧縮)、1000kbps(標準)、2000kbps(低圧縮)の4種類で
  とりあえず実験することにします。なお、クロップの解像度変更機能は使いません。
  ただし、低圧縮に有利な設定(DivX5.11のPsychovisual EnhancementsのSlowを利用するなど)を行って、
  できるだけコーデックの全ての力を出し切れるようにしようと思います。



  問題点その1

  私が作った10秒のサンプルでは、「VBRの性能が良いコーデックが有利」になるように設計されています。
  これは、「アニメや映画」で特に重要です。アニメはオープニングや見せ場などは、
  原画枚数が多くビットレートを必要としますが、静止画のような動きがほとんどない場所もあります。
  映画では、アクションシーンは動きが激しく会話シーンは固定カメラといったようなメリハリと同様に、
  ビットレートを割り振る必要があるからです。

  コーデックはそれぞれ、VBRのアルゴリズムが違います。
  私は経験に基き、コーデックが苦手と思われる動画を作りました。(ほとんど静止画で一部だけですが)



  問題点その2

  低ビットレートに設定しても、設定(命令)に従わないコーデックが続出しました。
  250kbpsの超高圧縮にしてみたいのですが、2-passで250kbpsを指定した場合次のようになりました。

  DivX5.11 → 1,166,898バイト(約934kbps) サンプルダウンロード(2001/01/23バージョン)
  WMV9VCM → 763,396バイト(約611kbps) サンプルダウンロード(2001/01/23バージョン)
  XviD-1.0 → 1,334,798バイト(約1068kbps) サンプルダウンロード(2001/02/12バージョン)
  VP6 → 643,134バイト(約515kbps)(ビットレート指定無し、2-passBEST) サンプルダウンロード(2001/01/23バージョン)

  ただし、これから想像できることは「WMV9VCMとVP6」は低ビットレート設定に強いということです。
  DivX5.11とXviDは「低ビットレートで破綻」するためにあるクオリティ以下には設定できない、
  親切なコーデックであるといえます。

  ただ、これらのファイルを実際見てみると、次のような事がいえます。
  ・VP6はビットレートが低いにもかかわらず他のコーデックより人間が見て綺麗である。
  ・WMV9VCMも他のコーデックより綺麗である。
  ・DivX5.11は非常に低ビットレートに弱い、画質が悪い(VBR性能も悪い)。
  ・XviDは「高ビットレート用設定」と「低ビットレート用設定」が存在するので、設定依存型である。
  ということです。画質以前の問題が浮上し、公平な比較実験を行う予定でしたが無理のようです。

  解決方法がありました。
  VP6のビットレート設定を行うことができると教えていただきました。
  XviDの「ログファイルの設定」や「ファイルサイズ指定」により、レートコントロールが優れていることが、
  わかりました。
  問題はDivXとWMV9VCMです。



  問題点その3

  DivX5.11には、「Bフレーム」という「圧縮率は高いが画質が悪い」フレームが存在します。
  XviDも同様です。これらのフレームを含む場合、他のコーデックより設定を上手にする必要があります。
  XviDにはその対処法がありますが、DivX5.11にはそのような設定方法が通常ありません。
  今回の映像ソースでは、他のコーデックより「不利」であることは間違えありません。

  その不利さを示す例として、セッション3の「複雑な映像(写真)」のところで、
  「脈動」や「シーン切り替えの遅さ」が現れています。サンプルをご確認ください。



  問題点その4

  DivX5.11には、今回使用するソースのセッション1「ボールが移動するアニメ」
  セッション2「シーンチェンジのブロックアニメ」の2つで顕著にバグが検出されています。
  ただし、低ビットレートの時にはそのバグが見当たりません。
  DirectShowFilterDecodeにより、問題は解決しました。VFW読み込みバグでした。
  よって、公平な設定方法や映像処理手段を用いてもDivX5.11は、他のコーデックより劣っている事になります。



  問題点その5

  WMV9VCMは、設定をしっかりしても今回のソースでは、2種類の動画しかできませんでした。
  一つは、低圧縮の「611kbps」もう一つは「3000kbps版」です。どうやら時間の短いソースでは、
  VBRアルゴリズムが2つしかないようです。「1500kbps版」のWMV9VCM映像を作りたいとしても、
  作る事が出来ません。これは、10秒の動画はうまく2-pass処理できないことにも原因がありますが、
  今回の実験を成功させるには大きな壁となります。
  DivXもレートコントロールが弱いようです。



  問題点その6

  VP6は、ビットレートを設定する事が出来ません。
  よって、他のコーデックとビットレートを並べようとしても超低圧縮になり、
  他のコーデックを寄せ付けません。本来なら非常に良い事なのですが、実験になりません。
  「フロントエンド側(VirtualDubMod)でビットレートを指定する」ことを教わり、解決しました。



  結論

  意地で同じソースで実験してみます。かなり複雑な結論になるようなので、お時間を下さい。



もどる



Internet Explorer5以上、横解像度800以上でのの閲覧を推奨します
jumper