WSL2上のDockerとビルドツールを使って、FDK-AAC入りのffmpegをビルドする手順を書きます。
FDK-AACとは
FDK-AAC(Fraunhofer FDK AAC)は、Fraunhofer IISが開発したオープンソースのAAC(Advanced Audio Coding)コーデックライブラリです。AAC-LC、HE-AAC、HE-AACv2、AAC-LD、AAC-ELDなど、さまざまなオーディオオブジェクトタイプをサポートしています。
HE-AAC
※ChatGPTによる説明
HE-AAC(High-Efficiency Advanced Audio Coding)は、AACの拡張仕様で、低ビットレートでの高音質を実現するために開発されました。HE-AAC v1では、AAC-LCにSpectral Band Replication(SBR)技術を組み合わせ、高周波数帯域の効率的な符号化を行います。さらに、HE-AAC v2では、SBRに加えてParametric Stereo(PS)技術を導入し、ステレオ信号の圧縮効率を向上させています。
これらの技術により、HE-AAC v2は、低ビットレート(例:ステレオで24~32 kbps)でも高品質な音声再生が可能となり、デジタルラジオ放送やストリーミングなど、帯域幅が限られた環境で広く採用されています。
要するに、低ビットレート時に高音質を実現するための工夫がされているAACの拡張仕様です。
FDK-AACのライセンス
※ChatGPTによる説明
FDK-AACは、フラウンホーファー社が開発した高品質なAACエンコーダライブラリで、主にAndroidプラットフォーム向けに提供されています。そのライセンスは、BSDライセンスを基にした独自のもので、ソースコードやバイナリ形式での再配布や使用が許可されています。ただし、特許ライセンスに関する明確な規定がないため、商用利用や特許権の問題に注意が必要です。
具体的には、FDK-AACのライセンスは以下の条件を含んでいます。
- 再配布と使用の許可: ソースコードおよびバイナリ形式での再配布や使用が許可されています。
- 著作権表示の保持: 再配布時には、元の著作権表示とライセンス文を保持する必要があります。
- 商標の使用制限: フラウンホーファー社の商標を、事前の書面による許可なく製品の推奨や宣伝に使用することはできません。
- 特許ライセンスの不明確さ: ライセンス文書には、特許権の使用に関する明確な許可が含まれていません。
このため、商用利用や特許権に関する懸念がある場合は、フラウンホーファー社や関連する特許権者から直接確認を取ることが推奨されます。
また、FDK-AACは、AACエンコーディングに必要な特許ライセンスをVia Licensingを通じて取得することができます。ただし、FDK-AAC自体のライセンスには特許ライセンスの付与が含まれていないため、別途特許ライセンスを取得する必要があります。
このような背景から、FDK-AACの利用に際しては、ライセンス条件や特許権に関する理解と確認が重要です。
FDK-AAC自体はソースコードやバイナリ形式での再配布や使用が許可されていますが、AACのエンコーディング/デコーディング処理に含まれる特許については別途考慮する必要があるようです。
AACのライセンスについて
上記ページを読んだ感じでは、
- AACのライセンスはVia Licensingが管理している
- AACののエンコーダー/デコーダーを用いた商品を販売する場合にはAAC特許ライセンスが必要になる
- HE-AACもAACのライセンスに含まれる(別途料金は不要)
- AAC形式を使ったファイル(mp4, m4a 等)の公開だけならAAC特許ライセンス申請は不要
と私は理解しました。
FDK-AACを含むFFmpegが配布されない理由
FDK-AAC自体はBSDライセンスなので、利用、複製、変更、再配布、商用利用も可能です。
しかし、FDK-AACの実装には特許技術が含まれており、特許ライセンス料の支払いが必要となる可能性があるため、FDK-AACを含めたバイナリを配布することは避けられているのだと思います。
FFmpegにはネイティブのAACエンコーダが含まれますが、おそらく特許をうまく避けながら実装されているのでしょう(音質が劣るのもこのせい?)。
※私の推測なので、間違ってたらすみません。
実行環境
前置きが長くなりましたが、FFmpegのビルドの話に移ります。
私の環境は以下の通りです。
- Windows 11
- Intel Core i7 13700K
- WSL2 (Ubuntu)
- Docker Desktop for Windows
WSL2とDockerを使う方法が一番楽だと思います。
FFmpegのビルド手順
下記のビルドツールを使ってFFmpegをビルドします。
WSLのUbuntu内でリポジトリをクローンします。
git clone https://github.com/BtbN/FFmpeg-Builds.git
cd FFmpeg-Builds
Dockerイメージをビルドします。
./makeimage.sh win64 nonfree 7.1
FFmpegのビルドを開始します。
./build.sh win64 nonfree 7.1
私の環境では計2時間くらいかかりました。
ビルドが完了すると、./artifacts
ディレクトリ内にFFmpeg実行ファイルを含むZIPファイルが作成されます。
Windows側にコピーして解凍すれば使えるようになります。
HE-AACv2でのエンコード
ビルドしたFFmpegを使って、HE-AACv2でエンコードする方法を紹介します。
ffmpeg.exe -i input.flac -vn -c:a libfdk_aac -profile:a aac_he_v2 -signaling explicit_sbr -b:a 48k -ar 44100 -ac 2 -afterburner 1 output.m4a
-i input.flac
入力ファイルを指定しています。-vn
でビデオストリームを無効化しています。-c:a libfdk_aac
でエンコーダを指定しています。-profile:a aac_he_v2
でHE-AACv2を指定しています。-signaling explicit_sbr
SBR(Spectral Band Replication)存在を明示的にシグナリングするためのオプションです。-b:a 48k
でビットレートを指定しています。-ar 44100
でサンプリング周波数を指定しています。-ac 2
でチャンネル数を指定しています。-afterburner 1
でエンコード品質を向上させるためのオプションです。
FLAC音源(96kHz, 24bit の音楽)をエンコードして試聴してみましたが、音楽では最低でも48kbps以上ないと音がぼやける印象を受けました。
会話がメインの音声ならば、24kbpsでも十分だと思います。
Opusと聴き比べ
Opusも低ビットレートで高音質を実現するコーデックです。こちらはロイヤリティフリーのフォーマットです。
24kbps~48kbpsでの比較をしてみましたが、いずれの場合もOpusの方が音質が良いと感じました。
2025年2月時点でOpusはSafariでの再生が完全にはサポートされていないため、そこだけ解消されればHE-AACv2を選ぶ理由はないかもしれません。
動画のAV1コーデックについてもそうですが、Safariはこういうの対応が遅くて嫌いです。無駄にシェアが高くて無視できないのも厄介なところ。
早くWebM+AV1+Opusがスタンダードになってほしいですね。
まとめ
FDK-AAC入りのFFmpegをビルドする手順を紹介しました。
昔ビルドしたときはもっと大変だったのですが、今はWSL2とDockerを使えば簡単にビルドできるので助かります。
コメント