FFmpegでよく出るエラーの原因と解決方法を、エラーメッセージごとに確認できます。
1. Unknown encoder ‘libx264’
エラーメッセージ
Unknown encoder 'libx264'
FFmpeg 8.1 では、続けて次の行も表示されます。
Error opening output files: Encoder not found
原因
libx264 はH.264エンコード用の外部ライブラリです。FFmpegのビルド時に --enable-libx264 が含まれていない場合、このエンコーダは使用できません。
解決方法
1. 利用可能なエンコーダを確認する:
ffmpeg -encoders | grep 264
2. フルビルド版のFFmpegを使う:
公式サイト(ffmpeg.org)が配布しているのはソースコードだけです。ダウンロードページで案内されているビルド(Windows なら gyan.dev など)や、各ディストリビューションのパッケージ(Ubuntu: ffmpeg、macOS: brew install ffmpeg)は通常 libx264 を含んでいます。
3. 代替エンコーダを試す:
ffmpeg -i input.mp4 -c:v libopenh264 output.mp4
libopenh264はCiscoが提供するH.264エンコーダです。別途ライセンス上の制約がありますが、多くの環境で使えます。
2. moov atom not found
エラーメッセージ
moov atom not found
原因
MP4ファイルの構造情報(moovアトム)がファイル内に見つからない場合に発生します。多くは、録画やダウンロードが途中で止まり、moov が書かれるはずだったファイルの末尾が欠けているケースです。moov が末尾にあるだけの正常なファイルなら、FFmpeg は問題なく読めます。
解決方法
moov が欠けたファイルは、FFmpeg のオプションでは直せません。-movflags +faststart を付けて -c copy しても、入力を開く段階で同じエラーになります。
- ダウンロードやコピーの途中で切れたファイルなら、元のファイルを取り直します
- 録画が途中で止まったファイルは、同じ機材・同じ設定で撮った正常なファイルを参照して修復する
untruncなどの専用ツールを検討してください
3. Invalid data found when processing input
エラーメッセージ
Invalid data found when processing input
または(moov が欠けた MP4 の場合)
[in#0 @ ...] moov atom not found
[in#0 @ ...] Error opening input: Invalid data found when processing input
原因
入力ファイルが破損している・途中で切れている、またはそもそも動画ファイルではない(HTML のエラーページを保存したものなど)場合に発生します。拡張子が違うだけなら、FFmpeg は中身から形式を判別して読めます。
解決方法
ファイルは開けて途中でエラーになる場合は、-err_detect ignore_err を試す:
ffmpeg -err_detect ignore_err -i input.mp4 output.mp4
-err_detect ignore_err:デコードエラーを無視して処理を続けます。これを使うのは MPEG-4 Part 2(Xvid・DivX)など一部のデコーダだけで、H.264 では付けなくても結果は同じです- FFmpeg はこれを付けなくても、デコードエラーで止まらずに処理を続けます。壊れたフレームが抜けたり乱れたりすることがありますが、再生可能なファイルを作れる場合があります
- 入力を開く段階でこのエラーになる場合(moov の欠落や、動画ではないファイル)は効きません
ffprobe で実際の形式を確認する:
ffprobe input.mp4
FFmpeg は拡張子ではなく中身で形式を判別するので、拡張子が違うだけなら -f は不要です。中身が WebM のファイルに -f mp4 を付けるなど、中身と違う形式を指定すると、かえってこのエラーになります。ffprobe でも同じエラーになる場合は、ファイルが壊れているか、動画ファイルではありません。
4. Output file already exists
エラーメッセージ
File 'output.mp4' already exists. Overwrite? [y/N]
原因
出力先に同名のファイルが既にあります。デフォルトでは、上書きしてよいか確認を求めます。
解決方法
| オプション | 動作 |
|---|---|
-y |
既存ファイルを確認なしで上書き |
-n |
既存ファイルがある場合は上書きせず、変換しないで終了 |
ffmpeg -y -i input.mp4 output.mp4
ffmpeg -n -i input.mp4 output.mp4
スクリプトやバッチ処理では -y を明示的に指定するのが一般的です。-n で止まったときは File 'output.mp4' already exists. Exiting. と表示されますが、終了コードは 0 です。変換していなくても、スクリプトからは成功に見えます。
5. Conversion failed!
エラーメッセージ
Conversion failed!
このときの終了コードは、FFmpeg 6.1 以降では -22 のような負の値です(Linux・macOS では 234 のように表示されます)。FFmpeg 6.0 以前は 1 です。
原因
このメッセージ自体は「何か失敗した」という総合的なエラーで、具体的な原因は直前のログに出ています。
診断手順
- エラーログをよく読む:
Conversion failed!の直前に具体的なエラー原因が表示されています - 詳細ログを有効にする:
-v verboseまたは-v debugを追加すると、より詳しい情報が得られます
ffmpeg -v verbose -i input.mp4 output.mp4
- よくある原因のチェックリスト:
- エンコーダが設定を受け付けるか(例: yuv420p の映像で幅や高さが奇数だと、libx264 は失敗します。ハードウェアエンコーダは、そのハードウェアが無いと失敗します)
- 出力形式がそのコーデックを格納できるか(
Could not find tag for codec …と出たら格納できません) - フィルタの値が入力に合っているか(例: 320x240 の動画に
crop=400:300を付けると失敗します) - ディスク空き容量は十分か
入力ファイルのパスが違う、出力先フォルダーが無い、FFmpeg が知らないエンコーダ名やフィルタ名を指定した、といった場合は、処理を始める前に止まります。このときは Conversion failed! ではなく、Error opening input files: … や Error opening output files: … などと表示されます。
6. height not divisible by 2
エラーメッセージ
height not divisible by 2 (1920x1081)
または
width not divisible by 2
原因
一般的な 4:2:0 形式(yuv420p)の映像では、H.264などのコーデックは解像度の縦・横が 2の倍数 であることを要求します。奇数ピクセルの解像度が指定されると発生します。
解決方法
scale フィルタの -2 指定で自動的に偶数に調整する:
ffmpeg -i input.mp4 -vf scale=1280:-2 output.mp4
scale=幅:-2:幅を指定し、高さはアスペクト比を保ちながら偶数に自動調整-2は「アスペクト比を保ったうえで、いちばん近い2の倍数に丸める」を意味します
trunc 関数を使う方法(幅・高さ両方を調整):
ffmpeg -i input.mp4 -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" output.mp4
trunc(iw/2)*2:入力幅を2の倍数に切り下げtrunc(ih/2)*2:入力高さを2の倍数に切り下げ- 式に
()や*を含むので、シェルでは引用符で囲みます
7. Unknown encoder ‘Copy’ / コーデック指定の注意点
エラーメッセージ
Unknown encoder 'Copy'
または
Unknown encoder 'COPY'
原因
-c:v copy の copy は大文字・小文字を区別します。Copy や COPY は無効です。また引用符の種類(全角引用符など)も問題になることがあります。
解決方法
必ず 半角小文字 で記述してください。
# NG(大文字)
ffmpeg -i input.mp4 -c:v Copy output.mp4
# OK(半角小文字)
ffmpeg -i input.mp4 -c:v copy output.mp4
コーデック名は常に半角の小文字で指定します。- や _ を含む名前もあります(例: libx264, aac, libvpx-vp9, pcm_s16le)。
エラー対処の基本フロー
1. エラーメッセージ全文を読む(最後の数行だけでなく、ログ全体を確認)
2. ffprobe で入力ファイルを確認する(コーデック・フォーマットが正しいか)
3. ffmpeg -encoders / -decoders でコーデックの可否を確認する
4. -v verbose を追加して詳細ログを取得する
5. コマンドを最小構成に戻して切り分ける
関連記事
よくある質問
インストールはできたのにコマンドが通らない
ffmpeg -version で確認します。エラーになる場合は PATH が通っていません(ffmpeg があるフォルダー(例: /usr/local/bin)を PATH に追加します)。バージョン情報が表示される場合は、コマンドの書き方の問題なので、個別の記事を参照してください。
“Conversion failed!” だけ出て詳細が分からない
-loglevel debug を付けて再実行すると、詳細なログが出ます。エンコーダやフィルタのエラーなど、具体的な原因が分かります。
「Stream map … matches no streams」
-map 0:1 のような指定で、入力に無いストリームを選んでいます。ffprobe input.mp4 でストリーム番号を確認してから、-map を修正してください。無くてもよいストリームなら、末尾に ? を付けます(例: -map "0:a?")。
エンコード途中でメモリ不足になる
長尺の動画と複雑なフィルタチェーンの組み合わせが原因であることが多いです。-threads 1 で並列度を下げるか、入力を -ss / -t で短く区切って処理してから、後で結合してください。
実行が遅すぎる
-preset を medium から fast または ultrafast に変更します。NVENC / QSV / VideoToolbox などのハードウェアエンコーダが使えるかどうかは、ffmpeg -encoders | grep nvenc などで確認できます。