web-dev-qa-db-ja.com

ffprobeが誤ったフレーム数を報告するのはなぜですか?

Ffprobeが次のように説明している小さなビデオファイルがあります:-

Input #0, avi, from 'sample.avi': 
Metadata: 
encoder : Lavf55.12.100 
Duration: 00:00:35.00, start: 0.000000, bitrate: 546 kb/s 
Stream #0:0: Video: msmpeg4v3 (MP43 / 0x3334504D), yuv420p, 320x240, 
             506 kb/s, 200 fps, 200 tbr, 200 tbn, 200 tbc 

ビデオは35秒なので。長く、フレームレートが200 fpsの場合、ビデオには(35 x 200)= 7000フレームになると思います。

Ffmpegを使用して実際にビデオからフレーム画像を抽出すると、実際には6999枚の画像が得られます(十分に近いと思います)。これに使用するコマンドは次のとおりです。-

c:\> ffmpeg -i sample.avi  -f image2 -c:v png Img%%04d.png

注:コマンドをWinXP CLIから実行する場合は、「%%」が必要です。

ただし、次のコマンドを使用します。-

c:\> ffprobe -select_streams v -show_frames sample.avi > frames.lis 

また、frames.lisに含まれる[FRAME]アイテムの数をカウントすると、7000ではなく1023フレームのフレームカウントが得られます。

説明はありますか?

同じように動作する非常によく似たファイルへのリンクは次のとおりです(〜7MB)。

http://www.filedropper.com/sample_65

ページの「このファイルをダウンロード」画像を左クリックします。

WinXP-SP3でffmpeg'ffprobe 'の17APR2014静的Win32ビルドを使用しています。

別の方法がある場合は、主に、別のアプリケーションで使用する一連のビデオファイルの「フレーム番号」と「時間」の表を作成しようとしています。

ありがとう。

3
Skeeve

1023が正しくない理由はありますか?参照しているfpsはヘッダー情報であるため、簡単に正しくない可能性があります。

Pngの出力に、重複するフレームがたくさんありますか? Ffmpegはあなたに好意を示し、報告されたfpsと期間に一致するようにコピーされたフレームを出力している可能性があります。

Ffprobeを使用することが私の推奨される解決策です。実際にフレームをデコードしてカウントしない限り、100%の確率で確認することは困難です。したがって、-count_framesまたは-show_framesを使用すると、探している番号が得られます。

注:記載されている期間が正確であるという保証はありません。

1
dstob