この日記はGNSで生成しています。 |
_ VBR。オーディオエンコーダで使われる「VBR」と、ビデオエンコーダで使われる「VBR」は、かなり意味の違う使われ方をしているので、注意。
_ あるデータを圧縮すると、ストリームサイズが小さくなる・・・のは言うまでもない。もちろん、どれくらいになるかは、圧縮してみるまでわからない。
_ 「ストリームサイズは問わないので、このくらいの品質でやってくれや」というのが、第一のパターン。可逆圧縮(ZIPとかLZHとか)なら常にこれ。非可逆な圧縮の場合、たとえばJPEGは普通これになる。DivXエンコーダなんかでも「Quality-Based」とか「QBR」とかいわれるのがこれ。TMPGEncの「固定品質(CQ)」もこれ。
_ 「理論最大で指定のストリームサイズに収まるように、品質パラメータを指定する」のが、第二のパターン。理論最大なので、これよりストリームサイズが短くなることがありうるが、このときは残りを「意味のないデータで埋める」ことで、都度ストリームサイズを固定する。いわゆる「CBR」がこれ。
_ 第二のパターンで、「意味のないデータで埋める」ことをしなければ、ストリームサイズは小さくなるよね・・・というのが、第三のパターン。映像をリアルタイムエンコード録画するときに「VBRモード」があったら、これ。
_ 「理論平均で指定のストリームサイズに収まるように、品質パラメータを指定する」というのが、第四のパターン。よーく考えると、実はこれは第一のパターンと同じ。「理論平均のストリームサイズ」を「品質パラメータ」にテーブル変換していると考えれば、わかるかと。「理論平均」じゃなく「理論最大」にテーブル変換すれば、第三のパターンと同じともいえる。
_ 「まず1回圧縮してみて、その結果から『この部分はこの品質で圧縮するとこれくらいのサイズになる』というデータを得て、それに沿ってもう1回圧縮する」というのが、第五のパターン。「ファイルサイズを指定して保存するJPEG」がこれ。またDivXやTMPGEncの2passエンコードもこれ。「Variable Bit Rate」というよりは、「Variable Quality」と言ったほうが適切かも。
_ 「VBRのほうが品質がいい」というのは、「データの傾向によって細かくビットレートを調整する」からではない。「CBRにはサイズ合わせのために常に無意味なデータが埋まっている」からにすぎない。上に5つのパターンを挙げたが、「第二のパターン」以外のすべてを「VBR」と呼ぶ可能性があるので、ひとくくりにしないよう注意。「指定ストリームサイズの範囲内で最高品質が得られる」という意味での「真のVBR」は、第五パターンのみ。代償として「試行と逆算のために余分な時間がかかる」のは不可避。
_ さて、LAMEのABRやVBRはどれだろう。ABRは・・・「今までの圧縮実績から次のフレームの品質を自動算出する」というのは、第六のパターンになるのか・・・総合的には「圧縮後のストリームサイズに応じて品質を変える」のだが、局所的に「必要な部分に多くのストリームサイズを割く」ということは不可能か。
_ 対してVBRは・・・「指定した品質でフレームを圧縮してみて、上限・下限を超えちゃったら品質をずらしてやり直し」かな。ということは、どっちにしても「指定ストリームサイズの範囲内で最高品質が得られる」という意味での「真のVBR」ではないわけか・・・2passでエンコードするMP3エンコーダって聞いたことないしな・・・。
_
なお今回のLAMEの調査には「最初から説明するInside MP3」の「フレームヘッダ出力プログラム」を使っている。これを使うと、「CBR以外のエンコードをしたときに、どこのフレームがどのくらいのストリームサイズで圧縮されたか」がわかる。
メールはこちらへ...[後藤浩昭 / Hiroaki GOTO / GORRY / gorry@hauN.org]