広告 MP3、AAC音質関連

FFmpegの中で最上位品質に位置すると言われるAACエンコーダ「aac_at 」を音質評価してみました。

スポンサーリンク

 

画像:FFmpeg

FFmpegの代表的なAACエンコーダは「 libfdk_aac」「 Native FFmpeg AAC」「aac_at」の3種類です。  今まで 「 libfdk_aac」「 Native FFmpeg AAC」をハイレゾピュア音源(24bit)で評価して来ましたが、今回は「aac_at」AACエンコーダにフォーカスします。

このaac_atエンコーダは、FFmpeg公式のAACページの中にあるFAQを見ると、下に示す様に「aac_at」は「 libfdk_aac」「 Native FFmpeg AAC」よりも音質的に最上位に位置しています。 (「aac_at 」の at は、"Audio Toolbox framework"の略称)

Which encoder provides the best quality?
For AAC-LC: aac_atlibfdk_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の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"

 

ハイレゾ(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変換
    前記コマンドラインの(libefdk_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とlibefdk_aac エンコーダの値が略同じ値を示しました。 一方のNativeAACは、2桁以上の低歪率です。 この結果から、aac_atとlibefdk_aac エンコーダは、16bit入力でエンコードされていると考えられます。(NativeAACは24bit入力)

残念がら、aac_atは、libefdk_aac エンコーダと同様に24bit音源をAACに変換すると16bitにダウングレードされるので、NativeAACに比べ歪率的に不利と言えます。

歪率 順位:
NativeAAC > aac_at = libefdk_aac

 

ハイレゾ(fs=192khz)音源をaac_at エンコーダで変換した時の上限周波数(Cut-Off)の確認

以前紹介した、「スィープ音源で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 > libefdk_aac

 

aac_at エンコーダの劣化量(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.21db 0.77db
max 0.08db 0.36db
min -0.22db -0.73db
レンジ
0.30db 1.09db
file size(KB) 205  103 

 

point
2
エンコーダの劣化量:3σレンジ(比較)

統計データ aac_at
libefdk_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.21db 0.77db 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 ≥ libefdk_aac > NativeAAC

 

aac_at のハイレゾピュアー音源による音質の総合評価(マトメ)

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

 

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

 

スポンサーリンク

 

スポンサーリンク

 

t