Unknown encoder 'libx264' エラーは、libx264 を含むFFmpegビルドに入れ替えれば解決します。コマンド自体は正しく、原因はお使いのFFmpegビルドが libx264 ライブラリを 含まずに コンパイルされていることです。新しいビルドを導入できるまでは、代替エンコーダで作業を続けられます。

FFmpegはモジュール構成になっています。libx264(最も普及したH.264エンコーダ)のような外部エンコーダは、ビルド時に組み込むよう設定された場合だけ使えます。最小構成のビルドには、コマンドがどれだけ正しくても、そもそも入っていません。

なぜ起きるのか

libx264 はFFmpeg本体のソースツリーには含まれない 外部ライブラリ です。使うには、お使いのFFmpegをコンパイルした人が、このエンコーダを明示的に有効化(--enable-libx264 と適切なライセンスフラグ)している必要があります。多くの最小ビルド(軽量Dockerイメージ、一部の配布アーカイブ)は、libx264が要求するGPLライセンスを避けるために、これを省いています。

つまりエラーメッセージのとおり、お使いのビルドには libx264 という名前のエンコーダが存在しません。解決策は、綴りを直すことでもオプションを足すことでもなく、そのエンコーダを含むビルドを入手する ことだけです。

ステップ1: ビルドが持つエンコーダを確認する

何かを導入する前に、本当にlibx264が欠けているのかを確認します。-encoders フラグは、バイナリに組み込まれた全エンコーダを一覧します。入力ファイル不要で、どこでも安全に実行できます。

ffmpeg -encoders

出力の中から libx264 を探してください。フルビルドなら次のような行が見つかります。

 V....D libx264              libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)

この行が 無ければ、ビルドにそのエンコーダが存在しないことが根本原因です。先頭のフラグは、一覧の直前に ffmpeg が表示する列の凡例に対応します(例: V は映像エンコーダ、D は「ダイレクトレンダリング方式1に対応」を表します)。ここで見るのは、libx264 という 名前 の行があるかどうかだけです。

H.264全般について何ができるかは -codecs でも確認できます。コーデックと、それぞれに利用可能なエンコーダ/デコーダを一覧します。

ffmpeg -codecs

h264 の行を探してください。E フラグはエンコーダがあること、括弧内は具体的にどのエンコーダ(libx264 など)が組み込まれているかを示します。h264にデコーダしか表示されないなら、このビルドではH.264をエンコードできません。

ステップ2: フルビルドを導入する(OS別)

確実な解決策は、最小ビルドを、libx264 を同梱した フルビルド に入れ替えることです。手順はOSによって異なります。

Windows — gyan.dev の「full」または「essentials」ビルドを使います。どちらも libx264 を含みます。ダウンロードして展開し、bin フォルダを PATH に追加します。パッケージマネージャを使うなら、Chocolatey でフルビルドを導入できます。

choco install ffmpeg-full

Linux — 多くの場合ディストリのパッケージで十分です。Debian/Ubuntu の ffmpeg パッケージには libx264 が含まれています。リポジトリのビルドに libx264 が無い場合は、信頼できる配布元(例: John Van Sickle の static ビルド)の静的フルビルドに切り替えます。

sudo apt update && sudo apt install ffmpeg

macOS — Homebrew の ffmpeg フォーミュラは既定で libx264 付きでコンパイルされています。

brew install ffmpeg

導入後、ffmpeg -encoders を再実行して libx264 の行が表示されることを確認します。あわせて、PATH 上に古いバイナリが先に残っていないか、新しいバイナリが実行されているかも確認してください。

ステップ3: 実際のエンコードで検証する

ビルドに libx264 が入ったら、次の標準的なH.264エンコードがエラーなく動くはずです。固定品質(CRF)制御で動画を再エンコードします(-crf 23 は妥当な既定値で、最適な値はソースや解像度によって変わります)。

ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
  • -c:v libx264 — libx264 H.264 エンコーダを使う
  • -crf 23 — 品質目標。低いほど高品質・大容量

これが完了して再生可能なファイルができれば、Unknown encoder の問題は解決しています。H.264のチューニングについては 動画を圧縮する方法 も参照してください。

x264 が使えないときの代替エンコーダ

すぐに新しいビルドを導入できない場合もあります(ソフトを入れ替えられないサーバ、制限付きコンテナなど)。そのときは代わりのエンコーダを使います。外部のGPLライブラリに依存しないエンコーダなら、ほぼすべてのFFmpegビルドに同梱されています。

mpeg4 はFFmpeg内蔵のMPEG-4 Part 2エンコーダです。多くのビルドで利用できます(ffmpeg -encoders で確認してください)。できたMP4はVLCなどのプレーヤーでは再生できますが、ChromeやFirefoxなどのWebブラウザでは再生できません。圧縮効率もH.264より劣ります。

ffmpeg -i input.mp4 -c:v mpeg4 -q:v 4 output.mp4
  • -q:v 4 — mpeg4 の品質スケール(低いほど高品質。2〜5が妥当な範囲)

libvpx(VP8)も、WebM対応ビルドでよくあるもう一つの選択肢です。ビルドにあれば、代わりにWebMを出力できます。

ffmpeg -i input.mp4 -c:v libvpx -b:v 1M output.webm
  • -b:v 1M — 目標映像ビットレート(VP8はビットレート明示が前提)

これらはあくまで応急処置です。フルビルドを導入できたら、H.264で画質と容量のバランスが最もよい libx264 に戻してください。代替エンコーダが存在するかは、先に ffmpeg -encoders で確認します。

まとめ

状況 対応
Unknown encoder 'libx264' が出る ビルドに libx264 が無い。コマンドは変えない
原因の確認 ffmpeg -encoders で libx264 の行を確認
恒久的な解決 フルビルド導入(gyan.dev/Chocolatey、ディストリの ffmpeg、Homebrew)
修正の検証 ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4
まだ導入できない -c:v mpeg4 または -c:v libvpx にフォールバック

よくある質問

あるマシンでは動くのに別のマシンでは動かないのはなぜですか

FFmpegのビルドが違うためです。動くマシンは libx264 を組み込んだフルビルド、失敗するマシンはそれが無い最小ビルドです。コマンドは同一で、バイナリだけが異なります。両方で ffmpeg -encoders を実行して比較してください。

オプションを足して libx264 を有効化できますか

できません。エンコーダを後付けする実行時フラグは存在しません。エンコーダはビルド時にバイナリへ組み込まれるため、libx264 を使う唯一の方法は、すでに含まれているビルドを導入(またはコンパイル)することです。

libx264 は h264 コーデックと同じものですか

厳密には違います。h264 はコーデック(フォーマット)、libx264 はそれを生成する一つの具体的な エンコーダ です。FFmpegには同じh264コーデック向けのハードウェアエンコーダ(h264_nvenc など)も存在することがあり、これらは別物です。h264にどのエンコーダがあるかは ffmpeg -codecs で確認できます。

mpeg4 の出力は libx264 と同じプレーヤーで再生できますか

どこでも再生できるわけではありません。MP4コンテナ内のMPEG-4 Part 2は、VLCなどのプレーヤーでは再生できますが、ChromeやFirefoxなどのWebブラウザでは再生できません。また圧縮効率が低く、同じファイルサイズなら mpeg4 は libx264 より画質が落ちます。恒久的な置き換えではなく、一時的なつなぎと考えてください。

関連記事