音楽ファイルが96kbpsになる日――Opus音声コーデックの実力

《**[視覚的にもっとわかりやすくした解説はこちら](http://qiita.com/keiya/items/70ed223c85e72b6bfdda)**》
# Opusとは
新しい音声コーデックで、IETF標準であり、WebRTCの実装で利用される。レイテンシが非常に低くでき、VoIP用途にも利用できるが、一般的な音楽ファイルにも有用な高性能コーデック。YouTubeにも採用されている。

ほとんどの人は96kbpsのOpusとオリジナルの区別をつけることが難しいのではないか？
Cf. http://d.hatena.ne.jp/kamedo2/20150721/1437496134 ![](http://cdn-ak.f.st-hatena.com/images/fotolife/k/kamedo2/20150722/20150722011514.png) ※ [画像出展](http://d.hatena.ne.jp/kamedo2/20150721/1437496134)

# 比較
* 44.1kHz、**モノラル**で比較
    * (モノラルなので、joint stereoなどの性能比較は含まないものとなる。以下で記載されているビットレートを大体2倍すればステレオの場合として考えられる。)
* 以下に載せるOpusは全部モノラル／48kbps近辺のビットレートになっている。
* スペクトログラムでコーデックを比較するのは良くないのはわかっているが、視覚的にわかりやすいのでこの比較を行う。
    * 実際には二重盲検法、ABXテストしたほうがいいが、時間と根気が必要なのでパット見でわかる便利さは重要だと思う。
* X軸が時間、Y軸が周波数、色の濃さがZ軸であり、黒いほど音がないことを示す。

## 低ビットレート比較
ステレオ換算で**96kbps**程度。

* めうめうぺったんたん!! (ひなビタ) 0:17〜0:27
    * FLAC 16bit 44.1kHz (オリジナル) ![meumeu_flac.png](https://qiita-image-store.s3.amazonaws.com/0/19148/34d0d3a7-389c-899b-00ae-ff049abff864.png)
        * シンセが鳴りまくる場面
    * MP3 LAME ABR 60 (**57kbps**) ![meumeu_mp3.png](https://qiita-image-store.s3.amazonaws.com/0/19148/27f546da-e559-2b5d-58b3-5f2fb43ba62e.png)
        * MP3は比較対象中一番ビットレート高いのに、さすがに厳しい
    * Ogg xiph.org oggenc q0.5 (**53kbps**) ![meumeu_ogg.png](https://qiita-image-store.s3.amazonaws.com/0/19148/0e7f193c-29a2-bcdb-7993-632c894f9cf8.png)
        * Oggは低ビットレートに強いと前々から言われていたし、割とリーズナブルな結果。
    * AAC XLD(QuickTIme) CVBR 48kbps (**49kbps**) ![meumeu_aac.png](https://qiita-image-store.s3.amazonaws.com/0/19148/757b81d8-4af3-578f-1bad-b3c37b7b7c7f.png)
        * このビットレートではLC-AACはあまり強くないようだ。
    * **Opus** xiph.org opusenc VBR 46kbps (**48kbps**) ![meumeu_opus.png](https://qiita-image-store.s3.amazonaws.com/0/19148/09e5bae7-9cfe-a6e5-00f1-c3360bd82ef6.png)
        * 綺麗なスペクトログラム。Opus、強すぎる



## 中ビットレート比較
ステレオ換算で**128kbps**(Ogg)〜**165kbps**(MP3) vs **Opus 96kbps**の比較

* Hello, Goodbye (The Beatles) 0:55〜1:05
    * FLAC 24bit 44.1kHz (オリジナル) ![07 - Hello, Goodbye (2009 Digital Remaster)_flac.png](https://qiita-image-store.s3.amazonaws.com/0/19148/84dfe103-da87-1368-0418-13d24d67c3c8.png)
        * ビートルズのリマスター盤。ちょうどライドシンバルが鳴る場面。
    * MP3 LAME VBR V4 (**80kbps**) ![07 - Hello, Goodbye (2009 Digital Remaster)_mp3.png](https://qiita-image-store.s3.amazonaws.com/0/19148/f1c6c756-a1ce-c580-06e2-3deb061831ca.png)
        * LPFでカットして、可聴域の解像度を高める戦略だが、可聴域に黒点が見え、劣化となる。
    * Ogg xiph.org oggenc q4 (**75kbps**) ![07 - Hello, Goodbye (2009 Digital Remaster)_ogg.png](https://qiita-image-store.s3.amazonaws.com/0/19148/65255cc4-ff50-cc3a-6e97-2a22973653df.png)
        * MP3よりはいくぶんかマシになる。
    * **Opus** xiph.org opusenc VBR 48kbps (**49kbps**) ![07 - Hello, Goodbye (2009 Digital Remaster)_opus.png](https://qiita-image-store.s3.amazonaws.com/0/19148/d110e14c-0f6b-9087-6ba0-a06141d517c0.png)
        * 他のコーデックとOpusで1.6倍程度もの大きなビットレート差があるが、見劣りしない。


* 金の波 千の波 (新居昭乃)  0:55〜1:05
    * FLAC 16bit 44.1kHz (オリジナル) ![015. 新居昭乃-金の波 千の波_flac.png](https://qiita-image-store.s3.amazonaws.com/0/19148/920ad9c6-7e9b-1f42-7e7c-4a4e299593b4.png)
        * 歯擦音が目立つ場面。
    * MP3 LAME VBR V4 (**82kbps**) ![015. 新居昭乃-金の波 千の波_mp3.png](https://qiita-image-store.s3.amazonaws.com/0/19148/dffc825e-676f-a601-321d-e85ec7ffa567.png)
        * LPFで16k以上は綺麗にカット、4k程度の音域でも黒点が見える。
    * Ogg xiph.org oggenc q4 (**77kbps**) ![015. 新居昭乃-金の波 千の波_ogg.png](https://qiita-image-store.s3.amazonaws.com/0/19148/f827d8a3-0162-2aca-7d95-b5d578f8b86c.png)
        * MP3よりは良好。
    * **Opus** xiph.org opusenc VBR 48kbps (**50kbps**)![015. 新居昭乃-金の波 千の波_opus.png](https://qiita-image-store.s3.amazonaws.com/0/19148/14ace000-1885-b98d-4a54-2425937c53b5.png)
        * Opus。Vorbisより解像度はいい感じだけど16k以上で何か線が入っている。とはいえビットレートは低いにもかかわらず、他に比べて明らかに良い。

## 高ビットレート比較
ステレオ換算で**192kbps**(Ogg)〜**225kbps**(MP3) vs **Opus 96kbps**の比較

* ホントノトコロ (名瀬ゆかな) 1〜11秒
    * FLAC 16bit 44.1kHz (オリジナル) ![001_flac.png](https://qiita-image-store.s3.amazonaws.com/0/19148/365117fb-05ed-ab9e-bb06-87f66676d78b.png)
        * オリジナルファイル（可逆圧縮、基準）
    * MP3 LAME VBR V1 (**117kbps**) ![001_mp3.png](https://qiita-image-store.s3.amazonaws.com/0/19148/c4e5b17a-99ee-9a2f-b296-8d07a5bab72a.png)
        * 16kHz付近以上を犠牲にして可聴域の音質を高めている。可聴域の解像度はスペクトログラムでオリジナルとの違いがわからず良好。
    * Ogg xiph.org oggenc q6 (**101kbps**) ![001_ogg.png](https://qiita-image-store.s3.amazonaws.com/0/19148/2dc25688-d513-d791-e0f8-ffc109d913f3.png)
        * 20k以上の超音波領域を削っている。可聴域にはところどころ黒点が見える。
    * **Opus** xiph.org opusenc VBR 48kbps (**52kbps**) ![001_opus.png](https://qiita-image-store.s3.amazonaws.com/0/19148/9f6ea4b5-02c6-f425-a3e3-23290c96af6f.png)
        * 他のコーデックよりかなり低い48kbps(ステレオで約96kbps)で、この解像度を誇る。6.6秒の18k付近で原音の線が間延びしているように見える。Opusは、このビットレートの16k以上はアーチファクトが現れると思われる。
* さよならを教えて (MELL) 
    * FLAC 16bit 44.1kHz ![0. Track_27_flac.png](https://qiita-image-store.s3.amazonaws.com/0/19148/cef87937-775b-c004-7c72-ec2abaa01f6c.png)
    * MP3 LAME VBR V1 (**126kbps**) ![0. Track_27_mp3.png](https://qiita-image-store.s3.amazonaws.com/0/19148/3b1661ca-bcd9-10c8-801c-c4b12ff5eb9e.png)
        * 16k以上はところどころ捨てられる。時々黒点がめだつ。
    * Ogg xiph.org oggenc q6 (**102kbps**) ![0. Track_27_ogg.png](https://qiita-image-store.s3.amazonaws.com/0/19148/bce38cb7-0565-ac97-9577-ef14cf0896e5.png)
        * MP3よりはがんばっているようだが可聴域に黒点が見える。
    * Opus xiph.org opusenc VBR 48kbps (**49kbps**) ![0. Track_27_opus.png](https://qiita-image-store.s3.amazonaws.com/0/19148/fd5fbdd4-e26d-5879-2524-8199683ae652.png)
        * Opusは他の半分以下のビットレートだが、ぱっと見は悪くない印象。まあ、さすがにオリジナルと見比べると可聴域に若干粗があり、見比べると分かる。

さすがにOpusと他のコーデックのビットレートに差がありすぎて、Opusで若干情報の欠落が見えるが、オリジナルと聞き分けはつかない。96kbps(モノラル48kbps)で試してみよう。

# コード
```bash
flac -f -d -o "/tmp/$1.wav" "$1.flac" 
sox "/tmp/$1.wav" "/tmp/$1-mono.wav" trim 55 10 remix -
sox "/tmp/$1-mono.wav" -n spectrogram -x 1200 -o "${1}_flac.png"

oggenc -q4.000000 "/tmp/$1-mono.wav" -o "/tmp/$1.ogg" && sox "/tmp/$1.ogg" -n spectrogram -x 1200 -o "${1}_ogg.png"

opusenc --bitrate 48 --vbr "/tmp/$1-mono.wav" - | opusdec --quiet - "/tmp/$1.opus.wav" && sox "/tmp/$1.opus.wav" -n spectrogram -x 1200  -o "${1}_opus.png"

lame -m m -V4 "/tmp/$1-mono.wav" - | mpg123 -w "/tmp/$1-mp3.wav" - && sox "/tmp/$1-mp3.wav" -n spectrogram  -x 1200 -o "${1}_mp3.png" 
rm "/tmp/$1.wav" "/tmp/$1-mono.wav" "/tmp/$1.ogg" "/tmp/$1.opus.wav" "/tmp/$1-mp3.wav"
```

# Opusまとめ
* VBRが基本、CBRは無駄で使う必要はない。
    * なお、libopus 1.1.1 VBRでは、オルゴールの音になると異常にビットレートを使うので注意
* (今回は書いてないけど)ボイスだけなら48kbpsもあれば原音と区別つかないはず。24kbpsでも割と問題ない。
    * ボイスのエンコードにはSkypeが開発したSILKが利用される
* ビットレート（ステレオの場合）
    * たぶん打ち込み系、ポップス、ロック等は96kbpsくらいで割と良い
        * 96kbpsに於いては16kHz以上の原音再現度はそれほど高くない
            * ただし人間が聴いて分からない、気にならないレベル
    * 静かな曲は128kbpsくらいはあってもいいかもしれない
        * YouTubeでは、最近は Opus 160kbps を多くの動画で採用している
        * ぶっちゃけ、それ以上を割り当てたりしても、無音が多かったりすると、同じ音源のFLACの場合のほうが小さくなったりすることもある。**どれほど多くてもVBR 160kbpsで良く**、256kbpsあればオーバーキル気味。
    * それ以上はどのコーデックにしても人間の耳で聞き分けることは不可能（断言）
* ハイレゾとOpus 128kbpsがABXテストで聴き分けられたら、ぜひ自慢してください！たぶんできませんが。

**[視覚的にもっとわかりやすくした解説「音声コーデック 音質比較 AAC vs MP3 vs Opus vs Vorbis」](http://qiita.com/keiya/items/70ed223c85e72b6bfdda)**

- (関連) なぜハイレゾは「バカげている」のか
    - 高すぎるサンプリングレートが無意味な理由です。
    - http://qiita.com/keiya/items/c994c200e8b38b6c7935