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 より画質が落ちます。恒久的な置き換えではなく、一時的なつなぎと考えてください。