FFmpeg(エフエフエムペグ)はMacOSのターミナルからコマンドラインを使って動画と音声を記録・変換・再生するための多機能フリーソフトウェアです。(Windows版やLinax版もります) 今回はFFmpegのNativeAACエンコーダでハイレゾ・ピュアー音源をAAC変換したときの音質(歪率とF特)を評価し圧縮率も確認してみました。
FFmpegのインストール
FFmpegのインストールは以下の2つの方法があります。
- 「XCODE」と「Homebrew」を併用してインストールする方法
「XCODE」と「Homebrew」を併用してインストールする方法は後からライブラリのAACエンコーダ(libfdk_aac 等)をビルドできるメリットがありますが、XCODEで20GBのファイル容量を要し更にビルドする手順が煩雑です。(この方法の紹介記事は、ここをクリック:2022/8/26追記)
- 既にコンパイルされたMacOS用のFFmpegをダウンロードする方法
コンパイルされたMacOS用のFFmpegをダウンロードすればOKで簡単にインストールできます。
今回は簡単にインストール出来る②の方法を選択しインストールしました。
インストール手順は以下の通り
- FFmpegの公式ダウンロードページから、リンゴマーク > Static builds for macOS 64-bit > ffmpeg-NNNNN-gXXXXXXXXXX .7z をクリックして圧縮ファイルをダウンロードします。 当ブログの場合、「ffmpeg-103035-g73b847e136.7z」をダウンロードしました。
- ダウンロードファイルを展開すると、Unix実行ファイルのffmpegが現れるので、このffmpegファイルをmacのアプリケーションフォルダーに移動させせれば完了です。
インストールの有無を確認するため、ターミナルを開いて、/Applications/ffmpeg -h と打ち込んでhelp内容が表示されたら成功です。
ハイレゾ音源のAAC変換について
最もシンプルなAAC変換
ターミナルを開いて、以下のコマンドを入力します。
command /Applications/ffmpeg -i "変換元ファイル.wav" -vn "変換後のファイル名.m4a"
たったこれだけで、wavファイルがAACファイルに変換されます。(変換元ファイルがFLAC等でもOKです)
なお、-vnはオーディオを指定するオプションです。 またファイル名にスペースがあるとエラーになるためにファイル名をダブルクォーテーションで囲んでいます。使用上の注意
FFmpegのシンプルオプションでAAC変換すると、変換後のAACファイルの諸元は以下になります。
AAC変換の諸元
1)ビットレート:VBAモードで128kbps
2)サンプルレート:入力ファイルのサンプリング周波数により以下の様に変動しますので注意を要します。
- 入力ファイルが192khzでは、ダウンサンプリングされて96khz
- 入力ファイルが96khzでは、そのままのサンプルレート96khz
- 入力ファイルが48khzでは、そのままのサンプルレート48khz
以上から、シンプルなAAC変換は少々実用的でありません。 以下のオプションを指定してAAC変換することをオススメします。
オススメのAAC変換(NativeAACオプション)
色々オプションを試して、最終的に以下に落ち着きました。 下の色文字で示す部分がオプションコードです。
command /Applications/ffmpeg -i "変換元ファイル.wav" -aac_coder twoloop -vn -ar 48000 -ab 320k "変換後のファイル名.m4a"
オプション説明
- -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モードになります。
- -aac_coder twoloop
補 足
一々、ターミナルを介してコマンドラインを実行する作業は面倒です。 そこで、Macのショートカットアプリでコマンドラインを組込んだショートカットを作成しておけば変換作業の効率化が図れます。 下の記事で複数の音声ファイルを一括変換するショートカットを紹介しています。 ショートカット化することをオススメします。
-
MacのショートカットアプリでFFmpegによるAACやMP3への変換作業を自動化する
例えば、FFmpegのAAC及びMP3用エンコーダは多数ありその特徴に合わせて一々、ターミナルを介してコマンドラインを実行しなければならず、変換作業が面倒です。 そこで、Macのショートカットアプリで ...
NativeAACエンコーダの評価方法
FFmpegの「オススメのAAC変換(NativeAACオプション)」コマンドラインを使い、以下のピュアー音源をNativeAACエンコーダでAACに変換し評価しました。
- 歪率測定用・ピュアー音源
歪率確認用として、正弦波 1khz -20db wave(24bit 192khz)ファイルをWindowsソフトのWaveGeneの加算モードで5秒間生成した音源ファイルを使います。
【歪率の測定方法】
変換されたAACの歪率をWindowsソフトのWaveSpectraで測定します。
歪率測定
- F特評価用・ピュアー音源AAC変換後のF特を測定するために、17khz〜24khzまで0.5khzおきに、-20dbの正弦波15波の音源を作成します。 AACのサンプルレートが48kHz(fc=24kHz)だから最大値を24kHzにしています。残念ながらWaveGeneでは、最大で8波分のジェネレーターがあるものの残り7波が不足します。そこで、先ず17khz〜20.5khzまで0.5khzおきに、-20dbの正弦波 8波を5秒間生成し、次に21khz〜24khzまで0.5khzおきに、-20dbの正弦波 7波を5秒間、別々にwevegeneで生成しておき、各々のファイルをAudacityで編集して一つのファイル(wav 24bit 192khz)に統合してF特用評価音源にすることにしました。(統合した結果は下の波形参照)
F特評価用・ピュアー音源
Down Load
Wave( 24bit 192khz size:11MB)
【F特の測定方法】
F特評価用・ピュアー音源をビットレート(-ab 160k,256k,320k)を変えてAAC変換(-ar 48000)します。 AAC変換ファイルをWaveSpectra対応フォーマットのwavに変換(foober2000で24bit wav)して、WaveSpectraで周波数分析(条件:hanning 16384)しスペクトル上の各ピーク値を読み取り-20dbからの減衰量をグラフ化し、F特を評価します。
NativeAACエンコーダの歪率(1khz -20db)評価結果
<評価条件>
ビットレートオプション(-ab)を変えた時の歪率を調べました。 なお、サンプルレート:48khz(-ar 48000)固定です。
ビットレート | 歪率(THD+N) | スペクトル |
320kbps (-ab 320k) | 0.00056% | |
256kbps (-ab 256k) | 0.00056% | 省略 |
160kbps (-ab 160k) | 0.00056% | 省略 |
<参考歪率 at 1khz -20db sin>
XLD(320kbps,48khz):0.00066%(THD+N)
CD (16bit 44.1khz):0.01535%(THD+N)
歪率評価・ポイント
- FFmpegのNativeAACエンコーダは、CD(16bit)と比較して歪率が約4/100以下で、24bitに対応していると想定される。
- XLDのAACエンコーダと比較して、若干歪率が良好。
- ビットレート(160kbps〜320kbpsの間)を変えても歪率の変化が見られなかった。
NativeAACエンコーダのF特・評価結果
ビットレートを変えた時の(160kbps,256kbps,320kbps)F特をグラフ化し、カットオフ周波数(-3dbの交点)を測定してみました。(サンプルレートは48khz固定)
ポイント
F特グラフで分かったこと
- 320kbpsのカットオフ周波数が22.5khzで、CDの44.1khz(fc=22.05khz)より上回っている。
- 256kbps以上で20khzまで略フラットになり、XLDのAACエンコーダで生じる高域減衰(下グラフ緑ライン参照)がFFmpeg AACでは見られなかった。 つまり、XLDの様に高域減衰を防止するためハイレゾ(ex.192khz)を48khzにダウンコンバートしてからAAC変換する必要が無いという事です。 (XLDの「高域減衰」詳細は、ここをクリック)
FFmpegのNativeAACエンコーダ まとめ
歪率について
ハイレゾ(24bit)をAAC変換した1khz -20db 正弦波の歪率(THD+N)は0.00056%でした。 対してCDのビット深度16bitでは、0.01535%(THD+N)になります。 これから、FFmpegのNativeAACエンコーダが24bitに対応していることが分かります。
F特について
ハイレゾ(192khz)をダイレクトに320kbpsでAAC変換した時、20khz迄フラットな周波数特性を示しました。 これは、高域減衰を生じるXLDより優位で、CDフォーマットのF特と同等以上の特性を示しました。
ファイルの圧縮率など、総合して
前出の、F特評価用・ピュアー音源ファイルの圧縮率は以下の通りでした。 FFmpeg・NativeAACエンコーダのパフォーマスンスはXLDエンコーダと比較して、圧縮率と音質の両面で優れていると思います。
注意ポイント
NativeAACは、ビットレートが192Kbps付近から劣化量が増大すると言う問題点が浮かび上がりました。 ビットレートを256kbps以上に設定する必要があります。 詳しくは下の記事を参照してください。(2023/1/20追記)
-
Pink-noiseでビットレートと劣化量の関係を調べてみました。
AAC変換する時にビットレートを低く(オプション)設定すると劣化量がどの程度に増加するものなのか?ネットで調べても具体例が無く、その特性を知りたくなりました。 そこで、今回はFFmpegAACエンコ ...
以上から、FFmpegによるAAC変換は、音質的に秀逸でありハイレゾをAAC変換する場合の選択肢になり得るのでは無いかと思われました。
-
高品質でAAC変換できると言われるFFmpeg libfdk_aacエンコーダをハイレゾピュアー音源(24bit)で音質評価してみました。
AAC encoder library: libfdk_aac libfdk_aac エンコーダは、FFmpegのAACページのFAQで「NativeAAC エンコーダよりも、lib ...
サムネール(Artwork)画像が引き継がれない欠点を改善した、FFmpegコマンドライン組込み・ショートカットApp!!(2022/9/9追記)