CBR,VBR,ABRの違いについて – 目的にあったエンコードモードを選ぶ


過去、何回か音楽系の記事を書きました。その時に細かい解説をせずにいた用語が幾つかあります。

今回はその用語のひとつ「3つのエンコードモード、CBR , VBR , ABR の違い」について解説していきたいと思います。

音楽データに限らず動画データなどの圧縮技術でも使用されるものです。これを理解することで、ご自分の環境に適したファイル変換(エンコード)を指定させることができます。この記事では、各エンコードモードの特徴やメリット・デメリットを解説します。

エンコードモードを使いこなして目的のデータを作れるようになってみましょう。
エンコーダーのパラメーターで基本は指定できますので、こちらも簡単に解説します。(MP3を対象に解説します)

エンコード、デコード

この単語は過去記事でも何度か書いていますが、エンコードに関連した記事なので少し詳しく書きます。
まだ知らないというという方は一緒に覚えてみてください。

エンコード

エンコード【encode】とは、データを「符号化する」という意味を持ちます。
通常、デジタルデータというのは何かしらの規則性を持っています。Aが何個続くとかABという塊が順に連続して出現するとかですね。全くのランダムデータというのは結構珍しいのです。

これらをそのままにしていると、データはとでも大きいものになってしまいます。容量がでかくなりすぎるのです。
そこで、データの規則性を探しだしてそれらに「符号」を持たせることでもっと短くなるようにまとめあげよう、とするのが「エンコード」と呼ばれる作業です。

例えば「ABABABAB」というABが連続するようなデータには「AB」に対して「1」という符号を与えてあげます。こうすると先ほどのデータは「1111」と表せるようになります。結果、文字が減る=データ容量を減らすことができました。

このように、データ容量を少なくすることを目的にエンコードをしていることも多いので、エンコードを「圧縮」と呼ぶことがあります。(符号化で有名なのは「ハフマン符号」や「ランレングス圧縮」など。基礎部分でよく使われます。)

また、すでにエンコードされたファイルを別の符号化を適用してファイル形式を変えることも「エンコード」と言います。
今回の記事ではこちらの意味で使いますね。というより、エンコードという言葉はほとんどこちらの意味で使われています。

これらエンコードをすることができるソフトウェアを「エンコーダー」と言います。

デコード

デコード【decode】は、エンコードの対義語としてよく使われます。
つまり、符号化(エンコード)されたデータを元のデータに戻すことを「デコード」と言います。

符号化されたデータはその規則性について記録した「辞書」となるデータがなければ元のデータに戻すことができません。
さきほどの「1111」というデータも、これが「1=AB」と分かっていなければ「ABABABAB」に戻せません。

これはつまり、データを読み取ったり再生したりすることができないことを意味します。
なので、エンコードされたファイルを読み取るためには、その規則性を理解した「デコーダー」が必要になるのです。

例えば、MP3という音楽データも符号化されていますが、これを再生するためには必ず「MP3データをデコードすることができるMP3デコーダー」が必要になるのです。
(MP3がどういった規則を見つけて圧縮しているのかを知っているデコーダーが必要ということです。)

Windows Media PlayerやiTunesが標準でMP3を再生できるのは、これらソフトウェアにはすでにMP3デコーダーが機能として組み込まれているからです。

圧縮されたデータを元に戻すので、デコードを「復号」「伸張」「再生」と呼ぶこともあります
ただ、多くの場合再生を目的としているので、「解凍」「展開」という言葉はあまり使われません。これらはアーカイブ(書庫ファイル)でよく使われますね。

ビットレート

これは過去記事で詳しく書いたのでこちらを参考にしてください。

○ブログ内リンク:動画・音声データの質に関係する要素について

簡単にいえば、どれだけのデータ量を転送しているのかを指し示す単位です。データ転送レートの単位です。
ビット毎秒とも呼ばれます。単位は「bps」または「b/s」です。(ビット パー セコンドと読みます。)
Bps(バイト パー セコンド)とは違うので注意。(通常、8bit=1Byte【バイト】です)

この値が大きければ大きいほど、データの転送量が多くなることを意味しています。つまり、より多くのデータを使えるので音質・画質などが良くなります。なので、音楽や動画の質を表す指標としてよく使われます。

データ容量はこの転送レートから分かる場合もあります。320kbpsの転送レートを持ったデータを10秒間流せるデータの容量は「320kb/s × 10s = 3200kb = 3.2Mb = 0.4Byte」です。(ビットレートが常に固定の場合)

CBR – 固定ビットレート

前置きが長くなりました。それでは最初にCBRについて書いてみます。

固定ビットレート【constant bitrate:CBR】とは、電気通信における Quality of Service に関する用語のひとつです。
VBRやABRもこの Quality of Service に関する用語です。

※Quality of Service【クオリティ・オブ・サービス】:制御工学やシステム工学の分野で広く使われる用語。そのサービスが消費者やユーザーのニーズに合っているかを比較対象するための尺度です。QoSと略されます。

ビットレートの値は常に一定

CBRは、常に転送レート値が一定のデータになるようにエンコードしたものを言います。

「256kbpsのCBR」でエンコードしたデータは、再生すると常に256kbpsのレートで転送します。
こうすることで、帯域制限のある回線でも目一杯使うことができるようになり、またプログラム側も使用される回線の帯域が予測できるので扱いが簡単になるメリットがあります。ストリーミング再生などでもよく使われますね。

常に一定のレートになるのでズレが起きにくかったり、シーク時間が短いメリットもあります。

※シーク【Seek】:目的の読み取り位置へ一気に移動するとこと。音楽データで言えば、○○分のところまでバーを動かして瞬時に再生位置を移動させることです。

グラフ

ファイルサイズが予測しやすい

ビットレートの値が常に一定なので、ファイル容量は単純に「ビットレート×時間」で割り出せます。

320Kbps × 4分38秒(278秒) = 88960Kb = 11120KB = 11.120MB

ビットレートと時間 容量

320Kbps CBR 、曲長が4分38秒のデータの容量は「11.120MB」であることがわかります。
このように、CBRモードでエンコードしようとするデータは、エンコード前でも生成されるデータの容量を知ることができるのです。

デメリット – データに無駄がでやすい

常に一定のレートで転送しますので、複雑なデータ部分があったとしてもデータを削って転送しなくてはならなくなります。

音楽でいえば、様々な楽器を使って大いに盛り上がる箇所などですね。こういったデータ的に複雑になる箇所も一定にしようとするため、複雑になる箇所で品質の低下を招きやすくなります。

また逆に、無音に近いデータがほぼ無い箇所でも一定の転送レートで送るため、こういった箇所ではデータを無駄に使ってしまい非効率な転送になりやすくなります。これらがCBRのデメリットです。

品質低下についてはビットレートを高く設定することで解決できます。ただし、データ容量はもちろん大きくなります。

完全なCBRは難しい 【コラム】

エンコードをするためには符号化をしなくてはならない、ということは冒頭で解説しました。

この符号化によってデータ量を削減するのでしたね。符号化により、ABというデータが1になったり、ABCというデータが1100になったりします。割り当てられる符号は、元のデータより短くなったり長くなったりします。(可変長符号)
(全体としてはもちろん短くなりますが、出現頻度の低い規則性は長い符号を割り当てることがあります)

このように、符号化後のデータは様々な長さに成りうるため、一定のビットを得にくいのです。

CBRでは一定のレートを取られなばならないのにこれでは困りますね。なので、符号化によって指定のビットレートよりレートが少なくなった場合、CBRは空のデータを埋め合わせとして使い補う「パディング」という動作を実行します。

パディング

これによって常に一定のビットレートを維持できるようになっています。
逆を言えば、こういった作業が必要になるほど完全なCBRデータを作り出すことは難しいということになります。なので、CBRの中身もパディングされたデータを無くせば少しビットレートが上下しているということでもあります。

CBRでエンコードしても、完璧なCBRには中々成り得ないということを頭の片隅にでも留めてください。

因みに、エンコード自体はVBR(可変)で実行し、あとでパディングしてCBRに見せかけることを「擬似CBR」といいます。

VBR – 可変ビットレート

可変ビットレート 【Variable Bitrate:VBR】とは、CBRと対になって使われる用語です。
名前の通り、ビットレートの値が場所によって変動するエンコードモードになります。

ビットレートの値は変動する

CBRが一定のビットレート値を維持するのに対し、VBRはビットレートの値を変動させることができます。

これにより、複雑な箇所には多くのデータを割り振れるようビットレートの値を高くし、逆に単純な箇所にはデータを少なくして効率的に転送できるようになります。CBRのように空のデータを入れるというパディングは必要ありません。

このため、同容量のCBRよりも高品質になりやすくなるのがVBRのメリットです。符号化の際の処理も早くなります。
音声データよりも映像データで真価を発揮します。

ビットレート値を固定しないので、VBRモードでエンコードする場合は「クオリティ」で品質を指定します。また、具体的に上限と下限を決めてその範囲内でレートを変動させるようにすることもできます。

因みに、可逆圧縮形式のファイルは基本的にVBRとなります。(CBRだと品質が犠牲になるため)

VBR

デメリット

ビットレートの値が常に変動しているため、エンコード後のファイルの容量が予測しにくくなります。

実際にエンコードしてみないことには、どこに多くの情報を割り振ればいいのか、または削ればいいのか判断が付かないからです。簡単にいえば「やってみないとわからない」ということになります。

また、レートが一定でないのでシークにも時間がかかります。(転送レートから時間を割り出しにくい。ちょっと特殊な算出法を使います。)

ABR – 平均ビットレート

平均ビットレート【Averate Bitrate:ABR】とは、CBRとVBRのいいとこ取りをしたようなエンコードモードです。
つまり、エンコード後のファイルサイズを予測できる変換の仕方をしますが、VBRのように転送レートも可変になります。

ビットレートは可変なのでVBRの一種です。

指定したビットレートが平均となる

CBRの欠点はビットレートが固定になることでビットの割り振りに無駄が生じること。
VBRの欠点はビットレートが可変になることで変換後のファイルサイズが予測できないこと。

ならばその中間のいいとこ取りをしたものを作ってみよう、ということで考えだされたのが「ABRモード」です。

ABRでエンコードすると、指定したビットレートの値が全体の平均値となるようにビットの割り振りをします。
こうすることで、CBRのように変換後のファイルサイズを予測できるようになり(平均値×時間)、さらにVBRと同じくビットを最適な場所へ割り振れるようになります。

品質を保ちながら、ファイルサイズをある程度予測できるようになるわけですね。
(ただし、エンコーダーによって多少の誤差はでてしまいます)

最大値と最小値を設定してその範囲内で可変させたり、最大値(ピーク)を指定してそれ以上のビットレートにならないよう制限させたりもできます。

126kbps × 6分(360秒) = 45360kb = 5.67MB

曲の長さとビットレート データ容量

▲曲の長さは6分、126kbpsの ABR 2pass でエンコードした結果です。

ABR

デメリット

指定した平均値にするようVBRよりも高度なレートコントロールをするため、他のモードより処理に時間がかかる場合があります。
常に先読みで複雑さを予測しながらビットを割り振らなければならないからです。(1passの場合)

しかも、その予想が外れると適切な処理がされなくなり品質が落ちてしまうことがあります。

1pass と 2pass

ABRでは、最終的に指定したビットレートが平均値となるようにレートコントロールをしなくてはいけないので、CBRやVBRよりも処理が高度になります。その処理方法には主に2種類あります。

1pass

まだエンコード処理をしていない部分のデータの複雑さを常に予測しながらビットレートをコントロールする方法です。
一回のエンコードで済むため高速な処理が可能です。

ただし、予想が外れた場合は大きく品質が低下したり目的のビットレート値から大きく外れることがあります。

2pass(複数パス)

まず一度データ全体の複雑さを解析し、その解析データを元にしてビットレートをコントロールする方法です。

最低でも2回の処理が入るため非常に処理が遅くなりますが、予め複雑さを解析しているため効率的にビットレートを調整することができるようになります。つまり、1passよりも品質が向上します。

因みに、エンコーダーによってはCBRやVBRでも2passエンコードができるものもあります。

まとめ

  CBR VBR ABR
ビットレート 固定 可変 可変
データサイズの予測 簡単 難しい 簡単
シーク 早い 遅い 少し遅い
品質(※) ばらつきやすい とても高品質 高品質
圧縮速度 高速 高速 場合によっては遅くなる

※同容量のデータを基準にした場合。

CBR(固定ビットレート)

  • ビットレートが時間とともに変化しない。常に一定である。
  • シークが早く、処理も高速である。
  • 圧縮後のデータサイズを予測できる。
  • × どの場面でも一定のビットレートを保つため、品質にばらつきがでやすい。(高いビットレートにすることで解決)
  • × 完璧なCBRデータの作成は難しい。

VBR(可変ビットレート)

  • ビットレートが時間とともに変化させることができる。(可変である)
  • 効率的に転送レートを割り振るため、高品質である。
  • 圧縮処理は高速である。
  • × 圧縮後のデータサイズを予測するのが難しい。
  • × シークが遅い。

ABR(平均ビットレート)

  • ビットレートが時間とともに変化させることができる。(可変である)
  • 効率的に転送レートを割り振るため、高品質である。
  • 指定したビットレートの値が平均値となるようコントロールする。そのため、圧縮後のデータサイズを予測できる。
  • × レートコントロールの処理に時間がかかる場合があり、その際に圧縮処理が遅くなる場合がある。
  • × データの”複雑さ”の予想が外れると、品質が悪くなる。(2passエンコードで改善可能)

エンコーダーの コマンドラインオプション を使い各エンコードモードを指定する

以上で紹介したエンコードモードは、各エンコーダーの「コマンドラインオプション」にて指定可能です。

コマンドラインオプションとは、エンコーダーに対して様々なオプションを指定するためのコマンドです。
このオプションの中に、これらエンコードモードを指定するためのコマンドが存在します。

LAME MP3 Encoder

○LAME MP3 Encoder
http://lame.sourceforge.net/developers.php

○RareWares / LAME Bundles
http://www.rarewares.org/mp3-lame-bundle.php

LAME 3.98 stable コマンドラインオプション
http://www001.upp.so-net.ne.jp/yama-k/codec/lame3.98option.html

MP3へエンコードしてくれるエンコーダーはこれが定番中の定番です。MP3の品質がよいと評判です。
(公式サイトからはソースコードしか入手できないので、本来LAMEはエンコーダーという意味では使えないらしい)

LAMEのコマンドラインオプションにて各エンコードモードを指定するには、以下のようにします。

CBRでエンコード

-b 320 - %d

数値の部分がビットレートを指定する箇所です。最大値は「320」ですので、この設定が最も高音質になります。

VBRでエンコード

-V 2 - %d

「-V」がクオリティです。0~10で指定します。10が低音質高圧縮、0が高音質低圧縮です。

ABRでエンコード

--abr 256 - %d

「--abr」が平均ビットレートモードを指定するコマンドです。数値部分で平均値を指定します。

納得のいくモードを探してみよう

以上、簡単ではありますが「CBR , VBR , ABR」の違いについて解説しました。

これらエンコードモードは音楽・動画などをエンコードする際に指定できます。
それぞれに特徴があり、メリット・デメリットが存在します。それらをご自分がやりたいことと照らし合わせ、自分にとって最適なモードでエンコードできるように考えてみましょう。

例えば、音楽や動画で最高品質を得たい場合(可逆形式を除く)はエンコーダーが指定できる最も高いビットレート値をCBRで指定すればOKです。容量は落としたい、でも品質も維持したい場合はVBRがおすすめです。特に動画ではその威力を発揮します。低ビットレート(64kbpsなど)はABRの処理が上手であると聞きます。

この記事も、みなさんのためになりましたら幸いです。