Unknown encoder 'libx264' や Encoder not found など、コーデックに関するエラーは FFmpeg で特によく出ます。

エラー1: Unknown encoder / Encoder not found

エラーメッセージ

Unknown encoder 'libx264'
Error opening output files: Encoder not found

原因

使っている FFmpeg に、そのコーデックのライブラリが組み込まれていないと発生します。Linux ディストリビューションによっては、使えるコーデックを絞った FFmpeg が標準のパッケージになっています(Fedora の ffmpeg-free には libx264 も libx265 も入っていません)。

解決方法

1. 使えるエンコーダを確認する:

ffmpeg -encoders | grep 264
ffmpeg -encoders | grep 265
ffmpeg -encoders | grep hevc

2. フルビルド版のFFmpegをインストールする:

# Ubuntu(universe リポジトリ)/ Debian(main)
sudo apt update && sudo apt install ffmpeg

# macOS — Homebrew(libx264・libx265 入り)
brew install ffmpeg

# Windows — gyan.dev のフルビルド版(ffmpeg.org のダウンロードページからリンクあり)
# https://www.gyan.dev/ffmpeg/builds/ から "full" 版をダウンロード

3. 代替エンコーダを使う:

目的 推奨エンコーダ コマンド例
H.264 libx264 -c:v libx264
H.264(代替) libopenh264 -c:v libopenh264
H.265/HEVC libx265 -c:v libx265
AV1 libaom-av1 -c:v libaom-av1
AV1(高速) libsvtav1 -c:v libsvtav1
VP9 libvpx-vp9 -c:v libvpx-vp9

エラー2: codec not currently supported in container

エラーメッセージ

[mp4 @ 000001db19c90c80] Could not find tag for codec wmav2 in stream #1, codec not currently supported in container

または

[webm @ 000002a992ff6d80] Only VP8 or VP9 or AV1 video and Vorbis or Opus audio and WebVTT subtitles are supported for WebM.

原因

指定したコーデックを、出力先のコンテナ(MP4やWebMなどのファイル形式)が扱えません。

解決方法

コンテナを変更する:

# VP9 を WebM に入れる(MP4・MKV でも可)
ffmpeg -i input.mp4 -c:v libvpx-vp9 output.webm

# AV1 を MKV に入れる(MP4・WebM でも可)
ffmpeg -i input.mp4 -c:v libaom-av1 output.mkv

コーデックを変更する:

# MP4 コンテナなら H.264 を使う
ffmpeg -i input.mkv -c:v libx264 -c:a aac output.mp4

エラー3: Unable to choose an output format

エラーメッセージ

Unable to choose an output format for 'output.tmp'; use a standard extension for the filename or specify the format manually.

原因

出力ファイルの拡張子から、FFmpeg が形式を判断できないときに出ます。

解決方法

-f で形式を指定します:

ffmpeg -i input.mp4 -f mp4 output.tmp

使える形式の一覧は、次のコマンドで表示できます:

ffmpeg -formats

エラー4: width/height not divisible by 2

エラーメッセージ

height not divisible by 2 (1280x721)

原因

一般的な 4:2:0 形式(yuv420p)の映像では、H.264 などは解像度の縦と横が2の倍数でなければなりません。

解決方法

ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4

-2 は「アスペクト比を保ちつつ2の倍数に調整」という意味です。

コーデックの互換性を事前確認

# 利用可能なエンコーダ一覧
ffmpeg -encoders

# 利用可能なデコーダ一覧
ffmpeg -decoders

# 特定コーデックの詳細
ffmpeg -h encoder=libx264

ビルドフラグを確認する方法

ffmpeg -buildconf | grep enable

出力に --enable-libx264 や --enable-libx265 が含まれていれば、そのコーデックが使えます。

処理時間とサイズの目安

実測値は動画の圧縮などの記事とデータセットで公開しています。

同じ2分の1080p素材でも、コーデックによって処理時間とサイズは大きく変わります。H.264 の入力を、互換性を重視して MP4 に書き出すなら、次のようにします。

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

このサイトの計測では、同じ映像設定で音声なしのエンコードに 27.97 秒かかりました(Core i9-14900KF・32スレッド、FFmpeg 8.1。素材は 1080p/30fps・2分、Big Buck Bunny をループ、CC BY 3.0)。HEVC(libx265)や AV1(libaom-av1)は、同じ見た目でファイルを小さくできることがあります。ただし、エンコード時間は H.264 より長くなりがちです。

サーバーや CI で Unknown encoder が出る場合は、素材やコマンドではなく、FFmpeg のビルドの違いが原因であることが多いです。ローカルで成功したら、ローカルとサーバーの両方で ffmpeg -encoders と ffmpeg -buildconf の出力を保存して比べてください。原因を早く絞り込めます。

関連記事

よくある質問

“Codec not currently supported in container” って?

そのコーデックを受け付けないコンテナに、ストリームを入れようとしています(例: MP4 に WMA 音声 wmav2)。コンテナを .mkv に変えるか、そのストリームを別のコーデックに変換してください。

MP4 に入れた Opus の音が出ない

FFmpeg 8.1 は Opus をそのまま MP4 に入れられますが、MP4 の中の Opus に対応していないプレーヤーでは音が出ません。AAC に再エンコードする(-c:a aac)か、もともと Opus に対応している MKV を使ってください。

サポートされてるコーデックを確認したい

ffmpeg -codecs は、FFmpeg が知っているコーデックをすべて表示します。使っている FFmpeg では扱えないものも含まれます。各行の先頭の D は読み込み(デコード)、E は書き出し(エンコード)ができることを示します。ffmpeg -encoders と -decoders なら、使っている FFmpeg にあるエンコーダとデコーダだけが表示されます。

コーデックチェックをバイパスできる?

-strict experimental を付けると、FFmpeg が実験的扱いにしている機能が使えるようになります。FFmpeg 内蔵の vorbis エンコーダを使うときなどに必要です。コンテナが受け付けないコーデック(Could not find tag for codec …)は、これを付けても通りません(AV1 や VVC を MP4・MKV に入れるときは不要です)。ただし、再生する側で再生できないことがあります。

ローカルで動いたコマンドがサーバーで失敗する

FFmpeg のビルドが違うためです。サーバーでは、libfdk_aac や libx265、ハードウェアエンコーダを含まない最小構成のビルドがよく使われます。サーバー上で ffmpeg -encoders を確認してください。