音声コーデック 音質比較 AAC vs MP3 vs Opus vs Vorbis

スペクトログラムの差分で比較する。
具体的には、オリジナルファイルのスペクトログラムと、コーデックを通し、変換後のスペクトログラムを画像編集ソフトのレイヤーに貼り付け、レイヤー効果で差分を取る。最終的に視覚化されるのは非可逆コーデック(Lossy)で失われた情報となる。
**ネット上には、高音域がどこまで出るかだけを見て音質を評価する情報がある。これは意味がなく、より重要なのは可聴域における音質である。** 大多数の人間は17kHzとかそれ以上の高音はほぼ感じない。（これもまた、**ネット上に音声でテストするサイトがあるが、こういったサイトはクリッピングが発生しており、歪みの形で可聴域で聴こえている場合がある**。[WaveGene](http://efu.jp.net/soft/wg/wg.html)や[Audacity](http://www.audacityteam.org/)で正しくトーンを生成してテストすべきである。）

テスト曲：Perfect sky Chorus ver.

前に書いた [音楽ファイルが96kbpsになる日――Opus音声コーデックの実力](http://qiita.com/keiya/items/7d14adff689207a63b4b) では差分は取らずに、スペクトログラムだけを貼ってある。今回は視覚的にコーデックの比較をするために画像の差分をとった。

# 128kbps
**画像を拡大して画面の輝度を最高にし、部屋を暗くして、黒く見える部分に緑が見えることに注目してほしい。**
128kbpsでの比較。以下のように **Opus > qaac = Vorbis > LAME** となる。ここで注意して見たいのは、目立つ高域のロスではなく、人の耳にとりわけ影響がある中音域の可聴域である。LAMEでは明らかに可聴域に緑の部分が見られることがわかる。VorbisとAACでは若干Vorbisのほうが緑っぽいが大体同じものとなる。Opusは緑の部分が少なくロスは少ないが、高音域を若干犠牲にしている。これはだいたい16〜17kHzとなり、そこに緑が若干目立つ。
このビットレートではどのコーデックもローパスフィルターを通している。LAMEは16kHz、AACとVorbisは18kHz、Opusは20kHzである。Opusは(CELTモードでは)ビットレートにかかわらず、ローパスフィルターは20kHzとなる。だがローパスフィルターが16kHzに掛かっていたとしても、聴覚上の違いはほぼわからない。このローパスフィルターは、どうせ高域にビットを割り当てても意味が薄いので、その代わりに可聴域へビットレート割り当てするためにある。
## AAC: qaac (Apple) CVBR 128
![aaccvbr128.png](https://qiita-image-store.s3.amazonaws.com/0/19148/98465779-d9e9-cd60-420f-1136e2b2c952.png)
不自然な点が気になるが可聴域の品質は高い。
## MP3: LAME VBR v5
![mp3vbrv5.png](https://qiita-image-store.s3.amazonaws.com/0/19148/afe0ba9b-daa7-3843-7cee-2140db85cafc.png)
全体的に見劣りする。
## Opus: opusenc VBR 128
![opusvbr128.png](https://qiita-image-store.s3.amazonaws.com/0/19148/59a18e03-5fb3-20a4-6828-3925fe9203e6.png)
原音と差が少なく、抜きん出た品質の高さである。16kHz以上は少しロスが増え20kHz以上は完全にロスとなる。

## Vorbis: aoTuV 20110424 (based on Xiph.Org's libVorbis 1.3.5) VBR q4.0
![vorbisq4.png](https://qiita-image-store.s3.amazonaws.com/0/19148/d9191788-6035-20ad-ee1f-b3513f0f8450.png)
緑が目立つものの、拡大してみると、8kHz以下はかなりロスが少ない。

# 256kbps
**Opus > AAC = MP3 = Vorbis**のように見える。なぜならば、AACとVorbisは可聴域に緑の斑点がよく見えるがLAMEは意外と見られない。また、Opusは緑の斑点が最も見えず、最高の品質である。一方で、高音域はローパスフィルターを通していないAACとVorbisが勝る（が、可聴域の再現性はOpusより若干悪い）。
**以下の画像は拡大して黒く見える部分をよく見てほしい。黒く見えても、緑の濃さに違いがある。**

## AAC: qaac (Apple) VBR q109
![aacq109.png](https://qiita-image-store.s3.amazonaws.com/0/19148/bf6d0ac1-7a5b-b9c1-49ce-a7aa519fdb30.png)
全体的に安定。AppleのAACエンコーダは優秀。
## MP3: LAME VBR V0
![mp3v0.png](https://qiita-image-store.s3.amazonaws.com/0/19148/043e1939-5d46-ae9a-4e51-5a9a587d312b.png)
可聴域の部分は意外と良い結果になっている。が、MP3はコーデックの仕様上高い音が苦手（まあ、人間には劣化は知覚できないけど）。
## Opus: opusenc VBR 240
![opusvbr240.png](https://qiita-image-store.s3.amazonaws.com/0/19148/eae9ec88-4c55-6924-62c3-6ed3216803f5.png)
拡大すると、可聴域の部分ではAACやVorbisよりも緑の部分が少ない（というか、ほぼ真っ黒で、すなわち、原音に近い）。ただし、LPFのために超音波より上はカット（聞こえないので無問題）。
## Vorbis: aoTuV 20110424 (based on Xiph.Org's libVorbis 1.3.5) VBR q8.0
![vorbisq8.png](https://qiita-image-store.s3.amazonaws.com/0/19148/9d0fbce9-b9e0-ee87-3e93-7af3f860102e.png)
AACと似ているが、Opusよりは微妙に悪いようである。

# 結論
* Opus最強。実際に音楽ファイルを扱う際は、メタタグの運用上の便利さとしてはMP3かVorbisとなるだろう。AACはReplayGainの取り扱いがソフトによって異なるらしい。OpusはFoobar2000で付けたReplayGainがVLCで読めないなどがある。
* 総合的に評価するなら `Opus>AAC=Vorbis>MP3`
    * AACはAppleのエンコーダーを使うと、 `AAC>Vorbis` となる印象
* 意外と高ビットレートのVBRにおけるLAMEは音質が高い。



## おまけ： 原音のスペクトログラム
上記画像ファイルとこれの差分を取れば、上記コーデックの完全なスペクトログラムが手に入ると思われる。
![002. Will-316O2.flac.png](https://qiita-image-store.s3.amazonaws.com/0/19148/600082e0-9378-057f-bb03-7e7b7530d183.png)


- Opus 96kbps vs その他コーデック高ビットレートのスペクトログラム勝負はこちら
    - http://qiita.com/keiya/items/7d14adff689207a63b4b

- なぜハイレゾは「バカげている」のか
    - http://qiita.com/keiya/items/c994c200e8b38b6c7935