前回記事で、「らじる★らじる・聴き逃し番組」のストリーミング放送は、HE-AAC・48kbpsで配信されていることが判りました。 HE-AACは High-Efficiency Advanced Audio Coding(高効率アドバンスAACコーディング)の略です。
HE-AACはBSR(Spectral Band Replication)技術で「低ビットレートでも欠落する高域を補完(復元)して音質を維持させる」というものです。 今回は、このBSR(Spectral Band Replication)技術がどの程度、高域を補完(復元)しているか?ピュアー音源を使って調べてみました。 前回記事の続編という位置づけです。
低ビットレートでAAC変換したらどうなるか?
例えば、通常のAAC-LCコーディックの場合、低ビットレートでエンコードすると、再生できる上限周波数はどうなるでしようか?
FFmpeg AAC-LC変換コマンドライン
1 2 |
ffmpeg -i "pink-noise.wav" -acodec libfdk_aac -vn -ar 44100 -ab 48k "AAC-LC_output.m4a" |
実際に上のコマンドラインで、pink-noiseを低ビットレートの48kbpsでAAC変換した時のスペクトルは下の様に9.5khz付近でcut-off(上限)されてしまいます。
この再生帯域ですと、話し声などは問題無いにしても、多くの周波数成分を有する楽曲等では、物足りなさを感じるのは目に見えます。 48kbpsでエンコードしたリアル音源を聴いて見てください。
AAC-LC 48kbps リアル音源
「ドヴォルザークのスラヴ舞曲第1番」
BSR(Spectral Band Replication) について
そこで、登場するのがBSR技術を組み入れたHE-AACになります。 HE-AACはv1 と v2 がありますが、「らじる★らじる・聴き逃し番組」のストリーミング放送は v1 と思われますので、今回の記事は v1 でフォーカスすることにします。
HE-AAC のWikipediaでは、「 SBR技術をAACに組み込むことにより、再生帯域を拡大して主に低ビットレート(128kbps以下[1])での周波数特性(圧縮効率)を大幅に向上させている。」 またSBRのWikipediaによると、「ほとんどの情報が含まれる低い周波数の情報を従来の方式で符号化し、高い周波数の情報は大まかなスペクトル情報のみを符号化して、復号時に低い周波数の情報から予測復元する。」と説明されています。
つまり、HE-AACを自分なりに解釈しますと、高域を維持しつつ、低ビットレートを実現させるために、SBRによって低ビットレートで欠損する高域を補完(復元)させる技術と解釈しました。 懸念されるのは、SBRによって大なり小なり高域補完部分に誤差が含まれることが想定されます。
FFmpeg HE-AAC v1コマンドライン
1 2 |
ffmpeg -i "pink-noise.wav" -c:a libfdk_aac -profile:a aac_he -b:a 48k "HE-AAC_v1_output.m4a" |
HE-AAC v1(BSR)の絶対誤差を調べる
絶対誤差を調べる方法は、Pink-noise音源とHE-AAC v1でエンコードされたファイルをAudacityに取り込み、夫々の音源の周波数解析(スペクトル)を実行します。 Audacityの周波数解析は、周波数とレベルのtextデータが書き出せるので、NumbersやExcelなどの表計算ソフトでtextデータを開き、周波数に対するHE-AAC v1レベルからPink-noise音源レベルを引き算を行えば、その値が周波数に対する絶対誤差になります。 数式で表せば、
絶対誤差=測定値ー真値=【HE-AAC v1レベル】ー【Pink-noise音源レベル】
周波数を横軸に絶対誤差を縦軸にしたグラフを下に示します。 なお、下のグラフは、参考までにAAC-LC(256kbps)でエンコードした場合も示しています。
このグラフから、8khzから17khzにおいて、絶対誤差が大きくなっています。 このエリアがBSRによって、復元(補完)部分であると言えます。 Pink-noise音源から乖離している絶対誤差の幅は約8dbに及んでいることが分かりました。
比較するリアル音源、
1959年録音のカラヤンとベルリン・フィルが演奏した「ドヴォルザークのスラヴ舞曲第1番ハ長調 Op.46-1」CD音源(=リッピングしたFlac 16bit 44.1khzファイル)と、HE-AAC v1でエンコードしたファイルで音質比較します。
Flac(16bit 44.1khz)音源(CDからリッピング)
HE-AAC v1 (48kbps)の音源
試聴した結果は如何だったでしょうか? 前回記事で述べた様に、絶対誤差が8dbあったとしても、iPhone SE2の純正イヤホーンで聴く分には特段の差異は感じられませんでした。
そこで、ピュアー音源を使ってSBRの復元性がどの程度のものか?を検証してみることにしました。
ピュアー音源でSBRの復元性を検証してみる
下の2つのピュアー音源(赤字)をHE-AAC v1 に変換した時、SBR領域の復元性を実験してみました。 なお、ピュアー音源はWaveGeneで作成しました。
- SBR領域・内周波数に含まれる-20db 10khz正弦波をHE-AAC v1に変換し10khzの復元性を見る
- -10db 2.5khzノコギリ波をHE-AAC v1に変換しSBR領域内の倍音の復元性を見る
① 10khz正弦波・復元性の確認
コマンドライン
12ffmpeg -i "10khz正弦波.wav" -c:a libfdk_aac -profile:a aac_he -b:a 48k "HE-AAC_v1_output.m4a"sin 10khzの復元・波形
HE-AAC v1 の10khz ファイルをAudacityに取り込み波形を確認すると、下の様にうねりのあるエンベロープが見られます。 なお、波形を滑らかにするため、トラックを192khzでリサンプリングしています。sin 10khzの復元・スペクトル
sin 10khz の音源を48kbpsのHE-AACでエンコードすると、SBRによって、元のsin 10khz のスペクトル(ブルー)より若干スペクトルがブロード(ブラウン)ながら復元されています。 なお、VLCプレヤーで音源ファイルを再生 仮想オーディオドライバーのBlack-Hole経由でWaveSpectraでスペクトルを描画しています。
② 2.5khzノコギリ波の復元性確認
コマンドライン
12ffmpeg -i "2.5khzノコギリ波.wav" -c:a libfdk_aac -profile:a aac_he -b:a 48k "HE-AAC_v1_output.m4a"2.5khz ノコギリ波の復元・波形
HE-AAC v1 の2.5khz ノコギリ波ファイルをAudacityに取り込み波形を確認すると、どうにかノコギリ波状が再現されている。 なお、波形を滑らかにするため、トラックを192khzでリサンプリングしています。2.5khz ノコギリ波の倍音・スペクトル
2.5khz ノコギリ波の音源を48kbpsのHE-AACでエンコードすると、下のスペクトルで示す様に、BSR領域内で倍音ピークは復元はされているものの、本来倍音成分があるべきところのピークが若干ズレています。 なお、VLCプレヤーで音源ファイルを再生 仮想オーディオドライバーのBlack-Hole経由でWaveSpectraでスペクトルを描画しています。
マトメ
ピュアー音源でSBRの復元性を検証したところ、基準ピュアー音源との差異はあるも、マクロで見ればSBR技術によって低ビットレートであっても高域部分の復元(補完)が行われていることが分かりました。
この結果は、前回記事のリアル音源の試聴で、『「iPhone SE2 純正イヤフォンで試聴」の場合、特段の違和感は感じられなかったが、「我が家のB級オーディオで試聴」の場合は、奥行き感と解像度感に差異が感じられた。』との結果と符合する様に思われました。
低ビットレトー(48kbps)であっても、少なくもスマホのイヤホンで楽曲を聴く分には、HE-AAC v1 はSBR技術によって十分実用になるコーディックでは無いかと思われました。
以上、HE-AAC v1 のBSR技術をピュアー音源でテストした結果報告でした。