広告 MP3、AAC音質関連

低ビットレートでも高音質と言われるOpus音声コーデックの音質評価を試みました。(スペクトル絶対誤差・評価)

スポンサーリンク

 

Opus英国のIETF(インターネット技術特別調査委員会)で開発されたロイヤリティフリーの非可逆音声圧縮コーディックで、エンコードされたファイルの拡張子は「 .opus 」になります。

AACやmp3 と比べてマイナーな存在のOpusですが、低ビットレートでも音質が良く低レンテーシーにも対応出来てYouTubeなどのストリーミング配信に適していると言われています。

そこで、Opusを低ビットレートにして、何時もの様にハイレゾピュア音源を使って基本的な音質評価を行い、更にリアル音源を使ってオリジナル音源とOpusファイルのスペクトルとの差分から絶対誤差(グラフ化)を求めて音質差を調べてみました。(併せてAACファイルの比較も行います)

 

Opus音声コーデックのインストール

音声ファイル(wav 又は flac)をOpusファイルに変換(エンコード)するには、取り敢えず、3つの方法があります。

  1. OpusサイトのDLページから「opus-tools」をダウンロードして、tool内にある opusenc CLIコマンドラインを使う
  2. FFmpegのライブラリーで  -acodecで libopus を指定する
  3. 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」その他ヘルプファイル等で構成されています。
opus-toolsの確認
ターミナルに  /Applications/opus-tools/opusenc -h  と入力すると、opusencのヘルプが表示されれば事前準備は完了です。

 

wav 又は flac ファイルをOpus に変換する

macOSのターミナルを起動しておきます。

例えば、「変換元の名前.wav 」ファイルを ビットレートを160kbpsに指定して「変換後の名前.opus」に変換したい時は、ターミナルに下のコマンドラインを記述します。 この場合可変ビットレート(VBR)でエンコードされます。 

 terminal
/Applications/opus-tools/opusenc "変換元の名前.wav" --bitrate 160 "変換後の名前.opus"

 

セキュリティエラーの対処について

初めてopusencを実行すると、エラーダイアログが表示されてしまいます。

この場合、下の手順で回避できます。

  1. macOSデスクトップ左上のアップルメニューより[システム環境設定]-[セキュリティとプライバシー]をダブルクリック
  2. 画面下「ダウンロードしたアプリケーションの実行許可」より「このまま開く」をクリック

なお、FFmpegのライブラリーで -acodecで libopus を指定してエンコードすると、エラーダイアログは表示されません。

 

Opusファイルを再生(デコード)するには

下の3つの方法で、Opusファイルを再生できます。

  1. Opusファイルに対応するプレーヤで再生する。 macOSでは、VLC media player で再生できます。
  2. ブラウザにOpusファイルをドラッグアンドドロップして再生する。 
    Chrome,Firefox,Edgeで再生できます。(後述しますが、Chrome,Edgeはbit深度が16bit再生) Safariは再生NG
  3. opus-toolsフォルダにあるopusdec CLI を使って 汎用的なwavファイル等に変換(デコード)して再生する。

 

ビットレートを変えてOpusの音質を評価する(AAC対比)

何時もの様に、ハイレゾピュアー音源を使って、pink-noise による再生可能上限周波数(Cut-Off周波数)と1khzの歪率(THD+N)を求めてみます。 

再生可能上限周波数(Cut-Off)

WaveGeneで-20db Pink-noiseを生成しハイレゾフォーマット(wav 24bit 192khz)で出力した音声ファイルをビットレートを320kbps,36kbps,24kbpsに変えてOpus変換しました。 
このOpus(Pink-Noise)ファイルをVLC Playerで再生し、仮想オーディオドライバー(Black-Hole)を経由してWaveSpectraでスペクトルを描画しました。

blank

 

ポイント

驚くべきことに、何とOpusのビットレートが36kbps以上であればCut-Off周波数が20khzであり、320kbpsと同じであったことです。 AACの場合、低ビットレートを指定すると高域を減じて圧縮率を高かめます。(詳しくはここを参照) 例えば、128kbpsでAACエンコードするとそのCut-Offは17khzになりますので、Opus-36kbpsの方が再生可能周波数が勝っています。

このことから、Opusであれば、36〜128kbps以下の低ビットレートでも再生可能上限周波数が20khzをキープできることが分かりました。 

 

1khzの歪率(THD+N %)を調べる

WaveGeneでsin 1khzのレベルを -0.5db -3db -20db -48db -60db -90db に変えて生成しハイレゾフォーマット(wav 24bit 192khz)で出力します。 出力した音声ファイルを低ビットレートの 128kbps,96kkbps でOpas変換してみました。
この変換されたOpus(sin 1khz)ファイルをVLC Playerで再生し、仮想オーディオドライバー(Black-Hole)を経由してWaveSpectraで歪率を測定し、96kbps,128kkbpsの歪率特性としてグラフ化しました。

Opus-96kbps 歪率特性

blank

Opus-128kbps 歪率特性

blank

ポイント

グリーンラインがOpusの歪率特性です。 ビットレートが、96kbpsでも128kbpsと略同じ歪率特性になっており、ブラウンの点線で示されるFFmpegAAC-128kbpsでの歪率特性に匹敵していることが分かります。 また、CDの歪率特性よりも優れていることからエンコード時のビット深度が24bitに対応していると考えられます。

つまり、Opusを再生するデコーダーが24bitに対応出来ていれば、CD音質を凌ぐことが期待できます。

 

リアル音源で高域暴れの有無を調べる

「4つの視点」で再評価ページに掲載されている、ハイレゾ「高域暴れ評価用」音源(「ベートーベン 交響曲第8番 2楽章(カラヤン ベルリン・フィル ) 1962年録音盤」)をビットレート96kbpsでOpusAAC変換します。 この変換されたOpusファイルをVLC Playerで再生し、仮想オーディオドライバー(Black-Hole)を経由してWaveSpectraでスペクトルを確認し、高域暴れの有無を確認しました。

blank

ポイント

「高域暴れ評価用」音源をOpus-96kbpsで変換したファイルをVLC Playerで再生したスペクトルを確認し、上限周波数も20khzを維持し高域暴れが無いことが確認できました。

 

リアルサウンドの試聴結果とスペクトル絶対誤差

 

Opusの試聴手順と試聴結果

試聴するリアル音源は、「サンプル音源・DLコーナー」に掲載されている「カラヤン指揮・チャイコの悲愴・第3楽章、1964年録音」のハイレゾ音源(Flac 24bit 192khz)をOpus-96kbpsとOpus-128kbpsに変換し試聴することにしました。 試聴するに当たり、 我が家のB級オーディオのSony HAP-Z1ESでは、Opusフォーマットは再生出来ないので、Opus tools にある opusdec を使ってOpusファイルをwavにデコード(変換)して、HAP-Z1ESに取込み試聴しました。 opusdec CLIのオプション --rate 48000 でサンプルレート48khz に、--float で16bitを避けて32 ビットに指定してwavファイルに変換します。 コマンドラインは以下です。
 terminal
/Applications/opus-tools/opusdec "変換元の名前.opus" --rate 48000 --float "変換後の名前.wav"
オリジナル Flacファイルとwavにデコードした「Opus-96kbpsとOpus-128kbps」ファイルを我が家のB級オーディオで比較しながら試聴しました。

< 試聴結果 >
Opus-128kbpsは、オリジナル Flacと殆ど聴き分けられない同等と言える音質で再現されていますが、一方のOpus-96kbpsはストリングスの音やシンバルが非常に軽微ですがオリジナルFlacと違いがある様に感じられました。

 

スペクトル絶対誤差で音質を評価する

次に、駄耳ゆえ正確な評価に自信が無いので、オリジナルFlacとのスペクトル絶対誤差で客観評価してみました。
オリジナルFlacとwav化されたOpusファイルをAudacityに取込みスペクトル・データを出力した後Numbersで差分を求めスペクトルの絶対誤差をグラフ化しました。(下のグラフ参照) 【Audacity周波数解析条件:Hann Window size:16384 サウンドファイルの先頭から218.5秒間 】

 

Opus-96kbps 絶対誤差

blank

20khzまで音声成分は存在しているが、16khz付近以上から誤差の暴れが生じおりオリジナルFlacとの音色差が想定される。

Opus-128kbps 絶対誤差

blank

20khzまで音声成分は存在し、16khzから2.5db程ゲインUPが認められる。

 

比較のため、同様にFFmpeg AAC-128kbpsと320kbpsも絶対誤差をグラフ化してみました。  FFmpeg AACファイルのwavへのデコードはAppleの「Audio to WAVE 48K Droplet.app」を使用。

FFmpeg AAC-128kbps 絶対誤差

blank

17khzまで誤差が2db以内に収まって、17khzから音声成分が急減し消滅ている。

FFmpeg AAC-320kbps 絶対誤差

blank

20khzまで音声成分があり、誤差も1db以内に収まっている。 流石320kbpsです。

 

リアルサウンド評価・まとめ

  1. Opus-96kbpsサウンドは、軽微ながらオリジナル Flacサウンドとの違いを感じる。
  2. 絶対誤差グラフから見た音質順位は以下の通り
    FFmpegAAC-320kbps  > Opus-128kbps = FFmpegAAC-128kbps > Opus-96kbps

 

オリジナル Flac音源からエンコードした、OpusとFFmpeg AACのサウンドファイルを以下に掲載します。 ♫ 聴き比べてみてください。

Opus音源を聴く

ブラウザによっては再生エラーになる場合があります。 下記ブラウザのOpus再生対応状況を参照してください。

Opus-96kbps:6.2MB
チャイコフスキー交響曲 第6番_3rd

Opus-128kbps:8.3MB
チャイコフスキー交響曲 第6番_3rd

AAC音源(参考・比較)を聴く

File Size
128kbps_FFmpeg_chg: 8.7MB 
320kbps_FFmpeg_chg:20.2MB

 

最後に、残念ながら(まとめ)

以上の評価から、Opusは、低ビットレートであっても再生上限周波数が20khzを維持しつつ、トラフィックが悪いネット環境でもアクセス時間が短縮され、高音質なストリーミング配信が期待できると思われるものの、

残念なことに、Opusは未だ一般的で無く、調べたところ、Opus再生に対して以下の難点があります。

  1. 再生プレーヤが限られること。(AppleMusicでは非対応で、VLC Playerで再生できます)
  2. ブラウザ上の再生が限られ、再生出来ても16bitでデコードされる場合があること。(Opus再生対応状況
    ブラウザ Opus再生対応状況
    macPC・Firefox OK 24bit
    macPC・Chrome OK 16bit
    macPC・Edge OK 16bit
    macPC・Safari NG
    iPhone 全てのブラウザ NG
    Android・Chrome OK 未確認
  3. WordPressでOpus音声ファイルは基本的に非対応でAudioショートコードは使えないこと。(但し、HTMLのaudioタグで埋め込むことは出来ます)

 

以上、低ビットレートでOpus音声コーデックの音質評価を試みました。 今後、多くのブラウザ・プラットフォームでOpus再生が可能になることを期待します。

 

スポンサーリンク

 

スポンサーリンク

 

t