Opus(オーパス)は、インターネットでの双方向通信に特化した非可逆
音声圧縮フォーマットであり、IETFによって標準化されています。RFC 6716として公開されており、その
リファレンス実装は
BSDライセンスの下で提供されています。特筆すべきは、Opusに関連する全ての既知のソフトウェア特許がロイヤリティフリーで
ライセンスされている点です。
Opusは、スピーチ向けに設計されたSILKと、低遅延で音楽にも対応できるCELTという2つの
コーデック技術を統合しています。
ビットレートをシームレスに調整でき、低
ビットレート時は線形予測
コーデック、高
ビットレート時は変換
コーデックを使用します。必要に応じて、両者を短時間オーバーラップさせるハイブリッドモードも可能です。
Opusの大きな特徴は、非常に小さいアルゴリズム遅延(デフォルトで22.5ms)を持つことです。これにより、会話、ネットワーク上での音楽演奏、ライブイベントなどでの
リップシンクが実現可能となり、低遅延オーディオ通信に不可欠な要素となります。さらに、音声品質をある程度犠牲にすれば、アルゴリズム遅延を5msまで縮小することも可能です。
MP3、
Vorbis、HE-
AACなどの従来の音楽
コーデックが100ms以上の遅延を持つことを考えると、Opusは遅延を大幅に削減しつつ、音質も遜色ないレベルを維持しています。また、Opusは個々のファイルに巨大なコードブック定義を持たせる必要がないため、短い音声クリップの保管にも適しています。
機能
Opusは、6kbpsから510kbpsの
ビットレート範囲、2.5msから120msのフレームサイズ、8kHzから48kHzのサンプリングレートに対応し、固定および可変
ビットレートエンコードをサポートしています。ストリーミングでは、ミッド/サイドコーディングにより2つのチャンネルを結合できるため、最大255チャンネルの音声に対応可能です。
Opusの低遅延性(デフォルト22.5ms)は、
電話、
VoIP、
ビデオ会議といったリアルタイム通信に最適です。
Xiph.Org Foundationが開発したCELT
コーデック技術により、高品質な音声を維持しながら低遅延を実現しています。また、ストリーミング中の
ビットレート、帯域幅、遅延は、音の歪みや中断なしにシームレスに変更可能です。
オープンスタンダードとして、Opusのアルゴリズムは文書で公開されており、
リファレンス実装(
ソースコードを含む)も提供されています。CELTのアルゴリズムには
ブロードコムと
Xiph.Org Foundation、SILKのアルゴリズムにはスカイプ・テクノロジーズ(現マイクロソフト)がソフトウェア特許を保有していますが、IETF標準として承認されたOpusの使用に関しては、これらの特許はロイヤリティフリーで利用可能です。
Opusは、低遅延のCELTとスピーチ用のSILKをベースにしていますが、両
コーデックともOpusに統合するために大幅な変更が加えられています。CELTは、
修正離散コサイン変換(MDCT)をベースにした変換レイヤーであり、20msフレームの追加などの変更が加えられています。SILKは、
線形予測符号(LPC)とオプションの長期予測フィルタをベースとしたスピーチ信号に特化したレイヤーで、10msフレームの追加などが行われています。
Opusには3つの異なるモードがあります。2つは純粋なスピーチ信号用で、残りの1つは一般的なオーディオ(音楽を含む)用です。スピーチモードの一つは、全可聴範囲のスペクトラムを再生可能で、高周波数帯域(8kHz以上)はCELT、低周波数帯域はSILKが担当します。低
ビットレート(約30kbps以下)では、上限周波数を遮断し、SILKが低周波帯域を処理します。高
ビットレートのオーディオでは、SILKレイヤーは省略され、CELTレイヤーが使用されます。
リファレンス実装は
C言語で記述されており、
FPU(浮動小数点演算装置)の有無に関わらず、多様なハードウェアアーキテクチャで利用可能です。浮動小数点は、主に音声帯域検出とエンコードモードの動的な切り替え、速度最適化のために利用されます。
Opusのデータは
Oggコンテナに格納できます。この場合、ストリームの内容は`audio/ogg; codecs=opus`で指定する必要があり、ファイルの
拡張子は`.opus`にすることが推奨されます。その他、
Matroska、
WebMコンテナにも格納可能です。
歴史
Opusは、IETFで新たな音声
コーデック標準として計画されました。
Xiph.Org Foundationとスカイプ・テクノロジーズ(現マイクロソフト)による2つの標準化計画が統合されたものです。主要開発者としてジーン=マーク・ヴァリン、コエン・ボス、ティモシー・B・テリーベリーらが挙げられます。
CELTの開発は、
Vorbisの後継として始まり、Speexを置き換えるものとして位置づけられました。CELTは2007年9月より公開されています。一方、SILKはスカイプが内部プロジェクトとして開発していたSVOPCの後継として2007年1月より開発が開始されました。
2009年3月、スカイプはIETFによる広帯域音声
コーデックの開発と標準化を提案しましたが、ワーキンググループの形成に時間を要しました。ロイヤリティフリーの
コーデック標準化に対し、競合するフォーマットの標準化を進める企業が異議を唱えたためです。ワーキンググループが最終的に形成されたのは2010年2月です。
2010年6月、SILKとCELTを組み合わせたハイブリッドフォーマットのプロトタイプが登場し、9月にはOpusとしてIETFに標準化提案が提出されました。一時「Harmony」という名称だった時期もありましたが、最終的にOpusとして定着しました。ビットストリームフォーマットの最終変更を経て、2012年7月2日、Opusの標準化がIETFによって承認されました。リファレンスソフトウェアは8月8日にリリース候補となり、最終的な仕様は2012年9月10日にRFC 6716としてリリースされました。その後、
リファレンス実装のバージョン1.0および1.0.1が公開されました。
品質比較と低レイテンシパフォーマンス
Opusは、高い
ビットレートにおいてHE-
AACや
Vorbisといった遅延の大きい
コーデックと競合するほどの高品質を実現しています。64kbpsでのリスニングテストでは、低
ビットレートで優位だったHE-
AACよりも優れた品質を示し、96kbpsでは
AACよりもわずかに優れ、
Vorbisや
MP3と比較すると著しく良い結果となりました。
低
レイテンシは、会話、音楽演奏、
リップシンクなどのリアルタイム用途において重要な要素です。Opusは、これらの用途に必要な低アルゴリズム遅延を備えています。一般的な音声
コーデックのアルゴリズム遅延は、信号をブロックに分割し、オーバーラップ処理を行うための遅延、先読みによるノイズシェーピングのための遅延などから構成されます。
合計の一方向遅延が150ms以下であれば、会話中の発話交代による遅延の影響を最小限に抑えられ、自然な会話が実現可能です。音楽家がリアルタイムで感じる30msまでのオーディオ遅延はハース効果の融合時間と一致し、楽器の再生遅延と往復待ち時間の調整にも役立ちます。45msから100ms程度の遅延は
リップシンクが許容できる範囲とされています。
Opusは、品質と
ビットレートのバランスを取りながら、アルゴリズム遅延を最小5.0msまで縮小可能です。デフォルトのOpusフレームは20msですが、CELTレイヤーのオーバーラップ処理やSILKレイヤーのノイズシェーピングのために、さらに2.5msの先読みが必要となり、合計22.5msの遅延となります。SILKレイヤーの最小フレームは10ms(遅延12.5ms)、CELTレイヤーの最小フレームは2.5ms(遅延5.0ms)です。
対応
Opusのフォーマットとアルゴリズムはオープンであり、
リファレンス実装も自由ソフトウェアとして公開されています。エンコーダーとデコーダーで構成される
リファレンス実装(Opus Audio Tools, opus-tools)は
BSDライセンスの下で提供されています。
C言語で書かれており、
FPUの有無に関わらずコンパイル可能です。
Opusは様々なプラットフォーム、ソフトウェア、ハードウェアで幅広くサポートされています。Discord、Mumble、
Skype、TrueConf、
Jitsiなどの
VoIPソフトウェア、Firefox、Chrome、
OperaなどのWebブラウザ、Icecastなどのストリーミングサービス、Linux、Windows、Android、iOSなどの
オペレーティングシステム、AIMP、foobar2000、VLC media playerなどのメディアプレーヤーで利用できます。
Opusは、
WebRTCの実行に不可欠であり、現代のインターネット通信において重要な役割を果たしています。