
FFmpegには代表的なAACエンコーダとして 「libfdk_aac」「Native AAC」「aac_at」 の3種類があります。
これまで当ブログでは「libfdk_aac」と「Native AAC」をハイレゾピュア音源(24bit)で評価してきましたが、今回は AppleのAudio Toolbox frameworkを利用する「aac_at」エンコーダ にフォーカスします。
FFmpeg公式のAAC FAQによれば、AAC-LCの音質においては aac_at ≥ libfdk_aac > Native AAC と位置付けられており、最上位クラスの品質を誇るとされています。
そこで、macOS限定となりますが、ハイレゾピュア音源(24bit/192kHz)をaac_at エンコーダでAACに変換し、歪率・周波数特性・劣化量を測定したうえで、他のエンコーダとの比較評価を行いました。
aac_atを使ったAAC変換コマンドライン(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/192kHz)での歪率測定(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
カットオフ周波数の確認(高域特性の比較)
以前紹介した、「スィープ音源で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
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以上のレベルで、劣化量はBest。
以上から、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)


