Ubuntuで全機能入りFFmpegをコンパイルする完全ガイド

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のリリース間で変わることがあります。aptUnable 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

トラブルシューティングのヒント

  1. 最後のmake失敗行だけでなく、最初の実質的なエラーを読みます。有用なメッセージは出力のもっと前にあることがよくあります。
  2. ライブラリが見つからないと報告された場合は、その-devパッケージをインストールし、pkg-configに表示されることを確認します。
  3. configure失敗時はffbuild/config.logを確認します。失敗したコンパイラおよびリンカーテストの詳細が記録されています。
  4. ライセンスを意識してください。--enable-gpl--enable-version3--enable-nonfreeは、生成されたバイナリをどのように配布できるかに影響します。
  5. コンパイル中にディスク容量が不足した場合は、make cleanで一時ビルドファイルを削除するか、より容量のあるディレクトリでビルドします。
  6. インストールされたバイナリが共有ライブラリを見つけられない場合は、sudo ldconfigを実行し、ldd "$(which ffmpeg)"でライブラリパスを調べます。

まとめ

FFmpegをソースからコンパイルすると、コーデック、フィルタ、ライセンス選択、インストールパスを最大限に制御できます。Ubuntuパッケージをインストールするより手間はかかりますが、特定の機能セットや新しいFFmpegリリースが必要な場合には価値があります。

このガイドに従った後は、ffmpeg -versionffmpeg -buildconf、小さなトランスコードテストでビルドを検証してください。それらの確認に通れば、カスタムFFmpegビルドは実際の音声・動画処理作業に使える状態です。

Leave a Reply