高品質でAAC変換できると言われるFFmpeg libfdk_aacエンコーダをハイレゾピュアー音源(24bit)で音質評価してみました。

スポンサーリンク

 

AAC encoder library: libfdk_aac 

 

libfdk_aac  エンコーダは、FFmpegのAACページのFAQで「NativeAAC エンコーダよりも、libfdk_aac エンコーダが最高品質を提供するエンコーダーである」と述べられていますし、又ネットでも評価の高い投稿が見受けられます。 そこで、ハイレゾピュアー音源ファイル(24bit)を用いて「libfdk_aac エンコーダ」と「NativeAAC エンコーダ」で夫々をAAC変換した時の音質(歪率とcutoff周波数)比較を行ってみました。

結論から言いますと、libfdk_aac エンコーダが16bit入力でエンコードされるのでハイレゾ音源(24bit)をAAC変換した場合、「歪率」が悪化してしまうことが分かりました。(一方のNativeAAC エンコーダは歪率面から非常に良好で、24bit入力でエンコードを行っていると言えます。)

libfdk_aac は、CD音源(16bit)を低ビットレートでAAC変換するのに適しているのかも知れません。 以下、FFmpegとlibfdk_aac ライブラリーを含めたインストールから libfdk_aacエンコーダの評価までの紹介です。

 

libefdk_aac エンコーダ付きで FFmpegをインストールする

libefdk_aac ライブラリ付きでFFmpegをインストールするには、Homebrew を経由する必要があります。 HomebrewがmacOS にインストールされていない方は、以下をクリックしてHomebrewをインストールします。

FFmpegインストール(手順)

ターミナルを開き、下の様にコマンドラインを入力してリターンしてインストールを開始します。 多少時間はかかりますが自動的にインストールされます。

 ターミナル
brew tap homebrew-ffmpeg/ffmpeg brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-fdk-aac

FFmpegインストール完了 後の確認

ターミナルで、下の様に-hオプションで help が表示されることを確認します。

 ターミナル
ffmpeg -h(⏎) ffmpeg version 5.1 Copyright (c) 2000-2022 the FFmpeg developers built with Apple clang version 13.1.6 (clang-1316.0.21.2.5) configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/5.1-with-options_1 --enable-shared --cc=clang --host-cflags= --host-ldflags= --enable-gpl --enable-libaom --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-libsnappy --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-demuxer=dash --enable-opencl --enable-audiotoolbox --enable-videotoolbox --enable-neon --disable-htmlpages --enable-libfdk-aac --enable-nonfree libavutil 57. 28.100 / 57. 28.100 //中略 -canvas_size size set canvas size (WxH or abbreviation) -spre preset set the subtitle options to the indicated preset

 

AAC変換のFFmpegコマンドライン

libefdk_aac エンコーダの場合

ターミナルで、下のコマンドラインを入力します。

 ターミナル
ffmpeg -i "変換元ファイル.wav" -acodec libfdk_aac -vn -ar 48000 -ab 320k -cutoff 20000 "変換後のファイル名.m4a"

このコマンドラインのピンク文字がオプションを示し、サンプルレート48khz、ビットレート320kbps(CBR)、カットオフ20khzでAAC変換されます。

オプション説明

  • -i 
    入力を示すオプションです。 変換元のファイルはwav,flac 等に対応しています。
  • -acodec libfdk_aac
    libfdk_aacエンコーダを指定しています。
  • -vn
    -vnは、オーディオを指定します。(-vnを指定しないとエラーになりAAC変換できない場合があります)
  • -ar 48000
    -ar がサンプルレートのオプションで周波数を指定します。 48000が指定サンプリング周波数48khzになります。
  • -ab 320k 
    -ab がビットレートのオプションでbpsを指定します。 320kが指定ビットレート320kbps(CBR)になります。
  • -cutoff 20000
    libfdk_aacエンコーダの場合cutoff を指定しないと、17khzでハイカットされます。 cutoffは最大で20khz迄のため20000 を指定しています、 CDフォーマットのナイキスト周波数より低いです。

 

NativeAACエンコーダの場合

 ターミナル
ffmpeg -i "変換元ファイル.wav"  -aac_coder twoloop -vn -ar 48000 -ab 320k "変換後のファイル名.m4a"

このコマンドラインで、サンプルレート48khz、ビットレート320kbps(VBR)でAAC変換されます。

オプション説明

  • -i 
    入力を示すオプションです。 変換元のファイルはwav,flac 等に対応しています。
  • -aac_coder twoloop
    このオプションは、https://qiita.comの「FFmpegでよく使う例、コーデックをまとめてみた」の記事を参考にさせて頂きました。
  • -vn
    -vnは、オーディオを指定します。(-vnを指定しないとエラーになりAAC変換できない場合があります)
  • -ar 48000
    -ar がサンプルレートのオプションで周波数を指定します。 48000が指定サンプリング周波数48khzになります。
  • -ab 320k 
    -ab がビットレートのオプションでbpsを指定します。 320kが指定ビットレート320kbpsになります。 ファイルサイズの制約上の理由からなのか?不明ですが160kbpsを境に、それ以下でCBRモード、それ以上でVBRモードになります。

NativeAACエンコーダは、過去記事で紹介しています。 詳しくは、ここをクリックして参照してください。

 

AACエンコーダの歪率(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で動作させています。(詳しくは、ここをクリック

libefdk_aac エンコーダの歪率

THD:0.00084%
THD+N:0.02107%

NativeAACエンコーダの歪率

THD:0.00003%
THD+N:0.00056%

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

ポイント

スペクトルを見ると、libefdk_aac エンコーダは、NativeAACエンコーダに比べてノイズが多く含まれていることが分かります。 歪率の側面で見ると、libefdk_aac エンコーダによるAAC変換は、CDフォーマットの歪率に近似しており、16bit入力でエンコードされていると考えられます。 (下のメモからも、libefdk_aacの入力仕様は16bitになっていることが確認できます。)

Fraunhofer FDK AACのページによれば、「Sample Format」の節に
”The FDK library is based on fixed-point math and only supports 16-bit integer PCM input.”
(DeepL訳:FDK libraryは、固定小数点演算をベースとしており、16ビット整数のPCM入力のみをサポートしています。)

一方、NativeAACエンコーダによるAAC変換は、歪率面から非常に良好で、24bit入力でエンコードを行っていると言えます。

参考テスト

sin 1khz音源ファイルをCDフォーマット(16bit , fs=44.1khz)にした場合の歪率を調べてみました。 (WaveSpectra条件:Hanning size=16384)

libfdk_aac NativeAAC CD File(org)
THD 0.00091% 0.00032% 0.00032%
THD+N 0.02427% 0.01720% 0.01750%

以上の歪率結果から見ると、NativeAAC は CD File(org) と同等の歪率で、libfdk_aac が僅かですが 歪率が悪化しています。

 

AACエンコーダのcut-off 周波数

AACエンコーダの音質指標の一つとして、pink noise 信号ファイル(fs=192khz)をAACエンコーダに通すと上限再生周波数(cut-off)がどの程度低下するか?を調べます。(上記コマンドラインで指定したオプションで評価します)

cut-off 周波数・測定の手順

  • pink noise音源ファイルの作成
    cut-off 周波数確認用として、pink noise -20db wav(24bit 192khz)ファイルをWindowsソフトのWaveGeneの加算モードで5秒間生成した音源ファイルを作成
  • pink noise音源ファイルをAAC変換
    前記コマンドラインの libefdk_aacとNativeAAC オプションでAAC変換してm4aファイルを出力
  • m4aファイルをWavファイルに変換
    WaveSpectraを使うにはm4aファイルをwavフォーマットに変換する必要があります。 Apple Digital Mastersドロップレットツールに含まれているデコード確認用ツール(Audio to WAVE 96K Droplet.app)で、夫々のm4aファイルをツールにドロップしてサンプルレート96khzにアップコンバートしたWAVファイルに変換
    (スペクトルの横軸を48khzする目的で96khzにアップコンバートしています)
  • WaveSpectraでスペクトル描画
    夫々の96khzのWAVファイルをWindowsソフトのWaveSpectraにドロップしてスペクトルを描画して、cut-off周波数を測定

libefdk_aac エンコーダのCut-off

Cut-off周波数:20khz

NativeAACエンコーダのCut-off

Cut-off周波数:23.6khz

ポイント

libefdk_aac エンコーダによるAAC変換は、cutoffオプションで20khzに規定しているので当然ながら20khzでハイカットされています。 ただ、cutoffオプションは、20khz以上にするとエラーになりますし、cutoffオプションを無記載にすると、320kbpsであっても、17khzでハイカットされてしまいます。

一方、NativeAACエンコーダによるAAC変換は、Cut-off周波数が23.6khzですので、少なくもCDのナイキスト周波数(44.1khz/2=22.05khz)を超えています。cutoffオプションを使っていないことに注目してください)

 

ハイレゾリアル音源からAAC変換した音源( 試聴)とマトメ

夫々のエンコーダでAAC変換した音源

オリジナル・ハイレゾFlac音源

Flac Down load

192Khz 24bit
337MiB 8分50秒

このFlacファイルは、1962年録音盤のBeethoven 第9の2楽章のレコードからデジタイズしたものです。

試聴ポイント

Sony HAP-Z1ES HDDオーディオプレーヤに夫々の3つの音源ファイルを転送して、「我が家のB級オーディオ」で確認してみました。

何分、駄耳のため正しい評価になっているか自信がありませんが、ストリングスの音をフォーカスして試聴したところ、NativeAACエンコーダがオリジナルのFlac音源のサウンドに近い様に感じました。(プラセボ効果か?も知れません)

大きく見れば、夫々3つの音源は、甲乙つけ難く殆どその音質差は感じられませんでした。

HDDオーディオプレーヤー
HAP-Z1ES

「HAP-Z1ESについて」の記事は
ここをクリック

libfdk_aac エンコーダのマトメ

ハイレゾピュアー音源(24bit)による音質評価を通して、ハイレゾ音源をAAC変換するなら、NativeAACエンコーダの方に軍配が上がる結果でした。

今回分かったのは、libfdk_aac エンコーダは、16bit入力でエンコードされることです。 これでは、折角のハイレゾ音源(24bit)が16bit入力でエンコードされ音質面で不利になることは目に見えます。 ハイレゾ音源をAACにエンコードするなら、libfdk_aacエンコーダを避けて、24bitで入力されるNativeAACエンコーダを選択するのがベターと思われました。

今後、libfdk_aac エンコーダが24bit入力対応になることを期待します。

 

以上、ハイレゾピュアー音源(24bit)を使った libefdk_aac エンコーダの紹介でした。 実のところ、FFmpegは使いこなしの面でも多岐にわたって正しくオプション設定がされているか不安な面もあり、この記事中で誤りなどがあれば、ご指摘頂けると幸いです。

 

 

 

スポンサーリンク

 

 

 

Blog オススメ記事(コンテンツ選択)
  • レコード音質とハイレゾ化

  • CD音質と圧縮音源 AAC等

  • WordpressやiPhone・PC

  • ツールと閑話ブログ

レコード音質とハイレゾ化

CD音質と圧縮音源 AAC等

WordpressやPCなど

ツールと閑話ブログ