2011/04/21

Ogg Vorbis と ACC, MP3 位相比較

YouTubeがようやく完全WebMになったので、改めて音声コーデックについて考えてみようと思う。WebMは音声にVorbisというコーデックを使っている。従来はAAC だったので、その違いはあるのだろうか。特にYouTubeでは解像度の低い動画をアップすると、低ビットレートでコーデックされたので音質は著しく劣化した。ビットレートは不明だったが、音質とデータ容量から60kbpsもしくはそれ以下と思われる。ここでは57kbpsを基準にしてVorbis、AAC、MP3を比較しようと思う。

Ogg Vorbisについて簡単に紹介

対応フォーマットなどでOggと書いてある場合 Ogg Vorbisを指している場合が多い。本来Oggはコンテナで、Vorbisは音声フォーマット。OggコンテナにはFlacなど他の音声フォーマットが入る場合もある。そうなるとOgg = Ogg Vorbisでは混乱を招き兼ねない。ということで好ましい言い方ではないと思うのだが、すでにこの言い方が普通になってしまっているので慣れるしかないようだ。

ライセンスについて。MP3, AAC, Ogg Vorbisの中で、オープンソース&パブリックドメインはOgg Vorbisだけ。他はライセンスが発生するので、使用する場合は料金を払う必要がある。ユーザーとして利用するだけなら無料であるが、メーカーなどはライセンス料を支払っている。この関係でオープンソフトウェアはMP3,AACを手軽に扱うことは出来ない。Audacityにしても、MP3,AACは別途組み込む必要がある。Chromiumに至ってはmp3,AACをaudioタグで再生することすらできない。

Ogg Vorbisは普及しているのか? メモリオーディオなどのハードはMP3のサポートは当然だが、Ogg Vorbisをサポートしている機種は数えるほどしかない。そういう意味ではハード寄りの普及はメーカーの姿勢が変わらない限り見込めない。 一方ウェブ上ではこれから徐々に普及していくと思われる。知らず知らずの間に使われるようになるのではないかな? やはりライセンスの問題が発生しないというのは強いと思う。このBlogでも音声はOgg Vorbisを使っている。

Ogg Vorbisは可変ビットレートをQualityという単位でエンコードする。 Qualityは、Q-1,Q0,Q1,Q2,Q3,Q4,Q5,Q6,Q7,Q8,Q9,Q10 のいずれかを選択して音質を調整。Q10(500kbps前後)が最高音質だが圧縮率は低下する。標準はQ3(100-120kbps程度)で通常音楽を圧縮するには適していると思われる。


比較用オリジナル音源

今回の比較で使ったオリジナル音源は、モノラルで生録した声をステレオにして、この音源に対して各種コーデックを試した。
サンプリング周波数は 44100Hz。またパンで左右の音量バランスを20%ずらした。こうすることで面白いことが判明する。
通常のステレオ処理された音楽ソースではないので、音声圧縮フォーマットの粗が出やすいのだ。

コーデック方法及び評価方法について

Audacityを使ってコーデックした。そのため細かな設定はせず圧縮率を決める程度まで。またコーデックの知識もほとんどないことを断っておく。Audacityの各コーデックのライブラリーは以下を使った。
MP3 LAME 3.98.3
AAC F52.36.0, C52,32,0, U50.3.0
また評価方法であるが、位相具合を見たかったので、リサジュー表示ができるWaveSpectraという波形表示ソフトを使ってみた。このソフトまじめな仕様で結構いいかもしれない。その代わりCPU負荷は高めです。

各種コーデックの圧縮率は56~57kbpsぐらいで評価

ビットレート固定は現状では出来なかったので、おおよそこれぐらいで評価。MP3は56kbpsで、AAC は57kbps。Vorbisは可変ビットレートなので Q0 で設定してみた。およそ55~57kbpsぐらいかな? 
これらをビットレートだけみるとMP3はちょっと損をしている。
まずは、オリジナルのWavファイルのスペクトルから見ていく。

Wave Frequency

サンプリング周波数44100Hzなので、22050Hzまでの音が鳴っているのが分かる。

Wave Lissajous


次にリサジューを見てみる。リサジューは知らない人も多いと思う。簡単に説明すると、ステレオ音声の2チャンネルを、それぞれX軸Y軸に方向から入力して、互いの信号のクロスポイントが表示されているようなものと思えばよい。左右全く同じ音であれば、位相差は0となり、左下から右上にかけて45度の細い1本の線になる。位相がずれると線がくずれ、様々なかたちに変化するというもの。また今回、左右の信号は同じものだが、左右の音量バランスを崩しているので、リサジューの斜め線は45度ではなくなっている。このオリジナルのWavファイルはキレイな斜め線で表示されているのが分かる。この後、コーデックでどう変化するかを観察していく。

では圧縮音源の代表であるMP3から見ていく。

Mp3 Frequency

まず音質がよくない。周波数スペクトルを見ると10kHz以上が削られていることが分かる。念のため書いておくと不要な高域を削ることでデータを減らしているのがMP3の圧縮方法。AAC、Vorbisも基本的には同じ。まぁ10kHzという高域は十分聞こえる周波数領域なので、本来は削りたくない部分であるが、低ビットレートでは音質よりも圧縮率優先なので容赦なく削る。問題は聞こえる音を削っただけではなく、その削られているはずの10kHz以上の高域において、シャワシャワと余計な音が出ているところ。スペクトルを見ても高域に妙な成分がある。実は左右の信号が全く同じ場合は、56kbpsのビットレートでもそれなりの音質なのだが、左右の音量レベルがズレると、雑音が出まくる現象が出始める。

Mp3 Joint Lissajous

リサジューを見ると乱れている。位相の問題が結構派手に出ているように思う。これは圧縮時にジョイントステレオという推奨の方法でコーデックしている。左右同じ信号なら、それなりにきれいにまとまるが、パンをいじってバランスを崩すことで、音質がガタガタと崩れていく。

Mp3 stereo Lissajous

ステレオという普通ぽいコーデックをした場合、位相問題はすごくなり、とてもではないが、聞ける音になっていない。妙なキンキン音が入って耳障り。オリジナルが1本の線であることを思えば、これは異常事態だ。

AAC


AAC Frequency
AAC は、MP3よりも優秀というイメージがあったが、低ビットレートの場合はそうでもないようだ。高域の削れは9kHzから始まっている。音を聴くと明らかに高域がなくMP3より地味な音という印象。人は20kHzまで聞こえると言うが、経験的には16kHzまでが普通に聞こえて、それ以上は普通の音とは違った感触がある。オーディオは最低16kHzまでないと不自然だと思う。これは低ビットレートで圧縮優先だから仕方ないのだけど。さてカットした高域成分にも何か信号が残っている。でも高域になるほど減衰しているためか、MP3よりも素直な印象を受ける。実際音を聴いてもシャワシャワノイズはMP3の方がひどく、AACの方がまだ自然。

AAC Lissajous

リサジューは、結構優秀ではなかろうか。太目の線で、それほど崩れることはない。

Vorbisは?

Vorbis Frequency
スペクトルを見ても分かるように、15~16kHz辺りまでカットされていない。聴覚上も明らかで、自然な音に聞こえる。さらに注目すべきは、削った高域に妙な波形が出ない点。おそらく耳障りなノイズがないのはこの部分の影響だろう。
これを聴いてしまうとMP3とAAC は話にならない。さすがに後発だけあって圧倒的な勝利と言えるかも。ただし、これは57kbpsという低ビットレートの話であって、高ビットレートになると各コーデックの音質差は微妙すぎて、勝敗は別のところで決まってくる。

Vorbis Lissajous

リサジューはAACよりも悪い?そんな印象だが、安定して常に太い線という感じ。圧縮すると、どうしても位相は影響を受けるのかな。Vorbisの圧縮原理をそのうち調べてみよう。
http://vorbis.com/
ここの資料を読めば概要は分かりそうだ。
http://xiph.org/vorbis/doc/
この辺りのドキュメントにいろいろ書いてある。

上記を実験していると他にも分かったことがあった

57kbpsにおいて、MP3モノラルとMP3ステレオを比較すると、はるかにモノラルの音がよかったこと。カット高域が15kHzぐらいに伸びるので音が全く違う。下手にステレオにするよりモノラルという手もありだと思った。

Sample数の長さが変化する?

今回比較して初めて気づいたのだが、Audacityでコーデックする限り、MP3とAAC では、下のように時間が変わった。つまりサンプル数がコーデック後では変わってしまう。他のソフトでコーデックすると違う可能性あり。未確認。
(サンプリング周波数 44100Hz = 1秒間に44100サンプル)

Wav4556288オリジナルのサンプル数
MP34558464 +2176 +49msec
MP3 mono4557312+1024 +23msec
AAC4552704-3584 -81msec
Vorbis4556288サンプル数変化なし

MP3は長くなり、AAC は短くなってしまう。Vorbisは1サンプルも変わらない。こういう長さが変わるというのはいただけない。この時点でVorbis以外は使いたくないと思ってしまう。

とりあえずのまとめ

YouTubeは現在WebMへ完全移行して音声コーデックはVorbisを利用している。低ビットレートでも、以前のAACとは違い高音質が期待できる。ビットレートの情報はないので、実際にどの程度の質をキープするのか分からなかったので、テストアップして試してみた。640x360サイズの動画を360pで再生した場合は、十分すぎるクオリティだった。以前はひどかったからなぁ。すごくよくなった。

一方音楽フォーマットとしては、比較結果からVorbisを可能な限り使いたい。ライセンスから音質までVorbisは優秀。問題はVorbisを再生できるハード(メモリオーディオなど)があまりに少ないということ。日本のメーカーはOgg Vorbisに対応するつもりはないのかな?

汎用という意味では未だにMP3が圧倒的であり、何かとMP3にしておくのが無難である。でも低ビットレートになるほど音質は悪くなる傾向にある。128kbps以上ならば多くの場合、それほど問題にならないだろう。ということでMP3の地位は不動のままか? 今後WebMなどの普及でVorbisが注目を集め、浸透していくことを願う。


高ビットレートはどう? 110422

モノラル音声をステレオにして、左右の音量バランスを変えた音源を用意。これを低ビットレートでコーデックすると、MP3は劣化しまくり、AACは高域不足になり、Vorbisは無難に使えることが判明した。さらに高ビットレートではどうなるか試してみた。

MP3 128kbps

明らかに妙なノイズが入ってくることを確認。128kbpsは結構利用していたのでショック。はっきり分かるレベルで音が劣化する。今後使うのはやめようと思う。

MP3 192kbps

聴いた限り、それほど違和感はないが、オリジナル音源と比べると明らかにおかしい。リサジューでは結構劣化している様子が伺える。MP3全滅か・・・

AAC Q100 (124kbps程度)

気にならない。リサジューは優秀。やや太くなるぐらい。乱れはない。

AAC Q200 (208kbps程度)

気にならない。リサジューはきわめて優秀。オリジナル音源に近い線を示す。

Ogg Vorbis Q5 (134kbps程度)

聴いた限り分からない。リサジューは多少線が太くなる。AACよりは劣るが、MP3のような乱れは少ない。同レベルのAACと比較すると、周波数特性ではVorbisが有利のようだ。

まとめ

高ビットレートになるとAACの優秀さが出るようだ。MP3はこのような音源は、どんなビットレートでもダメなようだ。Ogg Vorbisは低ビットレートでも高ビットレートでも安定して常に使えるという印象。ただ192kbpsを超える高ビットレートでは、他と周波数特性に差がなくなり、リサジューを見る限りAACの方が上かもしれない。
この手の圧縮音源の位相の問題を取り上げているサイトが、他にもあるかと思って、ちょっと検索したのだが見つからなかった。結構大問題だと思うのだが。

MP3について 150723

その後不本意ながらMP3をメインで使うようになる。MP3についてはこちらのページに書いてみた。

中学生ぐらいから学ぶフーリエ変換 目次