FFmpegの代表的なAACエンコーダは libfdk_aac NativeAAC aac_at の3種類です。 これまで 「 libfdk_aac」「 NativeAAC」をハイレゾピュア音源(24bit)で評価して来ましたが、今回は aac_at AACエンコーダにフォーカスします。
このaac_atエンコーダは、FFmpeg公式のAACページの中にあるFAQを見ると、下に示す様に「aac_at」は「 libfdk_aac」「 Native FFmpeg AAC」よりも音質的に最上位に位置しています。 (「aac_at 」の at は、"Audio Toolbox framework"の略称)
For AAC-LC: aac_at ≥ libfdk_aac > Native FFmpeg AAC encoder (aac).
そこで、macOSに限定(注1)されますが、FFmpegの aac_at エンコーダをハイレゾピュアー音源(24bit)でAAC音源に変換した時、どの程度の音質か?他のエンコーダと比較評価してみました。
(注1) 「aac_at 」エンコーダは、AACエンコーダーである「aac_at」は、Appleのオーディオツールボックスフレームワーク(Audio Toolbox framework)に依存しており、このフレームワークはAppleの製品でのみ利用可能です。
AAC変換で使用したFFmpegの aac_at コマンドライン(CLI)
aac_atのCLIffmpeg -i "変換元ファイル.wav" -acodec aac_at -c:v copy -ar 48000 -ab 320k "変換後のファイル名.m4a"
このコマンドラインのピンク文字がオプションを示し、サンプルレート48khz、ビットレート320kbps(CBR)でAACに変換されます。 macOSでは、ターミナルを起動し、このCLIを実行すればAACファイルが出力されます。
オプション説明
- -i
入力を示すオプションです。 変換元のファイルはwav,flac 等に対応しています。 - -acodec aac_at
aac_at エンコーダを指定しています。 - -c:v copy (又は -vn)
-c:v copyは、ビデオストリームをコピーします。変換元のアートワーク画像をコピーします。
-vnの場合は、オーディオを指定します。(-vnを指定しないとエラーになりAAC変換できない場合があります) - -ar 48000
-ar がサンプルレートのオプションで周波数を指定します。 48000でサンプリング周波数が48khzになります。 - -ab 320k
-ab がビットレートのオプションでbpsを指定します。 320kでビットレートが320kbps(CBR)になります。
比較するFFmpeg AAC エンコーダCLI
libfdk_aacのCLIffmpeg -i "変換元ファイル.wav" -acodec libfdk_aac -vn -ar 48000 -ab 320k -cutoff 20000 "変換後のファイル名.m4a"
Native FFmpeg AACのCLIffmpeg -i "変換元ファイル.wav" -aac_coder twoloop -vn -ar 48000 -ab 320k "変換後のファイル名.m4a"
補 足
一々、ターミナルを介してコマンドラインを実行する作業は面倒です。 そこで、Macのショートカットアプリでコマンドラインを組込んだショートカットを作成しておけば変換作業の効率化が図れます。 下の記事で複数の音声ファイルを一括変換するショートカットを紹介しています。 ショートカット化することをオススメします。
-
MacのショートカットアプリでFFmpegによるAACやMP3への変換作業を自動化する
例えば、FFmpegのAAC及びMP3用エンコーダは多数ありその特徴に合わせて一々、ターミナルを介してコマンドラインを実行しなければならず、変換作業が面倒です。 そこで、Macのショートカットアプリで ...
ハイレゾ(24bit)音源をaac_at エンコーダで変換した時の歪率(sin 1khz -20db)
AACエンコーダの音質指標の一つとして、sin 1khz 信号ファイル(24bit)をAACエンコーダに通すと「歪率」がどの程度悪化するか?を調べます。
歪率測定の手順
- sin 1khz音源ファイルの作成
歪率確認用として、sin 1khz -20db wav(24bit 192khz)ファイルをWindowsソフトのWaveGeneの加算モードで5秒間生成した音源ファイルを作成(歪率:THD+N = 0.00006%) - sin 1khz 音源ファイルをAAC変換
前記コマンドラインの(libfdk_aacとNativeAAC)でAAC変換してm4aファイルを出力 - m4aファイルをWavファイルに変換
WaveSpectraを使うにはm4aファイルをwavフォーマットに変換する必要があります。 Apple Digital Mastersドロップレットツールに含まれているデコード確認用ツール(Audio to WAVE 48K Droplet.app)で、夫々のm4aファイルをツールにドロップしてサンプルレート48khzのWAVファイルに変換 - WaveSpectraでスペクトル描画と歪率測定
夫々の48khzのWAVファイルをWindowsソフトのWaveSpectraにドロップしてスペクトルと歪率(THD,THD+N)を測定
(備考)WindowsソフトのWaveGeneとWaveSpectraは、macOS上のWineで動作させています。(詳しくは、ここをクリック)
point
1 aac_at エンコーダのsin 1khz -20db スペクトルと歪率
point
2 エンコーダの1khz sin 歪率(比較)
エンコーダ | THD | THD+N |
aac_at | 0.00070% | 0.02381% |
libfdk_aac | 0.00084% | 0.02107% |
NativeAAC | 0.00003% | 0.00056% |
ポイント
上の歪率比較(表)で、aac_atとlibfdk_aac エンコーダの値が略同じ値を示しました。 一方のNativeAACは、2桁以上の低歪率です。 この結果から、aac_atとlibfdk_aac エンコーダは、16bit入力でエンコードされていると考えられます。(NativeAACは24bit入力)
残念がら、aac_atは、libfdk_aac エンコーダと同様に24bit音源をAACに変換すると16bitにダウングレードされるので、NativeAACに比べ歪率的に不利と言えます。
NativeAAC > aac_at = libfdk_aac
ハイレゾ(fs=192khz)音源をaac_at エンコーダで変換した時の上限周波数(Cut-Off)の確認
以前紹介した、「スィープ音源でAAC(MP3)の再生・高域部分の周波数特性を綺麗にグラフ化する方法」でfs=192khz評価Sweep音源を使ってaac_at エンコーダの周波数特性から、3dbダウンする点の上限周波数(Cut-Off)を確認します。
point
1 aac_at エンコーダの周波数特性と上限周波数
bitレートを、320kbpsと160kbpsで確認
point
2 エンコーダの上限周波数(比較)
エンコーダ | 320kbps(Cut-Off) | 160kbps(Cut-Off) |
aac_at | 22.5khz | 18khz |
libfdk_aac | 20.0khz | 20khz(*1) |
NativeAAC | 22.4khz | 18khz |
(*1):libfdk_aacのCLIオプションを-cutoff 20000 で指定しているので、160kbpsでも20khzでCutされる。
ポイント
上の歪率比較(表)で、aac_atとNativeAAC エンコーダの値が略同じ値を示しました。 また、320kbpsでは、CDの上限周波数(22.05khz)を超えています。
aac_at = NativeAAC > libfdk_aac
aac_at エンコーダの劣化量(Pink-noise)
以前紹介した、「Pink-noiseでAACのビットレートと再生帯域内の劣化量の関係を調べてみました。」の方法でaac_at エンコーダの劣化量を確認します。
point
1 aac_at エンコーダの劣化量(周波数分析)
統計データ | 320kbps | 160kbps |
統計データ範囲 | 0hz〜20khz | 0hz〜16khz |
x(平均) | 0.03db | -0.12db |
σ(stdevp) | 0.10db | 0.13db |
x+3σ | 0.06db | 0.27db |
x-3σ | -0.06db | -0.27db |
劣化量(2*3σ) | 0.13db | 0.53db |
max | 0.08db | 0.36db |
min | -0.22db | -0.73db |
レンジ | 0.30db | 1.09db |
file size(KB) | 205 | 103 |
point
2 エンコーダの劣化量:3σレンジ(比較)
統計データ | aac_at | libfdk_aac | NativeAAC | |||
320kbps | 160kbps | 320kbps | 160kbps | 320kbps | 160kbps | |
統計データ範囲 | 0hz〜20khz | 0hz〜16khz | 0hz〜19khz | 0hz〜19khz | 0hz〜20khz | 0hz〜16khz |
x(平均) | 0.03db | -0.12db | -0.07db | -0.16db | -0.15db | -0.33db |
σ(stdevp) | 0.10db | 0.13db | 0.04db | 0.14db | 0.10db | 0.49db |
x+3σ | 0.06db | 0.27db | 0.06db | 0.25db | 0.14db | 1.15db |
x-3σ | -0.06db | -0.27db | -0.20db | -0.57db | -0.44db | -1.80db |
3σレンジ(2*3σ) | 0.13db | 0.53db | 0.26db | 0.83db | 0.59db | 2.95db |
max | 0.08db | 0.36db | 0.07db | 0.38db | 0.23db | 1.09db |
min | -0.22db | -0.73db | -0.24db | -0.79db | -0.59db | -4.12db |
レンジ | 0.30db | 1.09db | 0.31db | 1.17db | 0.81db | 5.21db |
file size(KB) | 205KB | 103KB | 203.9KB | 102.8KB | 158.3KB | 102.1KB |
ビットレート種別 | CBR | CBR | CBR | CBR | VBR | VBR |
ポイント
以上の表から劣化量は、僅かながら、aac_at エンコーダが勝っていました。
aac_at > libfdk_aac > NativeAAC
aac_at のハイレゾピュアー音源による音質の総合評価(マトメ)
- 歪率:ハイビット深度音源のAAC変換は、16bit入力のため、歪率的にNativeAAC(24bit入力)より劣る。
- 上限周波数:320kbpsでNativeAACと同等の22.5khz。 CDの上限周波数(22.05khz)を上回る。
- 劣化量:libfdk_aac以上のレベルで、劣化量は良好。
以上から、macOSの場合、16bit音源をAAC変換するならaac_atエンコーダを使うことがベストチョイスと思われます。
16bitのリアル音源をAAC変換したサウンドを聴く ♬
16bit音源をAAC変換するならaac_atエンコーダと言うことから、CDをリッピングした16bit Flacファイル音源をAAC変換してみました。 夫々のAACエンコーダのサウンドを聴いてみてください。
オリジナル16bit音源
1959年録音のカラヤンとベルリン・フィルが演奏した「ドヴォルザークのスラヴ舞曲第1番ハ長調 Op.46-1」CD音源(=リッピングしたFlac 16bit 44.1khzファイル)です。
オリジナル音源(Flac 16bit 44.1khz )20.2MB
320kbpsでAAC変換
aac_atエンコーダ(8.6MB)
libfdk_aacエンコーダ(8.6MB)
NativeAACエンコーダ(8.3MB)
160kbpsでAAC変換
aac_atエンコーダ(4.3MB)
libfdk_aacエンコーダ(4.3MB)
NativeAACエンコーダ(4.3MB)