広告 MP3、AAC音質関連

FFmpegのAACエンコーダ『aac_at』を徹底検証 ― 音質評価と他エンコーダ比較

画像:FFmpeg

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のCLI
ffmpeg -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のCLI
ffmpeg -i "変換元ファイル.wav" -acodec libfdk_aac -vn -ar 48000 -ab 320k -cutoff 20000 "変換後のファイル名.m4a"
 Native FFmpeg AACのCLI
ffmpeg -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 スペクトルと歪率

画像:aac_atの1khz 歪率

歪率は、THDとTHD+Nで示され、スペクトル画面の枠内に表示されています。 THDは全高調波歪の割合でTHD+Nは、ノイズを加えた基本波成分の比(%)です。

 

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で確認

画像:aac_at_encoder_F特

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 エンコーダの劣化量(周波数分析)

画像: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 の総合評価(マトメ)

  1. 歪率:ハイビット深度音源のAAC変換は、16bit入力のため、歪率的にNativeAAC(24bit入力)より劣る。
  2. 上限周波数:320kbpsでNativeAACと同等の22.5khz。 CDの上限周波数(22.05khz)を上回る。
  3. 劣化量: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ファイル)です。

 

以上FFmpeg「aac_at 」エンコーダをハイレゾピュアー音源(24bit)で音質評価の結果でした。

 

スポンサーリンク