FFmpegにファイルを指定したのに開始されず、Could not find codec parameters for stream 0 ... unspecified size(または類似のメッセージ)が表示される——。これはFFmpegがファイルを開けたものの、ストリームをデコードするのに十分な情報を読み取れなかったことを意味します。よくある原因は3つあり、それぞれに具体的な解決策があります。本記事では、最も手軽な対処から最も確実な対処へと順に解説します。

動作確認: ffmpeg 8.1 で確認済み


この記事でわかること

  • 「Could not find codec parameters」が「コーデック欠如」ではなく プローブ の問題である理由
  • ffprobe でFFmpegがファイルから何を読み取っているか確認する方法
  • -analyzeduration-probesize でより多くのデータを解析させる方法
  • ファイルが本当に切れている・破損している場合の見分け方と、可能な範囲での救出方法
  • 出力側でストリームパラメータを直す再エンコードのフォールバック

核心はこうです。FFmpegはファイルを開くとき、各ストリームのパラメータ(解像度・ピクセルフォーマット・サンプルレートなど)を プローブ(探査) するために先頭の小さな塊を読みます。その塊に十分な情報が含まれていないと、たとえコーデック自体は完全にサポートされていても、FFmpegはこのエラーで処理を諦めます。


まず ffprobe でファイルを確認する

オプションを変える前に、FFmpegが実際に何を検出しているかを見ます。ffprobe はストリームと、読み取れたパラメータを報告するので、問題が単一ストリームなのかファイル全体なのかが分かります。

ffprobe input.mp4

出力の中で、重要なフィールドが欠けているストリーム——たとえば解像度の無い映像ストリームや、サンプルレートの無い音声ストリーム——に注目します。unknown や空欄のパラメータを示すストリームこそが、FFmpegが文句を言っている対象です。すべての ストリームが空に見えるなら、ファイルは切れている・破損している可能性が高く、特殊なストリームだけが空なら、特殊なコーデックを相手にしているかもしれません。


原因①: プローブしたデータが少なすぎる

FFmpegは既定で、ストリームパラメータの検出にファイルの限られた量しか読みません。前置きが長い、キーフレームがまばら、メタデータが後方に配置されているファイルでは、その既定の窓がデコーダに使えるフレームを見せる前に終わってしまいます。解決策は、-analyzeduration-probesize を使って、ファイルをもっと多くプローブするよう指示することです。

ffmpeg -analyzeduration 100M -probesize 100M -i input.mp4 -c copy output.mp4
  • -analyzeduration 100M — プローブ中、最大100Mマイクロ秒分のストリームを解析
  • -probesize 100M — プローブ中、最大100MBのデータを読む
  • -c copy — パラメータが見つかったら再エンコードせずコピー

どちらのオプションも入力の開き方に影響するため、-i に置く必要があります。100Mでも足りない非常に大きい・特殊なファイルでは、値をさらに上げます。これは最も手軽な対処で、ファイル自体が無傷のケースの大半を解決します。


原因②: ストリームの破損・切れ

プローブ量を増やしても直らない場合、ファイルが単に不完全な可能性があります——途中で止まったダウンロード、書き込み途中で切れた録画、転送中に壊れたバイトなど。この場合、パラメータを記述するデータがそもそも書かれていない、または壊れているため、FFmpegはパラメータを見つけられません。

こうしたファイルを完全に修復することはできないことが多いですが、再エンコードして壊れた領域をFFmpegにスキップさせることで、有効な 部分を救出できることがよくあります。再エンコードは出力にクリーンなストリームパラメータを再構築するので、元のファイルで詰まったプレーヤーでも結果を開けるようになります。

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4

これすら失敗するほど入力がひどく切れている場合、デコードに必要なデータが本当に欠けています——可能なら元素材を再ダウンロードまたは再エクスポートしてください。関連する破損エラーについては 「Invalid data found when processing input」エラーの解決法 を参照してください。


原因③: 特殊または誤検出されたコーデック

ストリームは正常でも、珍しいコーデックを使っていたり、コンテナのヒントが間違っていたりして、FFmpegのプローブがパラメータをすぐに確定できないことがあります。生ストリーム(コンテナの無い裸の .h264.aac)が典型例で、FFmpegに何を期待すべきか伝えるヘッダが無いためです。

確実な対処の一つは上で示した再エンコードと同じです。ffprobe でストリームを読めるなら、再エンコードでFFmpegに完全にデコードさせ、標準的でよく記述されたストリームを標準MP4に書き出させることで、出力のコーデックパラメータを正規化できます。

ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4
  • -c:v libx264 — 映像をクリーンなパラメータでH.264に再エンコード
  • -c:a aac — 音声をAACに再エンコード

再エンコード後、出力は完全で標準的なパラメータを持つため、結果のファイルでは同じエラーは解消します。ただし完全な生(raw)や特殊な入力では再エンコードだけでは不十分なこともあり、入力のフォーマット・解像度・フレームレートを明示する必要がある場合があります(例: -i の前に -f rawvideo -pix_fmt yuv420p -s 1920x1080 -r 30)。入力コーデック自体がビルドでサポートされていない場合は別の問題です——FFmpegのコーデックエラー を参照してください。


まとめ

原因症状解決策
プローブ量が少なすぎる無傷のファイル、開く時にエラー-i の前に -analyzeduration 100M -probesize 100M
ストリームの破損・切れダウンロードや録画が途中で切れた再エンコードで救出。必要なら元素材を再取得
特殊・誤検出コーデック生ストリームや変則コンテナ標準MP4へ再エンコード
まず診断ストリームごとにフィールド欠落ffprobe input.mp4

よくある質問

analyzeduration と probesize は -i の前後どちらに置きますか

-i の前です。これらはファイルの開き方とプローブを制御する 入力 オプションなので、適用したい入力より前に置く必要があります。-i の後に置いてもプローブには効きません。

probesize を100Mにしてもまだ失敗します。次にどうすれば

その場合、ファイルはプローブ不足ではなく切れている・破損している可能性が高いです。再エンコードのフォールバック ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac output.mp4 で有効な部分を救出してみてください。それすら失敗するなら、ストリームのデコードに必要な元データが本当に欠けています。

このエラーはFFmpegにコーデックが無いという意味ですか

いいえ。「Could not find codec parameters」はストリームの設定をプローブする話で、デコーダの欠如とは別です。コーデック自体が非対応なら、未知・非対応コーデックに関する別のメッセージが出ます。どのストリームが読めないかは ffprobe で確認してください。

ffprobe でストリームは見えるのにパラメータが出ないのはなぜですか

それは同じプローブ問題が診断という形で現れたものです。FFmpegはストリームの存在は検出したものの、解像度やサンプルレートなどを埋めるだけ読めなかったのです。-analyzeduration-probesize を増やすか、再エンコードすれば、たいてい出力にこれらのパラメータが埋まります。生(raw)や特殊な入力では、入力のフォーマット・解像度・フレームレートを明示する必要がある場合もあります。


関連記事


動作確認: ffmpeg 8.1 (検証スクリプトで実行確認)
一次ソース: ffmpeg.org/ffmpeg.html / ffmpeg.org/ffmpeg-codecs.html