🎧
Webで使用する音声コーデックの簡単な説明
mdn web docsのウェブ音声コーデックガイド https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Audio_codecs を読んで,ウェブでよく使用されるコーデックとその選び方について一部をまとめた.
フォーマットについては別の記事にまとめている
Webで使用する音声/ビデオフォーマットの簡単な説明
ウェブ音声コーデックガイド
- 音声データをencodeとdecodeするための処理はaudio codec(COder/DECoder)で扱われる
- 音声を圧縮・解凍するためにwebで使われるaudio codecsについて説明し,それを選択する際のガイドを提供する
- WebRTC実装は一般にこれらのcodecのサブセットを使用し,追加のcodecもサポートする場合がある
エンコードされたオーディオに影響を与える要素
- encodeされた音声に影響するものは一般的に,ソースaudioのフォーマットと内容の詳細,codec, エンコード中のcodecの設定である
- デジタル音声はデータストリームへ変換するときにサンプルされる精度と粒度によって忠実度が決定されるので,デジタル音声を表現するのに使用するデータが多いほどサンプルされた音声は元の音声に近づく
ソース音声フォーマットがエンコードされた音声出力に与える影響
- channel数
- チャネル数は方向の知覚だけに影響し,品質には影響しない
- 内容とencoder設定によっては各channelがencode後のサイズを増加させる
- ノイズ/ヒス(Hiss)
- 不要なノイズがあると音声品質が直接・間接的に減少する(ノイズは波形を複雑にし,品質を維持したままサイズを低下させるのを困難にする)
- ヒスやstaticノイズ,バックグラウンドノイズは音声の複雑さを増し,圧縮量を低下させる
- サンプルレート
- 毎秒のサンプル数が増えるほどencode後の音声品質は高くなる
- サンプルレートを上げるとファイルサイズが上がる
- サンプルサイズ
- サンプルが大きいほど各サンプルが詳細な情報を含み,各サンプルがより正確な表現になる
- ファイルサイズが増加するかはcodecによる.codecは通常内部サンプルフォーマットを持ち,元のサンプルサイズと同じ場合がある.サンプルの詳細を増やすことはファイルサイズを増加させることがある.減少させることはない
コーデック設定がエンコード後の音声出力に与える影響
各encoderタイプの選択に加えて,特定のアルゴリズムの選択,アルゴリズムの調整,passの適用回数を設定できることもある
- Lossless compression
- fidelityの損失がない
- 40~50%以上の圧縮になることはない
- Lossy compresison
- 圧縮率が高いほどfidelityがなくなる
- 80~95%までの圧縮が可能
- Quality setting
- 品質がたかいほどfidelityが高い
- fidelityが高いほどファイルサイズは大きくなるが,その量はcodecによって異なる
- Bit rate
- bit rateが高いほどクオリティが高くなりうる
- bit rateが高いほどファイルサイズが大きくなりうる
- Audio frequency bandwidth
- 除去されたfrequency bandに音声があれば,認識できるレベルでfidelityが減少する
- frequency bandsを除去するとencodeするデータが減り,ファイルサイズが小さくなる
- Stereo coding
- シンプルなステレオとmid-side stereo codingは品質には影響しない.intensity stereo codingは詳細の欠損が生じる
- joint stereoはエンコード後のファイルサイズをいくらか減少させる
Lossless versus lossy codecs
- audio圧縮にはLosslessとLossyがあり,lossy codecでの圧縮結果はほぼ常にlosslessよりもずっと小さいサイズになる
- lossless codec(FLAC, ALACなど)で圧縮されたaudioは元の音と全く同じ音になる
- lossy codecは人間の耳が完全に音を解釈できるわけではなく,脳が不完全なaudioから重要な情報を抽出できることを利用している.あまり利用されていない周波数を除去し,精度が失われることを許容して圧縮する.
- losslessを選択する理由としてはアーカイブ品質を必要としていたり,ミキシングを行って再圧縮するときにノイズが増幅されるのを避ける等がある
- lossy codecはリアルタイムストリーミング等でネットワークの性能によらず音声の再生にデータ転送が遅れないために必要
最大チャネル数
- モノラルサウンドは1チャネル,ステレオサウンドは2チャネル,5.1サラウンドサウンドは5チャネルと1つのLow Frequency Enhancement (LFE)チャネルがある
- LFEチャネルは低周波数音響データを保持するために設計されたチャネルで,subwoofers(低ピッチ周波数を再現するためのスピーカー)にaudio dataを提供するためによく使用される
- X.Yの形式(2.1, 5.1等)で書かれたチャネル数において,小数点以下のYはLFEチャネルの数を表す.MP3は1つのLFEチャネルをサポートしており,AACは16個までサポート.
- 上記の目的に加えて,codecなかにはチャネルを使って別の言語での歌詞や説明のような代替audioを提供するものもある
Audio frequency bandwidth
- Audio frequency bandwidthはそのコーデックを使って表現可能なaudio周波数の範囲を示す.いくつかのコーデックは所定の周波数外にあるaudioを除去する
- コーデックによって表現される波形で表現できる最大周波数とサンプルレートには相関がある.理論的には,コーデックが表現できる最大周波数はサンプルレートを2で割った値であり,この周波数はナイキスト周波数と呼ばれる.実際には最大値は少し小さいが,近い値である.
- 周波数bandwidthが活躍するのは人間の発話を表現するために設計されたコーデックである
- 人間の発話は300Hzから18kHzの周波数レンジに収まるが,その多くは300Hzから8kHzにあり,500Hzから3kHzしかなくても理解可能である
- そのためスピーチのためのコーデックは一定範囲以外の音を除去するように設計されており,その周波数がaudio frequency bandwidthである.例えばG.722は周波数が50Hzから7kHz以外の音を除去し,エンコードするデータ量を減らしている
コーデックの詳細
AAC(Advanced Audio Coding)
- MPEG-4(H.264)の一部,特に MPEG-4 Part 3 と MPEG-2 Part 7の一部として定義されている
- MP3よりも高忠実度で高圧縮になるように設計されている
- Blu-Ray discs やHDTV, iTunesを含む配信音楽でも使われており人気がある
- AACのプロファイルは高品質サラウンドからスピーチのみ用途の低忠実度のものまで多数存在する
- 特許保護されているのでブラウザ等でサポートされていない場合がある
ALAC (Apple Lossless Audio Codec)
- appleにより開発され当初はclosedだったが,Apacheライセンスで公開された
- それほど広くサポートされていない.macOSやiOSではOSがサポートしているので良い選択肢であるが,それ以外のOSでlossless codecが必要ならFLACが良い選択である
- そもそも,losslessコーデックは広帯域とストレージ容量を必要とするので特定用途以外では良い選択ではない
AMR (Adaptive Multi-Rate)
- 人間の発話を効率的にencodeするために最適化されており,それ以外の用途には適していない(発話に必要な周波数帯だけを捉えているため)
- 1999年に3GPP audio standardでGSM(Global System for Mobile Communications)とUMTS( Universal Mobile Telecommunications System)のために使用され,7.4kbps程度の低品質周波数でencodeするmulti-rate narrowbandアルゴリズムを使用していた
- AMRオーディオは.amrファイルタイプか,または.3gpでカプセル化される
FLAC (Free Lossless Audio Codec)
- Xiph.org Foundationによって公開されたlossless audio codec
- アルゴリズムがaudio用に作られているので一般的な圧縮アルゴリズムよりも良い圧縮性能
G.711 (Pulse Code Modulation of Voice Frequencies)
- 国際電気通信連合(ITU)が発行したG.711仕様は、電話アプリケーションの標準的な音声符号化方式を定義するために1972年に発行された
- 300 から 3400 Hzの周波数をカバーしている
- 電話とボイスメールで広く使用され,public 電話ネットワークで伝送されるaudio codingでは最高品質
- 高忠実度のコーデックではないが,低い計算負荷で高い明瞭度を維持しながら広いボイスレベル(囁きから叫びまで)をサポートする用最適化されている
- G.711は対数圧縮アルゴリズムを使用しており、8ビットのサンプルで14ビットのダイナミックレンジを提供
- 8000 サンプル/秒のサンプリングレートを使用し、64000 bps のビットレートに相当
- G.711にはそれぞれがアルゴリズムの数式を意味するµ-law(北アメリカと日本で一般的)とA-law(それ以外の世界で一般的)の2種類がある
- 両者の変換は容易だが,誤ったアルゴリズムで解凍するとひどい結果になるのでどちらを使用しているかを特定することは重要
- すべての WebRTC solutionsでサポートされている
G.722 (64 kbps (7 kHz) audio coding)
- International Telecommunications Union (ITU)により公開された声を圧縮するため設計されたcodec
- 50Hzから7000Hzの範囲にbandwidthが制限されており,典型的な人間の声はカバーしているが音楽等人間のスピーチでないものには不適
- G.722 audioはAdaptive Differential Pulse Code Modulation (ADPCM)によってencodeされ,各サンプルは絶対値ではなくその前のサンプルとどれくらい異なるかを示す値として表現される
- WebRTCの仕様で義務付けられているaudio codecの一つであり,主にWebRTC接続で使う
MP3 (MPEG-1 Audio Layer III)
- MPEG/MPEG-2 標準で指定されたフォーマットのうち,MPEG-1 Audio Layer III(MP3)は最も広く使用されよく知られている
- MP3 codecは MPEG-1 Part 3 および MPEG-2 Part 3で定義されており,1991年に導入され1992年に最終化された
- MP3フォーマットaudioがMPEGコンテナ内に保存されたとき,そのファイルはMP3ファイルやMP3と呼ばれる
- MPEG-1 MP3 audioはMPEG-2ファイルにおけるMP3 audioよりも高いbit rateとサンプリングレートをサポートしている
- MPEG-1フォーマットMP3は音楽等の複雑なオーディオ,MPEG-2のMP3はスピーチ等のシンプルな音に適している
- MP3の特許保護は終了しているため,ライセンスの懸念なく多くのプロジェクトで良い選択肢となる
Opus
- Xiph.org Foundation によって完全にオープンなaudioフォーマットとして作成され,IETFによりRFC6716として標準化された汎用audio codecであり,スピーチのような単純なものから音楽のような複雑な音まで効率的に扱える
- 複数の圧縮アルゴリズムをサポートしており,同じオーディオファイル内で一つ以上のアルゴリズムを使うこともできる.これはencoderがbit rate, audio bandwidth, アルゴリズム, 等圧縮設定を各フレームで選択できるためである
Vorbis
- Xiph.org Foundationによるオープンなフォーマットであり,モノラル,ステレオ,ポリフォニック,クアドラフォニック,5.1サラウンド,ambisonic,255離散audio チャネルまで広い範囲のチャネルの組み合わせをサポートする
- エンコーディング中の品質設定により,結果のbit rateは45 kbps から500 kbpsまで変化する
- 可変ビットレートencodingを使用する(圧縮工程中に必要なときに一つのサンプルが次のサンプルと異なるbit rateを使用する)
- Vorbisは同等レベルの品質のMP3に比べてbit rateやサイズが効率的であり,レイテンシーが高いことが問題にならなければ良い選択肢である
オーディオコーデックの選択
codecを選ぶ時考えるべきこと
- リミックスや再圧縮を行う予定があるか?もしあるなら非可逆圧縮は避けるか,少なくともできるだけ圧縮を少なくする
- 特定のファイルタイプにする必要があるか?メディアコンテナは通常,特定のcodecのみサポートする
- codecが扱うaudioの内容はどのようなものか?codecのなかには人間の声に必要な周波数だけに絞るものがある
- 各codecのbit rateや設定可能なプロパティにはどのようなものがあるか?
- レイテンシー(遅延)はどれくらい許容されるか?音のタイミングが正確である必要があるならレイテンシーが低い物が良い
- どれくらい圧縮する必要があるか?
例: ストリーミング音楽
- 圧縮時に発生するアーティファクトを最小にしながらbandwidthを最小にできるcodecを選択したい
- 音楽をダウンロードするときのbandwidthがネットワークで利用可能なbandwitdhより小さくなければならなず,他のアプリケーションによるネットワークの利用とネットワークのスピード変化に対応できる余地も残すべき
- lossless圧縮が必要,またはbandwidthがそれをサポートするのに十分,等の条件がなければlossy圧縮が良い.ブラウザの互換性やcodecがサポートする必要がある特徴で選ぶ
- レイテンシーはループが必要な音楽等を除けばそれほど重要ではない
- レイテンシーを最小化したいなら,Opusが第一候補となる.他のcodecが最低でも100msであるのに対して5msから66.5msという低いレイテンシー範囲を持つ
- 通常の音楽再生ではMP3, AAC, Vorbisが候補になりやすい.もし一つだけ選ぶならAAC
例: ダウンロード用音楽
- ダウンロード速度がストリーミング速度より速くなければならないストリーミング用途とは異なり,圧縮後のサイズがストリーミング用よりも大きくても構わない.lossy 圧縮でビットレートを高くしたりlosslessフォーマットを選択する余地がある
- 音楽ダウンロードサービスでは128Kbps MP3,256kbps AAC(MP4コンテナ),FLACファイルが候補になる
- 最も普及しているのはMP3であり,bitrateは最低でも192kbpsにする.(iTunesストアは256kbps AACで提供している)
例: 声の録音と再生
- 人間の聞こえる周波数は20Hzから20,000Hzであり,話す声は300Hzから18,000Hzであり,何を言っているかを理解するために必要な周波数は500Hzから3,000Hzであるため,スピーチ用codecはそれらに必要でないものを除去することで汎用codecよりよく圧縮できる
- スピーチ用codecは非常にlossyであるため,歌を含めた発話以外の目的には全く適していない
- スピーチ用codecはストレージスペースが効率的でありレイテンシーも非常に低い.WebRTCを使うならG.722はレイテンシーが4ms(MP3は100ms),AMRはレイテンシーが25ms程度.これらは声のみのencodingでよく使用される
- AMRはnarrowband codecであり,通常は7.4kbps程度のbitrateで200Hzから3,400Hzの周波数だけをエンコードする
- G.722はwideband codecで,50Hzから7,000Hzの範囲を64kbpsでエンコードする
例: プロフェッショナルmixingのためのaudio clip
- losslessが望ましいが,losslessは圧縮レベルが低いため,特にdownload rateを制御できないweb環境ではlossy encoderを選ぶ必要があることもある
- lossless圧縮ならFLAC, APple Lossless(ALAC), MPEG-4 ALSが候補となる.ブラウザの対応状況を考慮して決める
オーディオエンコーディングソフトウェア
- FFmpeg
- 最もよく知られたオープンソースコーデックパッケージ.主要なaudio formatsをサポートし,audioとvideoのencoding, decoding, フォーマット変換のライブラリとコマンドラインを提供している.macOS, Linux, Windowsで利用可能なバイナリがある
- Handbrake
- オープンソースで人気のあるFFmpegのフロントエンド.video/audioのエンコーディング時にFFmpegのオプションを制御するためのGUIを持つ.macOS, Linux, Windowsで利用可能なバイナリがある
- Audacity
- audioを読み込み,編集,フィルタ,調節,色々なフォーマットで保存できるオープンソースaudioエディター.macOS, Linux, Windowsで利用できる
- LAME
- CBR, ABR, VBR encodingやその他のオプションをサポートする高品質なオープンソースのMP3 encoder.LAMEプロジェクトによってソース形式でのみ配布されているが,Homebrewのようなツールでインストールできる
Discussion