FFmpegにおけるH.264 (x264) エンコーダのビルドと設定

FFmpegは多機能なメディア処理ツールですが、高性能なH.264エンコーディング機能を利用するためには、通常、x264ライブラリを組み込んでビルドする必要があります。このガイドでは、Linux環境でFFmpegにx264エンコーダのサポートを追加するための具体的な手順を解説します。

x264ライブラリの構築

まず、FFmpegが依存するH.264エンコーダであるx264ライブラリをソースコードからビルドし、システムにインストールします。作業はroot権限で行うか、各コマンドにsudoを付与してください。

# rootユーザーに切り替える(または各コマンドをsudoで実行)
sudo su -

# ソースコードをダウンロードするための一時ディレクトリを作成し、移動
mkdir -p /usr/local/src/dependencies
cd /usr/local/src/dependencies

# x264のソースコードをGitリポジトリからクローン
git clone https://code.videolan.org/videolan/x264.git
cd x264

# x264のビルド設定とインストール
# --prefixオプションでインストール先を/usr/local/x264に指定
# 共有ライブラリ(--enable-shared)と静的ライブラリ(--enable-static)の両方を有効化
# 環境によっては「no assembler」エラーが発生する場合があるため、--disable-asm を追加することが推奨されます
./configure --prefix=/usr/local/x264 --enable-shared --enable-static --disable-asm

# コンパイル実行(-jオプションでCPUコア数を指定すると高速化されます)
make -j$(nproc)

# インストール実行
make install

これにより、x264ライブラリは/usr/local/x264ディレクトリにインストールされます。

FFmpegのダウンロードとビルド

次に、FFmpegのソースコードを取得し、先にインストールしたx264ライブラリと連携するように設定してビルドします。

# 依存関係用ディレクトリに戻る
cd /usr/local/src/dependencies

# FFmpegの最新安定版をダウンロード(例としてffmpeg-7.0.1を使用)
wget https://ffmpeg.org/releases/ffmpeg-7.0.1.tar.bz2
tar xjf ffmpeg-7.0.1.tar.bz2
cd ffmpeg-7.0.1

# FFmpegのビルド設定(configure)
# --prefix: FFmpegのインストール先を/usr/local/ffmpegに指定
# --enable-libx264: x264エンコーダのサポートを有効化
# --enable-gpl: GPLライセンスのコンポーネント(x264など)を有効化
# --extra-cflags, --extra-ldflags: x264ライブラリのヘッダファイルとライブラリファイルのパスを指定
./configure --prefix=/usr/local/ffmpeg \
            --enable-shared \
            --enable-libx264 \
            --enable-gpl \
            --enable-pthreads \
            --extra-cflags="-I/usr/local/x264/include" \
            --extra-ldflags="-L/usr/local/x264/lib" \
            --disable-x86asm # X86アセンブリの最適化を無効化(必要な場合)

configureエラー「x264 not found」の解決策

./configure実行時に「ERROR: x264 not found using pkg-config」のようなメッセージが表示されることがあります。これは、システムがx264ライブラリのpkg-config情報を見つけられないためです。以下の手順でPKG_CONFIG_PATHを設定して解決します。

# PKG_CONFIG_PATHを設定するスクリプトを作成
echo 'export PKG_CONFIG_PATH="/usr/local/x264/lib/pkgconfig:$PKG_CONFIG_PATH"' >> /etc/profile.d/ffmpeg_env.sh

# 環境変数を再読み込み
source /etc/profile.d/ffmpeg_env.sh

# 再度configureを実行
./configure --prefix=/usr/local/ffmpeg \
            --enable-shared \
            --enable-libx264 \
            --enable-gpl \
            --enable-pthreads \
            --extra-cflags="-I/usr/local/x264/include" \
            --extra-ldflags="-L/usr/local/x264/lib" \
            --disable-x86asm

configureが問題なく完了したら、FFmpegのビルドとインストールを行います。

make -j$(nproc)
make install

これでFFmpegが/usr/local/ffmpegディレクトリにインストールされます。

システム環境設定の更新

FFmpegがシステム全体で利用できるように、動的ライブラリのパスと実行コマンドのパスを設定します。

動的ライブラリパスの追加

FFmpegの共有ライブラリがシステムに見つけられるように、ldconfigの設定を更新します。

echo '/usr/local/ffmpeg/lib' > /etc/ld.so.conf.d/ffmpeg.conf
ldconfig

PATH環境変数の設定

FFmpegの実行ファイルに直接パスを指定しなくてもコマンドが実行できるよう、PATH環境変数にFFmpegのbinディレクトリを追加します。これは、前述の/etc/profile.d/ffmpeg_env.shに追記されます。

echo 'export PATH="/usr/local/ffmpeg/bin:$PATH"' >> /etc/profile.d/ffmpeg_env.sh
source /etc/profile.d/ffmpeg_env.sh

変更を確実に反映させるために、必要に応じてターミナルを再起動するか、システムを再起動してください。

インストールと機能の確認

FFmpegのインストールとH.264エンコーダが正しく機能するかを確認します。

FFmpegバージョンの確認

ffmpeg -version

出力される情報の中に、FFmpegのバージョンとビルドオプション(--enable-libx264が含まれていること)を確認してください。

H.264エンコード機能の確認

実際にH.264エンコーダを使用して動画を変換してみます。手元にテスト用の動画ファイル(例: input.mov)があることを前提とします。

ffmpeg -i input.mov -c:v libx264 -preset medium -crf 23 output_h264.mp4

このコマンドで生成されたoutput_h264.mp4ファイルを調査し、ビデオストリームがH.264形式(例えばStream #0:0(und): Video: h264 ...のような出力)になっていることを確認できれば、H.264エンコーダのセットアップは成功です。

FFmpeg configureオプションの詳細

FFmpegのビルド設定時に使用した./configureコマンドの主要なオプションについて、その意味を詳しく見ていきましょう。

./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-libx264 --enable-gpl --enable-pthreads --extra-cflags="-I/usr/local/x264/include" --extra-ldflags="-L/usr/local/x264/lib"
  • ./configure: FFmpegのソースコードからビルドするための環境をチェックし、Makefileなどのビルドスクリプトを生成するコマンドです。システムの構成に応じて適切なビルド設定を行います。
  • --prefix=/usr/local/ffmpeg: FFmpegがインストールされるルートディレクトリを指定します。実行可能ファイル(ffmpeg, ffprobeなど)、ライブラリ、ヘッダーファイルなどがこのパスの下に配置されます。
  • --enable-shared: FFmpegのライブラリを共有ライブラリ(.soファイル)としてビルドします。これにより、複数のプログラムが同じライブラリを共有できるようになり、ディスクスペースの節約やメモリ効率の向上が図れます。
  • --enable-libx264: H.264ビデオエンコーディングに広く利用されている高品質なオープンソースライブラリであるlibx264のサポートを有効にします。これを指定することで、FFmpegはlibx264を使ってH.264形式の動画をエンコードできるようになります。
  • --enable-gpl: GNU General Public License (GPL) に基づいて配布されるFFmpegのコンポーネントや外部ライブラリ(libx264など)の利用を有効にします。これには、GPLライセンスで提供される一部のエンコーダやフィルターが含まれます。
  • --enable-pthreads: POSIXスレッド(pthreads)のサポートを有効にします。これにより、FFmpegがマルチスレッドで動作し、マルチコアプロセッサの性能を最大限に活用して動画処理の高速化を実現します。
  • --extra-cflags="-I/usr/local/x264/include": Cコンパイラに追加のコンパイルオプションを渡します。-Iオプションは、コンパイラがヘッダーファイルを検索する追加のディレクトリを指定し、ここではlibx264のヘッダーパスを指示しています。
  • --extra-ldflags="-L/usr/local/x264/lib": リンカに追加のリンクオプションを渡します。-Lオプションは、リンカがライブラリファイルを検索する追加のディレクトリを指定し、ここではlibx264のライブラリパスを指示しています。

これらのオプションを適切に設定することで、FFmpegを特定の要件に合わせてカスタマイズし、必要なエンコーダや機能を有効にすることができます。

タグ: FFmpeg x264 H.264エンコーダ ビルド手順 linux

5月30日 05:26 投稿