FFmpegはマルチメディア処理におけるスイスアーミーナイフです。トランスコード、リマックス、フィルタリング、ストリーミング、メタデータ抽出、サムネイル生成、音声の正規化など、思いつくほぼあらゆる音声・動画処理を扱えます。
Ubuntuのリポジトリパッケージでも多くのユーザーには十分ですが、FFmpegをソースからコンパイルすると、コーデック、フィルタ、ライセンス選択、ビルドオプションをより細かく制御できます。ディストリビューションで提供されているものより新しいFFmpegリリースが必要な場合にも有用です。
このガイドでは、Ubuntuで一般的に使われる幅広い機能を有効にしてFFmpegをコンパイルする手順と、途中で遭遇しがちなエラーへの対処法を説明します。
なぜFFmpegをソースからコンパイルするのか?
FFmpegを自分でコンパイルすると、次のような場合に役立ちます。
aptで入手できるものより新しいFFmpegリリースが必要- ディストリビューションのビルドで省かれているコーデックやフィルタを使いたい
- GPL、version 3、non-freeコンポーネントを制御したい
- ハードウェア固有の最適化を行いたい
- サーバーやワークステーション向けに再現可能なビルド構成を用意したい
トレードオフはメンテナンスです。ソースビルドはUbuntuのパッケージマネージャーによって自動更新されないため、セキュリティ修正や新機能が必要になったときは自分で再ビルドする必要があります。
前提条件
このガイドでは、次を前提とします。
- Ubuntu 24.04 Noble Numbat、またはそれに近い最近のUbuntuリリース
- 基本的なターミナル操作に慣れていること
sudo権限- ソースファイル、ビルド成果物、依存関係を置くための十分なディスク容量
始める前に、すでにFFmpegがインストールされているか確認します。
ffmpeg -version
which ffmpeg
Ubuntuのパッケージ版FFmpegがインストール済みで、後からカスタムビルドを/usr/local配下にインストールした場合、PATHの順序によってはシェルが/usr/local/bin/ffmpegを優先することがあります。インストール後に確認してください。
ステップ1:FFmpegのソースコードをダウンロードする
ソース用ディレクトリを作成し、FFmpegリリースのtarballをダウンロードします。
mkdir -p ~/ffmpeg_sources
cd ~/ffmpeg_sources
wget https://ffmpeg.org/releases/ffmpeg-7.1.1.tar.bz2
tar xjf ffmpeg-7.1.1.tar.bz2
cd ffmpeg-7.1.1
別のリリースを使いたい場合は、公式FFmpegダウンロードページで現在のバージョンを確認し、それに合わせてファイル名を調整してください。
ステップ2:ビルド依存関係をインストールする
コンパイラツールチェーンと開発ライブラリをインストールします。
sudo apt-get update
sudo apt-get install -y
autoconf
automake
build-essential
cmake
git
libass-dev
libfreetype-dev
libgnutls28-dev
libmp3lame-dev
libsdl2-dev
libtool
libva-dev
libvdpau-dev
libvorbis-dev
libxcb1-dev
libxcb-shm0-dev
libxcb-xfixes0-dev
meson
ninja-build
pkg-config
texinfo
wget
yasm
nasm
zlib1g-dev
libx264-dev
libx265-dev
libnuma-dev
libvpx-dev
libfdk-aac-dev
libopus-dev
libdav1d-dev
libtheora-dev
libfribidi-dev
libharfbuzz-dev
libfontconfig1-dev
libpulse-dev
libsoxr-dev
libspeex-dev
libxml2-dev
libzvbi-dev
libbs2b-dev
libsnappy-dev
libgsm1-dev
libopencore-amrnb-dev
libopencore-amrwb-dev
libbluray-dev
libssh-dev
libssl-dev
libopenal-dev
librubberband-dev
libfftw3-dev
libopenmpt-dev
パッケージ名はUbuntuのリリース間で変わることがあります。aptがUnable to locate packageを報告した場合は、現在の名前を検索してください。
apt search freetype dev
apt search libdc1394
パッケージ問題のトラブルシューティング
Ubuntu 24.04 Nobleでは、古いガイドと異なるパッケージ名がいくつかあります。
libfreetype6-devは現在、一般的にはlibfreetype-devとしてインストールされますgit-coreは現在、単にgitですlibdc1394-22-devは現在、一般的にはlibdc1394-devとしてインストールされます
libflite-devのような一部のオプションパッケージは、標準リポジトリから入手できない場合があります。その場合は、対応するFFmpegオプションを省くか、そのパッケージを提供する別のリポジトリを有効にするか、その依存関係をソースからビルドしてください。
ステップ3:FFmpegを設定する
有効にしたい機能を指定して、FFmpegのconfigureスクリプトを実行します。
./configure
--prefix=/usr/local
--enable-gpl
--enable-version3
--enable-nonfree
--enable-shared
--enable-libass
--enable-libfdk-aac
--enable-libfreetype
--enable-libmp3lame
--enable-libopus
--enable-libtheora
--enable-libvorbis
--enable-libvpx
--enable-libx264
--enable-libx265
--enable-pthreads
--enable-libspeex
--enable-libsoxr
--enable-libxml2
--enable-libbluray
--enable-libfontconfig
--enable-libfribidi
--enable-libharfbuzz
--enable-libpulse
--enable-gnutls
この構成では、音声、動画、字幕、フォント、ネットワーク関連の幅広い機能を有効にします。また、libfdk-aacが必要とするため、--enable-nonfreeも有効にしています。--enable-nonfreeで構成されたビルドは、FFmpegの通常のライセンス条件では再配布できません。そのため、他人向けにパッケージ化するのではなく、自分のシステム用として使ってください。
よくある設定エラーと解決策
1. FreeTypeヘッダーが見つからない
次のような表示が出ることがあります。
fatal error: ft2build.h: No such file or directory
#include <ft2build.h>
FreeType開発パッケージをインストールします。
sudo apt-get install libfreetype-dev
その後、./configureを再実行します。
2. NASM/YASMが見つからない
次のような表示が出ることがあります。
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
NASMをインストールします。
sudo apt-get install nasm
その後、./configureを再実行します。--disable-x86asmを使うこともできますが、重要なアセンブリ最適化が無効になるため、通常は適切な解決策ではありません。
3. LibASSが見つからない
次のような表示が出ることがあります。
ERROR: libass >= 0.11.0 not found using pkg-config
LibASS開発パッケージをインストールします。
sudo apt-get install libass-dev
その後、pkg-configから認識できるか確認します。
pkg-config --modversion libass
4. GnuTLSとOpenSSLの競合
次のような表示が出ることがあります。
GnuTLS and OpenSSL must not be enabled at the same time.
TLSバックエンドを1つ選びます。例えば次のようにします。
./configure --enable-gnutls
または次のようにします。
./configure --enable-openssl
同じFFmpegビルドで両方を有効にしないでください。
ステップ4:FFmpegをコンパイルしてインストールする
設定に成功したら、FFmpegをコンパイルします。
make -j"$(nproc)"
これは利用可能なすべてのCPUコアを使います。ハードウェアや選択した機能によって、ビルドには数分から30分程度かかる場合があります。
コンパイルされたバイナリとライブラリをインストールします。
sudo make install
共有ライブラリキャッシュを更新します。
sudo ldconfig
シェルがまだ古いFFmpegバイナリを見つける場合は、パスの順序を確認してください。
which ffmpeg
echo "$PATH"
新しいシェルを開くか、/usr/binより前に/usr/local/binが検索されるようにPATHを調整する必要があるかもしれません。
ステップ5:インストールを検証する
インストールされたFFmpegのバージョンと構成を確認します。
ffmpeg -version
ffmpeg -buildconf
期待するエンコーダー、デコーダー、フィルタが存在することを確認します。
ffmpeg -encoders
ffmpeg -decoders
ffmpeg -filters
対象を絞って確認するには、grepを使います。例:
ffmpeg -encoders | grep -E 'libx264|libx265|libfdk_aac|libopus'
ffmpeg -filters | grep subtitles
簡単なトランスコードテストも有用です。
ffmpeg -f lavfi -i testsrc2=size=1280x720:rate=30 -f lavfi -i sine=frequency=1000:sample_rate=48000 -t 5 -c:v libx264 -c:a aac test-output.mp4
ffprobe test-output.mp4
ビルドをカスタマイズする
上記の構成は幅広いものですが、唯一の妥当なビルドというわけではありません。実際に使う内容に応じて、オプションを追加または削除してください。
ハードウェアアクセラレーションでは、正確なオプションはGPU、ドライバー、SDKのインストール状況に依存します。調査すべき一般的な領域は次のとおりです。
- IntelまたはAMDシステムでのVAAPI:
--enable-vaapi - NVIDIA NVENC/NVDECサポート:使用するFFmpegリリースに必要な現在のFFmpegドキュメントとNVIDIA codec headersを確認してください
- CUDA関連ワークフロー:CUDA toolkitと、インストール済みバージョンでサポートされるFFmpegオプションを確認してください
追加の形式やライブラリについては、次も検討できます。
- tracker music形式向けの
--enable-libopenmpt - GSM音声向けの
--enable-libgsm - タイムストレッチとピッチシフト向けの
--enable-librubberband - 高品質な音声リサンプリング向けの
--enable-libsoxr
オプションを有効にする前に、対応する開発パッケージがインストールされ、pkg-configから見えることを確認します。
pkg-config --list-all | grep -i soxr
pkg-config --modversion soxr
使用するリリースに最も正確なオプションを確認するには、公式のFFmpeg Compilation Guideとconfigureヘルプを参照してください。
./configure --help
トラブルシューティングのヒント
- 最後の
make失敗行だけでなく、最初の実質的なエラーを読みます。有用なメッセージは出力のもっと前にあることがよくあります。 - ライブラリが見つからないと報告された場合は、その
-devパッケージをインストールし、pkg-configに表示されることを確認します。 - configure失敗時は
ffbuild/config.logを確認します。失敗したコンパイラおよびリンカーテストの詳細が記録されています。 - ライセンスを意識してください。
--enable-gpl、--enable-version3、--enable-nonfreeは、生成されたバイナリをどのように配布できるかに影響します。 - コンパイル中にディスク容量が不足した場合は、
make cleanで一時ビルドファイルを削除するか、より容量のあるディレクトリでビルドします。 - インストールされたバイナリが共有ライブラリを見つけられない場合は、
sudo ldconfigを実行し、ldd "$(which ffmpeg)"でライブラリパスを調べます。
まとめ
FFmpegをソースからコンパイルすると、コーデック、フィルタ、ライセンス選択、インストールパスを最大限に制御できます。Ubuntuパッケージをインストールするより手間はかかりますが、特定の機能セットや新しいFFmpegリリースが必要な場合には価値があります。
このガイドに従った後は、ffmpeg -version、ffmpeg -buildconf、小さなトランスコードテストでビルドを検証してください。それらの確認に通れば、カスタムFFmpegビルドは実際の音声・動画処理作業に使える状態です。
