この記事でわかること
moov atom not foundエラーの意味と原因- MP4ファイルの
moov/mdat構造の基礎 -movflags faststartで問題を予防する方法- 録画途中で終了したファイルの修復方法
qt-faststartツールの使い方
テスト済みバージョン: FFmpeg 6.1
対象 OS: Windows / macOS / Linux
moov atom not found とは
MP4ファイルは複数の「atom(アトム)」または「box(ボックス)」と呼ばれる構造ブロックで構成されています。その中でも特に重要なのが:
mdat(Media Data atom):実際の動画・音声データmoov(Movie atom):ファイルのインデックス情報(タイムスタンプ、サンプル位置など)
moov がないと、プレーヤーもFFmpegもファイルを再生・処理できません。
エラー例:
moov atom not found
Invalid data found when processing input
なぜ moov がファイル末尾にあるのか
FFmpegはデフォルトでエンコード完了後に moov をファイル末尾に書き込みます。理由はエンコード中は mdat のサイズが不明なため、moov の内容(各フレームのオフセット情報)が確定できないからです。
[デフォルト構造]
ftyp | mdat(巨大な映像・音声データ) | moov(インデックス)
この構造は2つの問題を引き起こします:
- プログレッシブダウンロード不可:ブラウザがファイル全体をダウンロードするまで再生できない
- 録画クラッシュ時:
moovが書き込まれる前にプロセスが終了するとmoovが存在しない壊れたファイルになる
予防策:-movflags faststart
新しくMP4を作成する場合は -movflags faststart を使うと moov をファイル先頭に移動できます:
ffmpeg -i input.mp4 -c copy -movflags faststart output_fast.mp4
これにより moov がファイル先頭に配置され、ストリーミング再生やWebでの早期表示が可能になります。
[faststart構造]
ftyp | moov(インデックス) | mdat(映像・音声データ)
エンコード時に faststart を指定する
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
qt-faststart で既存ファイルを最適化
FFmpegに付属する qt-faststart ツールで既存のMP4を変換できます:
qt-faststart input.mp4 output_fast.mp4
qt-faststart はファイルを再エンコードせず、moov を先頭に移動するだけです(高速・無劣化)。
録画クラッシュで壊れたファイルの修復
録画中にクラッシュしたファイル(moov なし)は FFmpeg 単体では修復できません。以下のツールが有効です。
untruncate(mp4fragmentsが必要)
mp4recovery input_broken.mp4 output_recovered.mp4
recover_mp4 スクリプト
FFmpegのソースコードに含まれる tools/recover_mp4.c をコンパイルして使う方法もあります。
商用ツール
- Remo Video Repair
- Stellar Video Repair
-frag_duration でMP4をフラグメント化して耐クラッシュ性を上げる
録画用途では、こまめに moov を更新するフラグメント化MP4が有効です:
ffmpeg -i input.mp4 -c copy -movflags frag_keyframe+empty_moov+default_base_moof output_frag.mp4
frag_keyframe:各キーフレームでフラグメントを作成empty_moov:ファイル先頭に空のmoovを配置default_base_moof:標準のbase mediaフラグメント
このフォーマットはMP4の途中でクラッシュしても部分的に再生可能です(HLS/DASHに近い構造)。
MP4のatom構造を確認する方法
ffprobe でatom構造を調べられます:
ffprobe -v trace -i input.mp4 2>&1 | grep -E "^(ftyp|moov|mdat)"
よくある質問
Q: moov atom not found のファイルを再エンコードできないか?
できません。moov がなければFFmpegはファイルのどこにフレームがあるかわからないため、読み込み自体が失敗します。修復ツールを先に使う必要があります。
Q: -movflags faststart は常に使うべきか?
Web/ストリーミング用途では推奨です。ローカル再生専用なら不要です。ただし録画用途では frag_keyframe+empty_moov の方が耐クラッシュ性に優れています。
Q: faststart の処理時間は?
ファイルの再エンコードは行わないため非常に高速です(数秒以内)。
関連記事
一次ソース: ffmpeg.org/ffmpeg-formats.html#mp4 / trac.ffmpeg.org/wiki/Seeking