ただの備忘録
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でも実行できる状態にすることを目標としています。
目次
- 事前準備
- MSYS2のインストール
- 開発ツールのインストール
- 依存ライブラリのインストール
- 作業環境のセットアップ
- FDK-AACのビルド
- FFmpegのビルド
- 動作確認
- パッケージの作成
- 別PCでの動作確認
- 最終確認
- トラブルシューティング
- 補足情報
- よくある質問(FAQ)
- 更新履歴
- ライセンスと免責事項
事前準備
必要なもの
- 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のダウンロード
- ブラウザで https://www.msys2.org/ を開きます。
- 「Download」から最新版をダウンロードします。
- ダウンロードしたインストーラーを実行します。
ステップ2: MSYS2のインストール
- インストーラーの指示に従います。
- インストール先:
C:\msys64を推奨します。 - インストール完了後、スタートメニューから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 AAClibx264: H.264/AVClibx265: H.265/HEVClibaom-av1: AV1libsvtav1: SVT-AV1libdav1d: AV1デコードlibvpx: VP8/VP9libopus: Opuslibvorbis: Vorbislibmp3lame: MP3libass: ASS/SSA字幕libfreetype: フォント描画libfontconfig: フォント検索・管理libharfbuzz: 複雑文字のテキスト処理h264_nvenc / hevc_nvenc: NVIDIA NVENClibrtmp: RTMPopenssl: HTTPS/TLSlibxml2: 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
0 件のコメント:
コメントを投稿