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 を確認してください。