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 のインストール
- MSYS2 公式サイト から最新のインストーラーをダウンロードする
- インストーラーを起動し、デフォルト設定でインストールする(推奨パス:
C:\msys64) - インストール後、MSYS2 UCRT64 を起動し、パッケージ情報を更新する
pacman -Syu
一度 MSYS2 を終了し、再度 UCRT64 で起動して更新を続ける。
pacman -Su
必要なビルドツールをインストールする
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 のミラーリストを更新する。
# /etc/pacman.d/mirrorlist.ucrt64 のミラーリストを確認・変更
環境変数の設定
MSYS2 環境で FFmpeg を正しくビルドするには、PATH に必要なディレクトリを追加する。
export PATH=/ucrt64/bin:$PATH
このコマンドを ~/.bashrc に追加しておくと、毎回設定する必要がなくなる。
FFmpeg のソースコードを取得する
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
cd ffmpeg
git clone でエラーが発生した場合(SSL 証明書エラーなど)、グローバル設定を変更せずにコマンド単位でSSL検証を無効にする:
git -c http.sslVerify=false clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
グローバルの git config --global http.sslVerify false は避けること。他のすべてのgit操作にも影響するためセキュリティリスクがある。
再配布可能な FFmpeg をビルドする
configure オプションの選択
ここが最重要ポイントだ。以下の configure コマンドを実行して、ビルドオプションを設定する。
./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-gpl | GPL ライセンスの機能を無効化(LGPL のみのビルドにする) |
--disable-nonfree | 商用利用不可のコンポーネントを無効化 |
--enable-shared | 共有ライブラリ(DLL)としてビルド |
--disable-static | 静的ライブラリをビルドしない(LGPL 準拠のため) |
--disable-libx264 | H.264 エンコーダーを無効化(特許回避) |
--disable-libx265 | H.265 エンコーダーを無効化(特許回避) |
--disable-libmp3lame | MP3 エンコーダーを無効化 |
--disable-libfdk-aac | AAC エンコーダーを無効化 |
--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 が完了したら、以下のコマンドでビルドを開始する。
make -j$(nproc)
-j$(nproc) は CPU のコア数に応じた並列ビルドを行い、ビルド時間を短縮する。コア数が多いほど速い。
ビルドには数分〜十数分かかる。完了するまで待つ。
ビルド中のトラブルシューティング:
make の途中でエラーが発生した場合:
# クリーンアップして再ビルド
make clean
./configure ... (同じオプションを再指定)
make -j$(nproc)
並列ビルドが原因の場合は -j オプションを外して試す:
make
FFmpeg のインストール
ビルドが成功したら、インストールする。
make install
Windows では sudo が不要なことが多い。インストール先は ./configure --prefix=... で指定できる(デフォルトは /ucrt64)。
ビルド後の動作確認
バージョン確認
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 の変換が正常に動作するかテストする。
# テスト用のサンプル 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 のインストール先が含まれていない。以下を実行する。
export PATH=$HOME/bin:$PATH
# または configure で指定した --prefix/bin を追加
libXXXX.dll: cannot find エラーが出る
依存 DLL が見つからない。ldd コマンドで確認する。
ldd ffmpeg.exe
not found と表示されている DLL を特定し、パスを通すか、同じディレクトリにコピーする。
Unknown encoder 'libx264' が表示される
再配布可能ビルドでは libx264 を意図的に無効化しているため、H.264 は使えない。特許フリーのコーデックを代わりに使う。
# VP9(特許フリー)でエンコード
ffmpeg -i input.png -c:v libvpx-vp9 output.webm
make の途中で Error 1 が出る
ビルドオプションに問題があるか、依存ライブラリが不足している。make clean して再試行するか、config.log でエラーの詳細を確認する。
再配布時のライセンス対応
ビルドが完成したら、再配布にはライセンスへの対応が必要だ。
LGPL v2.1 ビルドの再配布時に必要な対応:
COPYING.LGPLv2.1ファイルを同梱する(FFmpeg のソースに含まれている)- FFmpeg が LGPL であることを README やドキュメントに明記する
- エンドユーザーが FFmpeg 部分を自分でリビルドできるように、共有ライブラリ(DLL)形式で配布する(静的リンクを避ける)
チェックリスト:
# ビルド構成の確認(configuration 行を確認)
ffmpeg -version | grep configuration
# 以下が含まれているかチェック
# --disable-gpl ✅ GPL 非依存
# --disable-nonfree ✅ 特許リスク回避
# libx264 などが有効になっていないか確認
まとめ
Windows 環境で MSYS2 を使い、再配布可能な FFmpeg をビルドする手順をまとめた。
- MSYS2 をインストールし、ビルドツールを整える
- FFmpeg のソースを
git cloneで取得 ./configure --disable-gpl --disable-nonfree ...で特許リスクを除外make -j$(nproc)でビルドffmpeg -versionで動作確認
商用利用や再配布を前提とした FFmpeg 開発では、このようなカスタムビルドのアプローチが法的リスクを最小化する。Linux 環境でのビルド手順については別記事で詳しく解説している。