藤本健のDigital Audio Laboratory
第930回
MP3より高音質! YouTube/Discord採用の「Opus」コーデックを試した
2022年2月28日 11:50
音声圧縮フォーマットの「Opus」をご存じだろうか?
YouTubeで採用されている音声フォーマットの1つで、ほかにもゲーム関連などでよく使われるボイスチャットシステム「Discord」や、様々なVoIPソフトウェアで採用されている。エンコードにおけるレイテンシーが他のコーデックに比べ極めて小さく、VoIP用にマッチしているからトーク用途で用いられるのだ。
とはいえ、このOpusはMP3やAACなどと同様、ファイルベースでも扱うことができ、音楽用途としても利用可能だという。では、音質的にみてどの程度のものなのだろう。以前から気になりつつも、しっかり検証したことがなかったので、チェックしてみた。
ロイヤリティフリーOpus。メディアプレーヤーやブラウザで再生可能
OpusはNPO組織の標準化団体であるIETF(インターネット技術特別調査委員会)によって開発された非可逆音声圧縮フォーマットで、基本的にロイヤリティフリーで使うことができるオープンフォーマット。オープンフォーマットという意味ではFLACやOgg Vorbisとも近い存在といえそうだが、音楽ファイルとして使用されているケースはあまりないように思う。
ただfoobar2000では、かなり古くからネイティブ対応していたようだし、VLC media playerでも10年ほど前から対応している。さらに、まったく知らなかったのだが、最新のWindows 11ならば前回紹介したメディアプレーヤーが、それ以前のWindows 11やWindows 10ならGrooveミュージックが対応しているので、拡張子「.opus」のファイルをダブルクリックするだけで再生できるようになっている。
Windows11の新アプリ「メディアプレーヤー」検証。カーネルミキサー問題も
macOSの場合はダブルクリックするだけで開くわけではないが、ChromeやFirefoxが再生機能を装備しており、ファイルをドラッグ&ドロップするだけで再生することが可能。Safariは対応していないようだが、Chromeなどを入れていれば、簡単に再生することができるし、foobar2000やVLC media playeなどを入れてもOKだ。ブラウザとしてはWindowsの場合、Edgeも対応している。
では、Opusはどうすればエンコードできるのだろうか?
YouTubeの場合、MP4ファイルなどをアップロードすると、オーディオ部分が自動的にOpusやAACにエンコードされるようになっている。実際、WindowsやMacのChromeで、YouTubeの再生画面でコンテクストメニューから「詳細統計情報」を選択すると、画面左上に各種情報が表示されるが、Codecsとしてopus(251)として表示されていることが確認できる。
しかし、拡張子.opusのファイルを生成できるソフトをあまり見かけたことがない。iTunesやその後継であるApple Music Appにもないし、Windows Media Playerにもなく、オールマイティな音声入出力が可能なSound Forge Proなどにも備わっていないのだ。
検索してみたところ、Opus Interactive Audio Codecのサイトでopus-tools 0.2なるものが無料で公開されており、ソースコードのほか、Windows用、macOS用がバイナリーの形で誰でもダウンロードできるようになっていた。
もっとも、GUIはなくコマンドラインで使うソフトであるため、不慣れな人だと使うこと自体に抵抗感がありそうだが、とりあえずWindows版を入手して試してみた。なお、この実験を一通り終えてから気づいたが、foobar2000には、Opusでのエンコード機能が備わっていたので、これを使うのが便利そうではある。
Windowsのコマンドプロンプトを開き、ここからエンコーダーであるopusencを実行する。さまざまなオプションが用意されているが、ここではビットレートだけを指定して試してみた。可変ビットレートと固定ビットレートが選べるが、デフォルトは可変ビットレートなので、そのままにしている。
1分ほどの音楽ファイルをエンコードしてみたところ、AMD Ryzen 9のマシンで実行して1秒もかからないで終了。そのファイルがこちらだ。
【録音サンプル】
opus128.opus(0.83MB)
※編集部注:編集部ではファイル再生の保証はいたしかねます。
再生環境についての個別のご質問にはお答えいたしかねますのでご了承下さい
ChromeやEdge、Firefoxなどであれば、ブラウザ内で再生することができるだろう。違和感なく、かなりキレイに再生できたと思うが、このファイルは128kbpsというビットレート。
このエンコーダーではチャンネルごとに6kbps~256kbpsで設定できるので、6kbps、16kbps、32kbps、64kbps、96kbps、128kbps、192kbps、256kbpsのそれぞれでエンコードしてみた。6kbpsなどとなると、ほかのコーデックではほとんど見かけない小さなファイルとなるが、実際どうなのか。
【録音サンプル】
opus6.opus(0.04MB)
※編集部注:編集部ではファイル再生の保証はいたしかねます。
再生環境についての個別のご質問にはお答えいたしかねますのでご了承下さい
再生してみたところ、さすがに6kbpsでステレオ音楽をエンコードすると音質的に厳しい印象。でも喋り声ならば、それなりに使えるかもしれないと、実際に試したのが以下のデータ。6kbpsだとやや声がかすれた感じにはなるが、十分聴こえる。
【録音サンプル】
opus_voice6.opus(0.01MB)
※編集部注:編集部ではファイル再生の保証はいたしかねます。
再生環境についての個別のご質問にはお答えいたしかねますのでご了承下さい
さらに8kbpsにしてみたところ、ほぼ問題なく聴けるレベルにまで向上した。
【録音サンプル】
opus_voice8.opus(0.01MB)
※編集部注:編集部ではファイル再生の保証はいたしかねます。
再生環境についての個別のご質問にはお答えいたしかねますのでご了承下さい
このように、低ビットレートで大きな威力を発揮するコーデックであることは間違いなさそうだ。
Opusデータを周波数分析してみた
では、ビットレートでエンコードした音を分析するとどうなるのか……。さきほどエンコードした結果を周波数分析ソフトのWaveSpectraを使って表示させてみたのが以下のものだ。
実はWaveSpectraの場合、Opusデータを直接読めるわけではないため、先ほどのopus-toolsに入っているデコーダー「opusdec」を利用し、いったんWAVファイルに変換してから読み込ませている。
この周波数分析を見る限り、96kbpsあたりで20kHzまでの音がしっかり出ているのがわかる。ただ、WaveSpectraのグラフだけでは、96kHz以上の違いが見えにくい。
Opusデータをオリジナルと差分比較した
次に、昨年の記事昨年の記事で実験したスペクトル分析した結果のグラフィック的差分で、どのくらい音に違いがあるかを視覚化する手法で比較してみることにした。
方法としては、まずオリジナルのWAVファイルをSteinbergのWaveLabを使ってスペクトログラム表示させたものをスクリーンショットする。さらにOpusでエンコードした結果も同じようにスクリーンショットする。この2つのスクリーンショットを「DiffImg」という画像比較ソフトを用いて差分を画像として作り出す。
分が大きければ明るく、差分が少なければ暗い画像になり、よりオリジナルに近い音であるということがわかる。その結果が以下のものだ。
画像を見ると、96kbps以上でも差分はどんどん減っていき、256kbpsでは真っ暗で、ほぼオリジナルに近いところまで来ているのがわかる。ちなみに、MP3の128kbpsと192kbpsでのWaveSpectraと、スペクトログラム表示の差分結果が以下の画像だ。
これを見ると、Opusは少なくともMP3よりは断然高音質な音声圧縮フォーマットであることが見えてくる。ライセンスフリーで使えることだし、もっとOpusが普及してもいいように思うが、音楽もストリーミングが中心となる中、あえて手元に非可逆の圧縮ファイルを手元に置いておくニーズはあまりないのかもしれない。
Apple MusicやSpotifyなどはストリーミングでAACを使っているようだが、ファイルベースで比較してみてOpusとどのくらいの違いがあるのか、次回はAACとの比較をしてみたいと思う。