Opusは英国のIETF(インターネット技術特別調査委員会)で開発されたロイヤリティフリーの非可逆音声圧縮コーディックで、エンコードされたファイルの拡張子は「 .opus 」になります。
AACやmp3 と比べてマイナーな存在のOpusですが、低ビットレートでも音質が良く低レンテーシーにも対応出来てYouTubeなどのストリーミング配信に適していると言われています。
そこで、Opusを低ビットレートにして、何時もの様にハイレゾピュア音源を使って基本的な音質評価を行い、更にリアル音源を使ってオリジナル音源とOpusファイルのスペクトルとの差分から絶対誤差(グラフ化)を求めて音質差を調べてみました。(併せてAACファイルの比較も行います)
Opus音声コーデックのインストール
音声ファイル(wav 又は flac)をOpusファイルに変換(エンコード)するには、取り敢えず、3つの方法があります。
- OpusサイトのDLページから「opus-tools」をダウンロードして、tool内にある opusenc CLIコマンドラインを使う
- FFmpegのライブラリーで -acodecで libopus を指定する
- XLD アプリで、環境設定から Opus を指定する
今回は、[1] の方法で、opusenc CLIを使ってエンコードすることにしたので、「opus-tools」をインストールする必要があります。
「opus-tools」のダウンロードからインストールまで
簡単な手順
- Opusの公式DLページからOSX用の「opus-tools」をダウンロードすると、ダウンロードホルダーに圧縮された「opus-tools-0.1.9-macos.tar.gz」が保存されます。
- この圧縮ファイルを、アーカイブユーティリティ.app で展開しますとopus-tools-0.1.9-macosフォルダが展開されます。
- フォルダー名を単純な名前 opus-tools にして、例えば、アプリケーションフォルダに opus-tools をフォルダごと移動すればインストール(準備)完了です。
- opus-toolsフォルダの中身は、「エンコーダCLIのopusenc」、「デコーダCLIのopusdec」、「インフォメーションツールCLIのopusinfo」その他ヘルプファイル等で構成されています。
ターミナルに
/Applications/opus-tools/opusenc -h
と入力すると、opusencのヘルプが表示されれば事前準備は完了です。
wav 又は flac ファイルをOpus に変換する
macOSのターミナルを起動しておきます。
例えば、「変換元の名前.wav 」ファイルを ビットレートを160kbpsに指定して「変換後の名前.opus」に変換したい時は、ターミナルに下のコマンドラインを記述します。 この場合可変ビットレート(VBR)でエンコードされます。
terminal /Applications/opus-tools/opusenc "変換元の名前.wav" --bitrate 160 "変換後の名前.opus"
セキュリティエラーの対処について
初めてopusencを実行すると、エラーダイアログが表示されてしまいます。
この場合、下の手順で回避できます。
- macOSデスクトップ左上のアップルメニューより[システム環境設定]-[セキュリティとプライバシー]をダブルクリック
- 画面下「ダウンロードしたアプリケーションの実行許可」より「このまま開く」をクリック
なお、FFmpegのライブラリーで -acodecで libopus を指定してエンコードすると、エラーダイアログは表示されません。
Opusファイルを再生(デコード)するには
下の3つの方法で、Opusファイルを再生できます。
- Opusファイルに対応するプレーヤで再生する。 macOSでは、VLC media player で再生できます。
- ブラウザにOpusファイルをドラッグアンドドロップして再生する。
Chrome,Firefox,Edgeで再生できます。(後述しますが、Chrome,Edgeはbit深度が16bit再生) Safariは再生NG - opus-toolsフォルダにあるopusdec CLI を使って 汎用的なwavファイル等に変換(デコード)して再生する。
ビットレートを変えてOpusの音質を評価する(AAC対比)
何時もの様に、ハイレゾピュアー音源を使って、pink-noise による再生可能上限周波数(Cut-Off周波数)と1khzの歪率(THD+N)を求めてみます。
再生可能上限周波数(Cut-Off)
このOpus(Pink-Noise)ファイルをVLC Playerで再生し、仮想オーディオドライバー(Black-Hole)を経由してWaveSpectraでスペクトルを描画しました。
ポイント
驚くべきことに、何とOpusのビットレートが36kbps以上であればCut-Off周波数が20khzであり、320kbpsと同じであったことです。 AACの場合、低ビットレートを指定すると高域を減じて圧縮率を高かめます。(詳しくはここを参照) 例えば、128kbpsでAACエンコードするとそのCut-Offは17khzになりますので、Opus-36kbpsの方が再生可能周波数が勝っています。
このことから、Opusであれば、36〜128kbps以下の低ビットレートでも再生可能上限周波数が20khzをキープできることが分かりました。
1khzの歪率(THD+N %)を調べる
この変換されたOpus(sin 1khz)ファイルをVLC Playerで再生し、仮想オーディオドライバー(Black-Hole)を経由してWaveSpectraで歪率を測定し、96kbps,128kkbpsの歪率特性としてグラフ化しました。
ポイント
グリーンラインがOpusの歪率特性です。 ビットレートが、96kbpsでも128kbpsと略同じ歪率特性になっており、ブラウンの点線で示されるFFmpegAAC-128kbpsでの歪率特性に匹敵していることが分かります。 また、CDの歪率特性よりも優れていることからエンコード時のビット深度が24bitに対応していると考えられます。
つまり、Opusを再生するデコーダーが24bitに対応出来ていれば、CD音質を凌ぐことが期待できます。
リアル音源で高域暴れの有無を調べる
ポイント
「高域暴れ評価用」音源をOpus-96kbpsで変換したファイルをVLC Playerで再生したスペクトルを確認し、上限周波数も20khzを維持し高域暴れが無いことが確認できました。
リアルサウンドの試聴結果とスペクトル絶対誤差
Opusの試聴手順と試聴結果
terminal /Applications/opus-tools/opusdec "変換元の名前.opus" --rate 48000 --float "変換後の名前.wav"オリジナル Flacファイルとwavにデコードした「Opus-96kbpsとOpus-128kbps」ファイルを我が家のB級オーディオで比較しながら試聴しました。
< 試聴結果 >
Opus-128kbpsは、オリジナル Flacと殆ど聴き分けられない同等と言える音質で再現されていますが、一方のOpus-96kbpsはストリングスの音やシンバルが非常に軽微ですがオリジナルFlacと違いがある様に感じられました。
スペクトル絶対誤差で音質を評価する
オリジナルFlacとwav化されたOpusファイルをAudacityに取込みスペクトル・データを出力した後Numbersで差分を求めスペクトルの絶対誤差をグラフ化しました。(下のグラフ参照) 【Audacity周波数解析条件:Hann Window size:16384 サウンドファイルの先頭から218.5秒間 】
比較のため、同様にFFmpeg AAC-128kbpsと320kbpsも絶対誤差をグラフ化してみました。 FFmpeg AACファイルのwavへのデコードはAppleの「Audio to WAVE 48K Droplet.app」を使用。
リアルサウンド評価・まとめ
- Opus-96kbpsサウンドは、軽微ながらオリジナル Flacサウンドとの違いを感じる。
- 絶対誤差グラフから見た音質順位は以下の通り
FFmpegAAC-320kbps > Opus-128kbps = FFmpegAAC-128kbps > Opus-96kbps
オリジナル Flac音源からエンコードした、OpusとFFmpeg AACのサウンドファイルを以下に掲載します。 ♫ 聴き比べてみてください。
Opus音源を聴く
Opus-96kbps:6.2MB
チャイコフスキー交響曲 第6番_3rd
Opus-128kbps:8.3MB
チャイコフスキー交響曲 第6番_3rd
AAC音源(参考・比較)を聴く
128kbps_FFmpeg_chg: 8.7MB
320kbps_FFmpeg_chg:20.2MB
最後に、残念ながら(まとめ)
以上の評価から、Opusは、低ビットレートであっても再生上限周波数が20khzを維持しつつ、トラフィックが悪いネット環境でもアクセス時間が短縮され、高音質なストリーミング配信が期待できると思われるものの、
残念なことに、Opusは未だ一般的で無く、調べたところ、Opus再生に対して以下の難点があります。
- 再生プレーヤが限られること。(AppleMusicでは非対応で、VLC Playerで再生できます)
- ブラウザ上の再生が限られ、再生出来ても16bitでデコードされる場合があること。(Opus再生対応状況)
ブラウザ Opus再生対応状況 macPC・Firefox OK 24bit macPC・Chrome OK 16bit macPC・Edge OK 16bit macPC・Safari NG iPhone 全てのブラウザ NG Android・Chrome OK 未確認 - WordPressでOpus音声ファイルは基本的に非対応でAudioショートコードは使えないこと。(但し、HTMLのaudioタグで埋め込むことは出来ます)