32blogby StudioMitsu
Archive11 min read

【Windows版】完全再配布可能なFFmpegをビルドする方法

MSYS2を使ってWindowsで再配布可能なFFmpegをビルドする手順を解説。特許リスクのあるコーデックを除外しLGPLライセンスに準拠した商用利用可能なバイナリを作る方法。

FFmpeg は動画・音声の処理で広く使われているオープンソースソフトウェアだ。しかし、標準の配布バイナリには再配布できないコーデックが含まれている場合があり、そのまま商用ソフトウェアや自社サービスに組み込んでしまうと、意図せずに著作権や特許の侵害にあたる可能性がある。

特に H.264(AVC)、AAC、MP3 などのコーデックは特許の対象となっており、無断で再配布することは法的リスクが伴う。

安全に FFmpeg を再配布するためには、特許やライセンスの問題がない形でカスタムビルドすることが重要だ。

この記事でわかること

  • Windows 環境で FFmpeg をビルドするための MSYS2 セットアップ
  • 再配布可能なバイナリを作るための configure オプションの選び方
  • ビルドの実行と動作確認の方法
  • よくあるトラブルとその解決策

FFmpeg のライセンス構造を理解する

ビルドを始める前に、FFmpeg のライセンス体系を理解しておこう。

FFmpeg は主に以下の 3 つのライセンスモードで配布できる。

モード説明商用再配布
LGPL v2.1デフォルト。ダイナミックリンクなら商用利用・再配布可可(条件あり)
GPL v2/v3--enable-gpl を指定したビルド。GPL 準拠が必要GPL に従う必要あり
nonfree--enable-nonfree を指定したビルド。クローズドソースのライブラリを含む再配布不可

商用再配布を目的とする場合、--disable-gpl --disable-nonfree を指定した LGPL ビルドが必要だ。さらに、特許が絡むコーデック(H.264、H.265、MP3、AAC など)も除外する必要がある。


Windows でのビルド環境を準備する(MSYS2)

Windows 環境では、FFmpeg をビルドするために MSYS2 を使用する。MSYS2 は Linux のような環境を Windows 上で再現するソフトウェアで、FFmpeg のビルドに必要なツールを一式インストールできる。

MSYS2 のインストール

  1. MSYS2 公式サイト から最新のインストーラーをダウンロードする
  2. インストーラーを起動し、デフォルト設定でインストールする(推奨パス: C:\msys64
  3. インストール後、MSYS2 UCRT64 を起動し、パッケージ情報を更新する
bash
pacman -Syu

一度 MSYS2 を終了し、再度 UCRT64 で起動して更新を続ける。

bash
pacman -Su

必要なビルドツールをインストールする

bash
pacman -S \
    mingw-w64-ucrt-x86_64-toolchain \
    base-devel \
    git \
    make \
    nasm \
    yasm \
    pkg-config \
    mingw-w64-ucrt-x86_64-cmake

pacman -S は複数パッケージを一度にインストールできる。インストール中に "proceed with installation?" と聞かれたら Y を入力する。

「could not resolve host」エラーが出た場合:

インターネット接続またはDNS設定の問題。別のネットワークを試すか、MSYS2 のミラーリストを更新する。

bash
# /etc/pacman.d/mirrorlist.ucrt64 のミラーリストを確認・変更

環境変数の設定

MSYS2 環境で FFmpeg を正しくビルドするには、PATH に必要なディレクトリを追加する。

bash
export PATH=/ucrt64/bin:$PATH

このコマンドを ~/.bashrc に追加しておくと、毎回設定する必要がなくなる。


FFmpeg のソースコードを取得する

bash
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg

git clone でエラーが発生した場合(SSL 証明書エラーなど)、グローバル設定を変更せずにコマンド単位でSSL検証を無効にする:

bash
git -c http.sslVerify=false clone https://git.ffmpeg.org/ffmpeg.git ffmpeg

グローバルの git config --global http.sslVerify false は避けること。他のすべてのgit操作にも影響するためセキュリティリスクがある。


再配布可能な FFmpeg をビルドする

configure オプションの選択

ここが最重要ポイントだ。以下の configure コマンドを実行して、ビルドオプションを設定する。

bash
./configure \
    --disable-gpl \
    --disable-nonfree \
    --enable-shared \
    --disable-static \
    --disable-libx264 \
    --disable-libx265 \
    --disable-libmp3lame \
    --disable-libvorbis \
    --disable-libopus \
    --disable-libfdk-aac \
    --disable-libass \
    --disable-libvpx \
    --disable-encoders \
    --disable-decoders \
    --disable-muxers \
    --disable-demuxers \
    --disable-parsers \
    --disable-bsfs \
    --disable-filters \
    --enable-encoder=png \
    --enable-encoder=rawvideo \
    --enable-decoder=png \
    --enable-decoder=rawvideo \
    --enable-muxer=image2 \
    --enable-muxer=rawvideo \
    --enable-demuxer=image2 \
    --enable-demuxer=rawvideo

これは「PNG と RAW 動画だけ扱える最小構成」の例だ。必要なコーデックに合わせて --enable-encoder=xxx を追加すればいい。

各オプションの意味

オプション効果
--disable-gplGPL ライセンスの機能を無効化(LGPL のみのビルドにする)
--disable-nonfree商用利用不可のコンポーネントを無効化
--enable-shared共有ライブラリ(DLL)としてビルド
--disable-static静的ライブラリをビルドしない(LGPL 準拠のため)
--disable-libx264H.264 エンコーダーを無効化(特許回避)
--disable-libx265H.265 エンコーダーを無効化(特許回避)
--disable-libmp3lameMP3 エンコーダーを無効化
--disable-libfdk-aacAAC エンコーダーを無効化
--disable-encodersすべてのエンコーダーをデフォルトで無効化(後から必要なものだけ有効化)

上記の configure は「PNG と RAW 動画のみ」の最小構成だ。LGPL ビルドに追加可能な特許フリーコーデック(使用するものだけを選んで --enable-xxx で有効化する):

  • VP8/VP9: --enable-libvpx(ライブラリの別途インストールが必要)
  • AV1 (libaom): --enable-libaom
  • Ogg Vorbis: --enable-libvorbis(上記 configure の --disable-libvorbis を削除して有効化)
  • Opus: --enable-libopus(上記 configure の --disable-libopus を削除して有効化)

これらは configure に --disable-libvorbis--disable-libopus を指定した場合は無効化される。必要なコーデックのみ --enable-xxx に変更して使うこと。

ビルドの実行

configure が完了したら、以下のコマンドでビルドを開始する。

bash
make -j$(nproc)

-j$(nproc) は CPU のコア数に応じた並列ビルドを行い、ビルド時間を短縮する。コア数が多いほど速い。

ビルドには数分〜十数分かかる。完了するまで待つ。

ビルド中のトラブルシューティング:

make の途中でエラーが発生した場合:

bash
# クリーンアップして再ビルド
make clean
./configure ... (同じオプションを再指定)
make -j$(nproc)

並列ビルドが原因の場合は -j オプションを外して試す:

bash
make

FFmpeg のインストール

ビルドが成功したら、インストールする。

bash
make install

Windows では sudo が不要なことが多い。インストール先は ./configure --prefix=... で指定できる(デフォルトは /ucrt64)。


ビルド後の動作確認

バージョン確認

bash
ffmpeg -version

出力例:

ffmpeg version N-XXXXXX Copyright (c) 2000-2025 the FFmpeg developers
built with gcc XX.X.X
configuration: --disable-gpl --disable-nonfree --enable-shared ...
libavutil      XX.YY.ZZ / XX.YY.ZZ
libavcodec     XX.YY.ZZ / XX.YY.ZZ

configuration: の行に指定したオプションが含まれているか確認しよう。

基本動作テスト

PNG の変換が正常に動作するかテストする。

bash
# テスト用のサンプル PNG を生成(ffmpeg の test ソースを使用)
ffmpeg -f lavfi -i testsrc=size=320x240:rate=1 -vframes 1 test_input.png

# PNG を別のサイズに変換
ffmpeg -i test_input.png -vf scale=160:120 test_output.png

このようなログが表示されれば正常だ:

Output #0, image2, to 'test_output.png':
  Stream #0:0: Video: png, rgb24, 160x120

よくあるトラブルとその解決策

ffmpeg を実行すると command not found が出る

PATH に FFmpeg のインストール先が含まれていない。以下を実行する。

bash
export PATH=$HOME/bin:$PATH
# または configure で指定した --prefix/bin を追加

libXXXX.dll: cannot find エラーが出る

依存 DLL が見つからない。ldd コマンドで確認する。

bash
ldd ffmpeg.exe

not found と表示されている DLL を特定し、パスを通すか、同じディレクトリにコピーする。

Unknown encoder 'libx264' が表示される

再配布可能ビルドでは libx264 を意図的に無効化しているため、H.264 は使えない。特許フリーのコーデックを代わりに使う。

bash
# VP9(特許フリー)でエンコード
ffmpeg -i input.png -c:v libvpx-vp9 output.webm

make の途中で Error 1 が出る

ビルドオプションに問題があるか、依存ライブラリが不足している。make clean して再試行するか、config.log でエラーの詳細を確認する。


再配布時のライセンス対応

ビルドが完成したら、再配布にはライセンスへの対応が必要だ。

LGPL v2.1 ビルドの再配布時に必要な対応:

  1. COPYING.LGPLv2.1 ファイルを同梱する(FFmpeg のソースに含まれている)
  2. FFmpeg が LGPL であることを README やドキュメントに明記する
  3. エンドユーザーが FFmpeg 部分を自分でリビルドできるように、共有ライブラリ(DLL)形式で配布する(静的リンクを避ける)

チェックリスト:

bash
# ビルド構成の確認(configuration 行を確認)
ffmpeg -version | grep configuration

# 以下が含まれているかチェック
# --disable-gpl      ✅ GPL 非依存
# --disable-nonfree  ✅ 特許リスク回避
# libx264 などが有効になっていないか確認

まとめ

Windows 環境で MSYS2 を使い、再配布可能な FFmpeg をビルドする手順をまとめた。

  1. MSYS2 をインストールし、ビルドツールを整える
  2. FFmpeg のソースを git clone で取得
  3. ./configure --disable-gpl --disable-nonfree ... で特許リスクを除外
  4. make -j$(nproc) でビルド
  5. ffmpeg -version で動作確認

商用利用や再配布を前提とした FFmpeg 開発では、このようなカスタムビルドのアプローチが法的リスクを最小化する。Linux 環境でのビルド手順については別記事で詳しく解説している。