FDK-AAC内包FFmpeg9.0.2をビルドする(Windows)

2025年9月5日金曜日

PC エンコード

t f B! P

ただの備忘録
FDK-AACライセンス上バイナリ再配布は厳しい条件があるので基本自分でビルドする必要がある
※足りない機能がある場合は各自で追加してください

対象OS: Windows 10/11 (64bit)
ビルド環境: MSYS2 + UCRT64
FFmpeg: 9.0.2
FDK-AAC: 2.0.3
成果物: FFmpeg実行可能バイナリ(CMD/PowerShell対応)
fontconfig: 有効(字幕・テキスト描画機能付き)
NVIDIA: NVENC対応
形態: 実行ファイル + 必要なランタイムDLL

この手順では、ビルドしたFFmpegをMSYS2がインストールされていない別のWindows PCでも実行できる状態にすることを目標としています。


目次

  1. 事前準備
  2. MSYS2のインストール
  3. 開発ツールのインストール
  4. 依存ライブラリのインストール
  5. 作業環境のセットアップ
  6. FDK-AACのビルド
  7. FFmpegのビルド
  8. 動作確認
  9. パッケージの作成
  10. 別PCでの動作確認
  11. 最終確認
  12. トラブルシューティング
  13. 補足情報
  14. よくある質問(FAQ)
  15. 更新履歴
  16. ライセンスと免責事項

事前準備

必要なもの

  • Windows 10/11 (64bit)
  • 空きディスク容量: 10GB以上
  • インターネット接続
  • 管理者権限(通常は不要)
  • ビルド時間: PC性能によって数十分~数時間程度

この手順の方針

  • MSYS2のUCRT64環境を使用します。
  • FDK-AACはソースコードからビルドします。
  • FFmpegは9.0.2を使用します。
  • FFmpeg側はx264、x265、libaom、SVT-AV1、dav1d、Opus、Vorbis、VP9、libass、fontconfig、NVENCなどを有効にします。
  • FFmpeg本体や外部ライブラリは、可能な範囲で静的ライブラリを利用します。
  • GCCやpthreadなどのランタイムDLLは、完成したパッケージに必要なものだけを同梱します。

注意事項

  • FFmpegと外部ライブラリのライセンスを必ず確認してください。
  • この手順ではx264/x265などのGPLコンポーネントを有効にし、さらにFDK-AACを組み込むため、--enable-gpl --enable-nonfree を使用します。
  • そのため、この構成で作成したFFmpegはFFmpegのconfigure上ではnonfree扱いとなります。配布する場合は、FFmpegおよび各ライブラリのライセンス条件を必ず確認してください。
  • ウイルス対策ソフトがビルド中の実行ファイル作成を妨げる場合があります。

MSYS2のインストール

ステップ1: MSYS2のダウンロード

  1. ブラウザで https://www.msys2.org/ を開きます。
  2. 「Download」から最新版をダウンロードします。
  3. ダウンロードしたインストーラーを実行します。

ステップ2: MSYS2のインストール

  1. インストーラーの指示に従います。
  2. インストール先: C:\msys64 を推奨します。
  3. インストール完了後、スタートメニューからMSYS2を起動します。

MSYS2では複数の開発環境を選択できますが、この手順ではUCRT64を使用します。MSYS2公式ドキュメントでも、特に理由がなければUCRT64を選択することが推奨されています。

ステップ3: システムの初期更新

スタートメニューから「MSYS2 UCRT64」を起動してください。

以下を実行します。

pacman -Syu

確認メッセージが表示されたら、Yを入力してEnterキーを押します。

システム更新の途中でターミナルを終了するよう指示された場合は、ウィンドウを閉じてください。

再度「MSYS2 UCRT64」を起動し、もう一度以下を実行します。

pacman -Syu

更新が完了したら、そのままUCRT64ターミナルを使用します。


開発ツールのインストール

ステップ4: ビルドツールのインストール

MSYS2 UCRT64ターミナルで以下を実行します。

pacman -S --needed \
base-devel \
git \
autoconf \
automake \
libtool \
mingw-w64-ucrt-x86_64-toolchain \
mingw-w64-ucrt-x86_64-pkgconf \
mingw-w64-ucrt-x86_64-nasm \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-ninja \
mingw-w64-ucrt-x86_64-ntldd

インストール確認が表示されたら、Yを入力します。

ntlddはWindows用PEファイルのDLL依存関係を調べるために使用します。


依存ライブラリのインストール

ステップ5: コーデック&ライブラリのインストール

以下を実行します。

pacman -S --needed \
mingw-w64-ucrt-x86_64-x264 \
mingw-w64-ucrt-x86_64-x265 \
mingw-w64-ucrt-x86_64-aom \
mingw-w64-ucrt-x86_64-ffnvcodec-headers \
mingw-w64-ucrt-x86_64-openssl \
mingw-w64-ucrt-x86_64-rtmpdump \
mingw-w64-ucrt-x86_64-fontconfig \
mingw-w64-ucrt-x86_64-freetype \
mingw-w64-ucrt-x86_64-fribidi \
mingw-w64-ucrt-x86_64-harfbuzz \
mingw-w64-ucrt-x86_64-libxml2 \
mingw-w64-ucrt-x86_64-SDL2 \
mingw-w64-ucrt-x86_64-lame \
mingw-w64-ucrt-x86_64-opus \
mingw-w64-ucrt-x86_64-libvorbis \
mingw-w64-ucrt-x86_64-libvpx \
mingw-w64-ucrt-x86_64-libass \
mingw-w64-ucrt-x86_64-dav1d \
mingw-w64-ucrt-x86_64-svt-av1 \
mingw-w64-ucrt-x86_64-libiconv

これらは、今回のFFmpeg構成で使用する主要な外部ライブラリです。

FDK-AACは次のステップで自分でビルドするため、MSYS2のFDK-AACパッケージはここでは使用しません。


作業環境のセットアップ

ステップ6: 作業ディレクトリの作成

mkdir -p ~/ffmpeg_sources
cd ~/ffmpeg_sources

export PREFIX="$HOME/ffmpeg_build"

mkdir -p "$PREFIX"/{bin,include,lib,share/pkgconfig}

ステップ7: 環境変数の設定

export PATH="$PREFIX/bin:/ucrt64/bin:$PATH"

export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:/ucrt64/lib/pkgconfig:/ucrt64/share/pkgconfig"

確認します。

echo "$PREFIX"
echo "$PKG_CONFIG_PATH"
which gcc
which c++
which pkg-config

コンパイラがUCRT64環境のものになっていることを確認してください。

gcc --version
c++ --version

FDK-AACのビルド

ステップ8: FDK-AACのソースコード取得

FDK-AACは現在も2.0.3が基準となっているため、この手順ではv2.0.3を使用します。

cd ~/ffmpeg_sources

wget -O fdk-aac-2.0.3.tar.gz \
https://github.com/mstorsjo/fdk-aac/archive/refs/tags/v2.0.3.tar.gz

tar -xzf fdk-aac-2.0.3.tar.gz

cd fdk-aac-2.0.3

ステップ9: FDK-AACのビルド

まず、configureスクリプトを生成します。

./autogen.sh

その後、静的ライブラリとしてConfigureします。

./configure \
  --prefix="$PREFIX" \
  --disable-shared \
  --enable-static

ビルドします。

make -j$(nproc)

インストールします。

make install

ステップ10: FDK-AACのビルド確認

ls -lh "$PREFIX/lib/libfdk-aac.a"

pkg-config --modversion fdk-aac

以下のようにバージョンが表示されれば正常です。

2.0.3

ライブラリ本体も確認できます。

test -f "$PREFIX/lib/libfdk-aac.a" && echo "FDK-AAC library: OK"

FFmpegのビルド

ステップ11: FFmpeg 9.0.2のソースコード取得

2026年10月時点の最新安定版であるFFmpeg 9.0.2を使用します。

cd ~/ffmpeg_sources

wget -O ffmpeg-9.0.2.tar.xz \
https://ffmpeg.org/releases/ffmpeg-9.0.2.tar.xz

tar -xJf ffmpeg-9.0.2.tar.xz

cd ffmpeg-9.0.2

ステップ12: Configure

以下をそのまま実行します。

./configure \
  --prefix="$PREFIX" \
  --pkg-config-flags="--static" \
  --extra-cflags="-I$PREFIX/include -I/ucrt64/include" \
  --extra-ldflags="-L$PREFIX/lib -L/ucrt64/lib" \
  --extra-libs="-lstdc++ -lpthread -lm -liconv" \
  --enable-gpl \
  --enable-nonfree \
  --enable-libfdk-aac \
  --enable-libx264 \
  --enable-libx265 \
  --enable-libaom \
  --enable-libass \
  --enable-nvenc \
  --enable-librtmp \
  --enable-openssl \
  --enable-libfontconfig \
  --enable-libfreetype \
  --enable-libharfbuzz \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libsvtav1 \
  --enable-libdav1d \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libxml2 \
  --enable-static \
  --disable-shared

このconfigureで主に有効になる機能:

  • libfdk_aac: Fraunhofer FDK AAC
  • libx264: H.264/AVC
  • libx265: H.265/HEVC
  • libaom-av1: AV1
  • libsvtav1: SVT-AV1
  • libdav1d: AV1デコード
  • libvpx: VP8/VP9
  • libopus: Opus
  • libvorbis: Vorbis
  • libmp3lame: MP3
  • libass: ASS/SSA字幕
  • libfreetype: フォント描画
  • libfontconfig: フォント検索・管理
  • libharfbuzz: 複雑文字のテキスト処理
  • h264_nvenc / hevc_nvenc: NVIDIA NVENC
  • librtmp: RTMP
  • openssl: HTTPS/TLS
  • libxml2: XML関連機能

Configureの最後に、以下のようにlibfdk_aacが有効になっていることを確認してください。

Enabled decoders:
...
Enabled encoders:
...
libfdk_aac
...

また、Configure結果のライセンス表示がnonfree扱いになることがあります。これは今回の構成では正常です。

ステップ13: FFmpegのビルド

make -j$(nproc)

PCのCPUコア数やメモリ容量によってビルド時間は大きく変わります。

メモリ不足などが発生する場合は、例えば以下のように並列数を減らします。

make -j4

ステップ14: インストール

make install

インストール後、以下のファイルが作成されます。

ls -lh "$PREFIX/bin/ffmpeg.exe"
ls -lh "$PREFIX/bin/ffprobe.exe"
ls -lh "$PREFIX/bin/ffplay.exe"

動作確認

ステップ15: バージョン確認

cd "$PREFIX/bin"

./ffmpeg.exe -version

先頭部分が以下のようになっていればOKです。

ffmpeg version 9.0.2 ...

ステップ16: FDK-AACの有効化確認

./ffmpeg.exe -encoders | grep libfdk_aac

以下のような行が表示されれば成功です。

 A..... libfdk_aac           Fraunhofer FDK AAC (codec aac)

ステップ17: fontconfig / drawtext確認

./ffmpeg.exe -filters | grep drawtext

drawtextが表示されればOKです。

ステップ18: NVENC確認

./ffmpeg.exe -encoders | grep nvenc

NVIDIA関連のエンコーダーが表示されれば、FFmpeg側のNVENCサポートが有効です。

なお、実際のNVENC使用には対応するNVIDIA GPUとドライバーが必要です。

ステップ19: FDK-AACエンコードテスト

./ffmpeg.exe \
  -f lavfi \
  -i "sine=frequency=1000:sample_rate=48000:duration=5" \
  -ac 2 \
  -c:a libfdk_aac \
  -b:a 576k \
  "test_fdk_aac.m4a"

ファイルが生成されたことを確認します。

ls -lh test_fdk_aac.m4a

ステップ20: VBRエンコードテスト

./ffmpeg.exe \
  -f lavfi \
  -i "sine=frequency=1000:sample_rate=48000:duration=5" \
  -ac 2 \
  -c:a libfdk_aac \
  -vbr 5 \
  "test_fdk_aac_vbr.m4a"

FDK-AACのVBR機能を使用する場合は、使用するパラメータの組み合わせが対応しているか確認してください。

ステップ21: Windows側からの確認

WindowsのコマンドプロンプトまたはPowerShellを起動して、FFmpegのあるフォルダへ移動します。

cd "C:\msys64\home\(ユーザー名)\ffmpeg_build\bin"

ffmpeg.exe -version

FDK-AACも確認します。

ffmpeg.exe -encoders | findstr /I libfdk_aac

ここまで正常なら、FFmpeg自体のビルドは完了です。


パッケージの作成

ステップ22: パッケージフォルダの作成

cd ~

rm -rf ffmpeg-fdk-aac-windows-x64

mkdir -p ffmpeg-fdk-aac-windows-x64

ステップ23: 実行ファイルのコピー

cp "$PREFIX/bin/ffmpeg.exe"  ffmpeg-fdk-aac-windows-x64/
cp "$PREFIX/bin/ffprobe.exe" ffmpeg-fdk-aac-windows-x64/
cp "$PREFIX/bin/ffplay.exe"  ffmpeg-fdk-aac-windows-x64/

ステップ24: 必要なDLLの調査

Windowsの実行ファイルは、ビルド方法によって必要なDLLの数や種類が変わります。

そのため、「libgcc_s_seh-1.dllとlibwinpthread-1.dllの2個だけ」と固定せず、ntlddで実際の依存関係を調べます。

cd ~/ffmpeg-fdk-aac-windows-x64

ntldd -R ffmpeg.exe

ffprobeとffplayについても確認します。

ntldd -R ffprobe.exe
ntldd -R ffplay.exe

ステップ25: DLL依存関係をファイルへ保存

cd ~/ffmpeg-fdk-aac-windows-x64

{
  echo "=== ffmpeg.exe ==="
  ntldd -R ffmpeg.exe
  echo
  echo "=== ffprobe.exe ==="
  ntldd -R ffprobe.exe
  echo
  echo "=== ffplay.exe ==="
  ntldd -R ffplay.exe
} > dependencies.txt

内容を確認します。

cat dependencies.txt

ステップ26: UCRT64側のDLLを自動コピー

FFmpegの依存関係に含まれるDLL名をntlddの出力から取得し、同名のDLLがUCRT64の/ucrt64/binに存在する場合にパッケージへコピーします。

cd ~/ffmpeg-fdk-aac-windows-x64

for exe in ffmpeg.exe ffprobe.exe ffplay.exe; do
  ntldd -R "$exe"
done \
  | grep -Eo '[[:alnum:]_.+-]+\.dll' \
  | sort -u \
  | while IFS= read -r dll; do
      if [ -f "/ucrt64/bin/$dll" ]; then
        cp -v "/ucrt64/bin/$dll" .
      fi
    done

コピーされたDLLを確認します。

ls -lh *.dll

重要: DLLの数はconfigure内容やMSYS2パッケージの構成によって変わります。固定の個数を前提にしないでください。
この手順ではntlddで実際の依存関係を確認し、UCRT64の/ucrt64/binに存在する必要なDLLだけを同梱します。

ステップ27: ライセンスファイルのコピー

cp ~/ffmpeg_sources/ffmpeg-9.0.2/LICENSE.md \
   ~/ffmpeg-fdk-aac-windows-x64/LICENSE-FFmpeg.md

cp ~/ffmpeg_sources/fdk-aac-2.0.3/NOTICE \
   ~/ffmpeg-fdk-aac-windows-x64/NOTICE-FDK-AAC.txt

フォロワー

ブログ アーカイブ

QooQ