Opus (音声圧縮)
Opus(オーパス)とは、IETF によって開発され、主にインターネット上でのインタラクティブな用途に合わせて作られた非可逆音声圧縮フォーマット。RFC 6716 によって標準化されたオープンフォーマットとして、リファレンス実装は3条項BSDライセンスの下で提供されている。Opusをカバーするすべての既知のソフトウェア特許は、ロイヤリティフリーの条項の下でライセンスされている。
Opusは、スピーチ向きのSILK (音声圧縮)と低レイテンシで音楽用途にも使えるCELT の2つのコーデックの技術を組み込んでいる。Opusは、ビットレートの高低を継ぎ目なく調節でき、内部的には、低いビットレートでは線形予測コーデック、高ビットレートでは変換コーデックを使い、途中で切り替えることも可能である(短時間はハイブリッドでオーバーラップさせられる)。Opusは会話、ネットワーク上の音楽公演やライブイベントなどでリップシンクすることができ、低遅延のオーディオ通信リンクの一部として使用するために必須な、非常に小さいアルゴリズム遅延(デフォルトでは22.5 ms)を持つ。Opus は、音声品質を犠牲にすれば、アルゴリズム遅延を最高5 msまでに小さくすることができる。MP3, Vorbis, HE-AAC などの既存の音楽用コーデックは100 ms以上の遅延があり、Opus はそれらよりも遅延がずっと小さいにもかかわらず、ビットレートに対する品質では遜色ないものとなっている。上記の既存コーデックとは異なり、Opusは個々のファイルに巨大なコードブック定義を持たせないので、短いショートクリップ音声の保管にも適している。
6 kbit/sから510 kbit/s、フレームサイズ2.5 msから60 ms、サンプリングレート8 kHz(帯域幅4 kHz)から48 kHz(帯域幅20 kHz、つまり、人間の持っている聴覚系の全聴力範囲を再現することが可能)の範囲での固定及び可変ビットレートエンコードに対応している。Opusを使ったストリーミングはミッド/サイドコーディングを使って2つのチャンネルをジョイント (音響工学)できるため255までの音声チャンネルに対応できる。
Opusが持つ本質的な低遅延(既定値22.5 ms)の性質により、電話、VoIP、ビデオ会議で必要とされる同一のリアルタイムコンピューティングを実現することができる。高品質な音声のためにより高いビットレートで低遅延を維持する技術はXiph.Org FoundationがCELTというコーデックの開発で実現している。Opusを使ったストリーミング中(生放送もしくはファイル)のビットレート、帯域幅や遅延は、オーディオの歪みや断絶を伴わずに迅速かつシームレスに変更することができる。
他のオープン標準同様、アルゴリズムは文書で公開されており、またリファレンス実装(ソースコード含む)も公開されている。ブロードコムとXiph.Org FoundationがCELTのアルゴリズムでソフトウェア特許を、スカイプ・テクノロジーズとマイクロソフトがSILKのアルゴリズムでソフトウェア特許を取得しているが、両特許ともIETF標準として一度承認されたコーデックであるOpusの使用に際してロイヤリティーフリーで使用できるようになっている。また、第三者による侵害訴訟対策として自身の特許を利用する権利も所有している。クアルコムや華為技術がOpusに対し非ロイヤリティーフリー特許の適用性を主張していて論争となっている。
Opusは低レイテンシのCELTとスピーチ用途のSILK(両方とも統合するために大きく変更されており、それらのオリジナル形式と互換性が無くなるほどレンダリングされている)が元となっている。変換Transform codingレイヤー (CELT) はCELP(周波数領域であるものの励起コードブックである)によるアプローチのある修正離散コサイン変換 (MDCT) を元にしているだけでなく、20 msフレームの追加などの変更がなされている。スピーチ信号に特化されたSILKレイヤーは線形予測符号 (LPC) とオプションの長期予測フィルタが基になっていて、10 msフレームの追加などの変更がなされている。パケットの余計な負荷を最低限に抑えるためにSILKは60 msのより長い遅延(対してCELTは20 ms)に対応している。ハイブリッドストリーミングにおける両パーツの共有レンジコーダーはCELTによって賄われている。
このコーデックは3つの異なるモードが有り、純粋なスピーチ信号のための2つのモードと一般的なオーディオ(音楽含む)のための3番目のモードがある。スピーチモードの1つは人間が聴くことのできる範囲の完全なスペクトラムを再生することができ、CELTは周波数範囲の上部(8 kHz以上)で使われ、SILKは下部で使用される。低ビットレート(約30 kbit/s以下)において上限周波数を遮断することができ、SILKはここでも下部で使用される。オーディオでの高ビットレートではスピーチ信号に特化したSILKレイヤーは省かれ、特化していないCELTレイヤーが使用される。
リファレンス実装はC言語で書かれ、FPUのあるなしによらず、複数のハードウェアアーキテクチャーで利用できる。
現在、浮動小数点は、音声帯域検出 (SILKとCELT、ハイブリッドの各エンコーディング間の動的切り替え)と速度の最適化のためにのみ必要である。
OpusのデータはOggのコンテナでカプセル化することができる。そのようなOgg Opusストリームの内容はaudio/ogg; codecs=opusで指定する必要があり、Ogg Opusのファイルの拡張子は.opusにすることが推奨される。その他、Matroska、WebMのコンテナに格納することができる。
Opusは新たな音声コーデックの標準化としてIETFで計画され、IETFのコーデックワーキンググループによって最終的に承認された。Xiph.Org Foundationとスカイプ・テクノロジーズ(現マイクロソフト)による2つの当初分類されていた標準化計画に基づくものだった。主要開発者にジーン=マーク・ヴァリン (Xiph.Org, Octasic, Mozilla Corporation)、コエン・ボス(スカイプ)、ティモシー・B・テリーベリー (Xiph.Org, Mozilla Corporation) がおり、他にジュアン=ヒュイ(レイモンド)・チェン(ブロードコム)、グレゴリー・マクスウェル(Xiph.Org、ウィキメディア財団)、クリストファー・モンゴメリー (Xiph.Org) も関わっていた。
コーデックにおけるCELTの開発は「Ghost」のコードネームだったVorbisの後継として回帰した。OpusはXiphの古いスピーチ用コーデックでヴァリンによる初期のプロジェクトでもあるSpeexを置換するものとなっている。CELTは2007年9月より公開されている。
SILKはスカイプがiSACやiLBCといったサードパーティ製コーデックと同様、それにそれぞれのライセンスへの支払のために会社から独立させた内部プロジェクトだったSVOPCの後継として2007年1月より開発を始めた。
2009年3月、スカイプはIETFによる広帯域音声コーデックの開発と標準化を承認したが、適切なワーキンググループの形成に関する多数の議論でほぼ1年費やした。G.719の作成者でライセンサーであるポリコムとエリクソンの担当者、G.718の開発に携わったフランステレコム、華為技術、オレンジラブズ(フランステレコムの子会社)といった特許を妨げる競合するフォーマットの標準化に参加した数社の企業代表者が、ロイヤリティーフリーのコーデックの標準化プロセスの開始に関して異議を唱えた。ワーキンググループが最終的に形成されたのは2010年2月で、ITU-TのStudy Group 16が作業を支援することになった。
2010年6月、ハイブリッドフォーマットのプロトタイプがSILKとCELTの2つの計画されたコーデックを組み合わせる形で登場した。9月、OpusはIETFに標準化の提案として提出された。短期間だが、2010年10月までに現名称になるまでこのフォーマット名が「Harmony」だった時期がある。2011年2月始め、ビットストリームフォーマットが最終変更の影響で暫定的に凍結された。7月終わり近く、ジーン=マーク・ヴァリンはOpusの開発を続けるためにMozilla Corporationに雇用された。11月、ワーキンググループはビットストリームフォーマットの変更のためにラストコールを出したが、ビットストリームは2012年1月8日以降凍結されたままとなっている。2012年7月2日、Opusの標準化がIETFによって承認された。リファレンスソフトウェアは8月8日にリリース候補状態になり、最終的な仕様は2012年9月10日に RFC 6716 としてリリースされ、リファレンス実装のバージョン1.0と1.0.1が後日公開された。一方で、とりわけフォーマットの可変ビットレートメカニズムのより広範的な利用に関するリファレンスエンコーダーの実験的な分野での開発作業が行われ、特に人声が中心のサンプルにおいて、有意なほど高いオーディオ品質を生み出すと報告された。
Opusは優れた品質を持っていることが示されており、高いビットレートにおいてHE-AACやVorbisのような非常に大きい遅延のあるコーデックと競合する結果となった。
64kbpsでのリスニングテストにおいて、プロプライエタリなSpectral Band Replication (SBR) 技術を使用することで低ビットレートの分野では支配的だったHE-AACと比べても、やはり優れた品質を示した。96kbpsではOpusはわずかにAACより良く、VorbisやMP3との比較では著しく良い結果となった。
低レイテンシは会話、音楽公演、リップシンク等のリアルタイム用途に重要な特性である。レイテンシはジッタバッファ遅延・アルゴリズム遅延・処理遅延などからなり、十ミリ秒オーダーの低レイテンシ要件ではアルゴリズム遅延も重要になる。Opusは前記の用途に必要な低アルゴリズム遅延を備えている。
音声コーデックのアルゴリズム遅延はエンコーダ/デコーダが信号を複数のブロックやフレームに分割し、ウインドウオーバーラップができるようにするための遅延の他、ノイズシェーピングのための先読みを可能にするための遅延やその他のあらゆる先読みのための遅延、またMP3では、ビットリザーバーを使うための遅延などからなる。
150 ms以下になっている合計の一方向レイテンシは発話交替による遅延の影響が軽微な状態で自然な会話を実現するために、ほとんどのVoIPシステムとの相性が良いものになっている。音楽家が典型的にリアルタイムで感じる30 msまでのオーディオレイテンシはハース効果の融合時間とおおよそ一致するが、ユーザーの各楽器の再生遅延と往復待ち時間とのマッチングも助けることができる。45-100 msあたりのオーディオレイテンシが許容可能な音声と映像の同期も提案されている。
Opusは更に小さいアルゴリズム遅延(最小5.0 ms)を実現するために、品質とビットレートのトレードオフを許可している。既定値のOpusのフレームは20 msの長さだが、一般的に22.5 msの遅延が与えられるCELTレイヤーによるウインドウオーバーラップやSILKレイヤーによるノイズシェーピングのためにさらに2.5 msの先読みが必要である。SILKレイヤーの最小限はフレーム10 ms(遅延12.5 ms)でCELTレイヤーの最小限はフレーム2.5 ms(遅延5.0 ms)である。
フォーマットとアルゴリズムはドキュメントやリファレンス実装としてオープンになっており、フリーソフトウェアとして公開されている。別々のエンコーダーとデコーダーで構成されているリファレンス実装 (Opus Audio Tools, opus-tools) はBSDライクライセンスの下で公開されている。C言語で書かれており、FPUの有るハードウェア用にも、FPUの無いハードウェア用にもコンパイルできる。付属する診断ツールであるopusinfoはビットストリームフォーマットの標準準拠情報を含むOpusファイルの技術的情報を詳細に表示するが、vorbisツールのogginfoがベースとなっており、従ってエンコーダやデコーダーと異なりGPLV2の規約の下に公開されている。
Discordというゲーマー向け総合ボイスチャットでは各プラットフォームクライアント及びWebブラウザ版で利用されている。
Mumbleというボイスチャットソフトではバージョン1.2.4でOpusにメインコーデックとして対応している。
SIPのソフトフォンであるPhonerとPhonerLiteはOpusに対応している(Opusがまだ初期ドラフト段階のときから最初に対応している)。
SIPとIAX2クライアントのSFLphoneもOpusに最適化しようとしている。
Opus対応バージョンはまだ出ていないが、SkypeクライアントによるOpusの統合は完了している。
ビデオ会議ソリューションのTrueConfはOpusに対応している。
Jitsiはバージョン2.0の時にVP8ビデオサイズと共にOpusに対応している。
EmpathyはOpusを含むGStreamerが対応するフォーマットを使用出来る。
Line2は現コーデックをOpusに乗り換えた。iOSアプリケーションも公開当初からOpusに対応しているが、Androidアプリケーションは後に対応した。
CSipSimpleはプラグインの追加という形式でOpus、Codec2、G.726、G.722.1に対応している。
TeamSpeakというボイスチャットソフトウェアでもサーバーバージョン3.0.7とクライアントバージョン3.0.10から音声と音楽のためにOpusに対応している。
Opusへの対応はWebRTCの実行には必要不可欠である。
MozillaはFirefoxやThunderbirdのバージョン15からOpusに対応している。
使用中のバックエンドに応じる形で、Operaも組み込まれたOpusファイルのインライン再生に対応している。OpusとWebRTCの正式対応は開発ロードマップに盛り込まれている。
ChromiumとGoogle Chromeではバージョン25時点でOpusオーディオに部分対応しており、最近のバージョンでは<audio>要素にも対応した。
Icecastでは2012年9月より実験的にライブストリーミング配信を行なっている。
ネットラジオストリーミングで知られるFM++はlibopusを使用しており、国内のネットラジオ送信ではらじるらじるやListenradioと比べても、ファイルサイズが小さいので最も音声遅延が少ない。
Debian GNU/Linuxでは2013年初頭リリースの安定版 ("wheezy") でOpus開発ツールとサポートライブラリを事前設定リポジトリからインストールすることができる。
Microsoft WindowsではDC-Bass Source ModやLAVフィルターを含むDirectShowフィルタがOpusに対応している。
GStreamerではOpus対応の統合が完了している。
FFmpegはFFmpeg 1.1より外部ライブラリのlibopusを使ってOpusを使ったデコードとエンコードに対応している。
Android 5 からネイティブサポートとなっている。
AppleはiOS 11 ベータ版においてOpusのサポートを行った。iOS 12.2、macOS Mojave 10.14.4以降ではメッセンジャーの音声ファイル添付において使われている。なおコンテナはoggでは無くApple独自のcaf(Core Audio Format)が利用されている。
ポリコムのハードウェアでOpusに対応する製品がある。
Rockboxは開発版で対応している。これはポータブルメディアプレーヤーのシリーズ(AppleのiPodシリーズやiriver、Archosのプレーヤー)や「Rockbox as an Application」(RaaA) を使用するAndroid端末のハードウェアサポートを意味している。
AIMPはバージョン3.20よりネイティブ対応している。
foobar2000はバージョン1.1.14ベータ1よりネイティブ対応している。
Mpxplayはバージョン1.60アルファ2の時点で外部のデコーダDLLを使用することでOpusに対応している。
VLC media playerはバージョン2.0.4以降でOpusに対応している。
XMPlayは開発元un4seen developmentsによる公式のプラグインで対応している。