FFmpegよくあるエラーと解決方法 — Unknown encoder から moov atom not found まで
FFmpegを使っていると、初めて見るエラーメッセージに戸惑うことがあります。本記事では特によく遭遇するエラーの原因と解決方法をまとめます。
動作確認: ffmpeg 6.1 で確認済み
1. Unknown encoder ‘libx264’
エラーメッセージ
Unknown encoder 'libx264'
または
Encoder libx264 not found.
原因
libx264 はH.264エンコード用の外部ライブラリです。FFmpegのビルド時に --enable-libx264 が含まれていない場合、このエンコーダは使用できません。
解決方法
1. 利用可能なエンコーダを確認する:
ffmpeg -encoders | grep 264
2. フルビルド版のFFmpegを使う:
公式サイト (ffmpeg.org/download.html) や各ディストリビューションのパッケージ(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 アトムをファイル先頭に移動する(-movflags +faststart):
ffmpeg -i input.mp4 -movflags +faststart -c copy output.mp4
-movflags +faststart— moovアトムをファイル先頭に配置する(ウェブでのストリーミング再生にも有効)-c copy— 再エンコードなし(高速・無劣化)
注意: ファイルが完全に壊れている場合(録画中断など)はこの方法では修復できません。
mp4recoverやuntruncなどの専用ツールを検討してください。
3. Invalid data found when processing input
エラーメッセージ
Invalid data found when processing input
または
[mp4 @ ...] moov not found
Error while opening encoder for output stream
原因
入力ファイルが破損している、または拡張子とファイルの実際のフォーマットが一致していない場合に発生します。
解決方法
-err_detect ignore_err で破損部分を無視して処理する:
ffmpeg -err_detect ignore_err -i input.mp4 output.mp4
-err_detect ignore_err— デコードエラーを無視して処理を続行- 一部フレームが欠損することがありますが、再生可能なファイルを作れる場合があります
フォーマットを明示的に指定する:
ffmpeg -f mp4 -i input.mp4 output.mp4
-f でフォーマットを明示すると、誤った拡張子によるミスマッチを回避できます。
4. Output file already exists
エラーメッセージ
File 'output.mp4' already exists. Overwrite? [y/N]
または(-y を指定していない場合に対話的に尋ねられる)
原因
出力先に同名ファイルが既に存在しています。デフォルトでは確認を求めます。
解決方法
| オプション | 動作 |
|---|---|
-y | 既存ファイルを確認なしで上書き |
-n | 既存ファイルがある場合はエラーで即終了 |
ffmpeg -y -i input.mp4 output.mp4
ffmpeg -n -i input.mp4 output.mp4
スクリプトやバッチ処理では -y を明示的に指定するのが一般的です。
5. Conversion failed! (終了コード 1)
エラーメッセージ
Conversion failed!
原因
このメッセージ自体は「何か失敗した」という総合的なエラーで、具体的な原因は直前のログに出ています。
診断手順
- エラーログをよく読む:
Conversion failed!の直前に具体的なエラー原因が表示されています - 詳細ログを有効化する:
-v verboseまたは-v debugを追加してより詳細な情報を得る
ffmpeg -v verbose -i input.mp4 output.mp4
- よくある原因の確認チェックリスト:
- 入力ファイルのパスが正しいか
- 出力ディレクトリが存在するか
- ディスク空き容量は十分か
- 指定したコーデックが利用可能か(
ffmpeg -encodersで確認) - フィルタの構文にミスはないか
6. height not divisible by 2
エラーメッセージ
height not divisible by 2 (1920x1081)
または
width not divisible by 2
原因
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. No such encoder ‘copy’ / コーデック指定の注意点
エラーメッセージ
Unknown encoder 'Copy'
または
No such 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, copy, libvpx-vp9)。
エラー対処の基本フロー
1. エラーメッセージ全文を読む(最後の数行だけでなく、ログ全体を確認)
2. ffprobe で入力ファイルを確認する(コーデック・フォーマットが正しいか)
3. ffmpeg -encoders / -decoders でコーデックの可否を確認する
4. -v verbose を追加して詳細ログを取得する
5. コマンドを最小構成に戻して切り分ける
関連記事
動作確認: ffmpeg 6.1.1 / Ubuntu 24.04 (GitHub Actions runner)
一次ソース: ffmpeg.org/ffmpeg.html / ffmpeg.org/ffmpeg-codecs.html / trac.ffmpeg.org