ffmpeg: フレームを抽出し、正確なタイムスタンプを取得する

ffmpeg: フレームを抽出し、正確なタイムスタンプを取得する

私はフレームを抽出しようとしています可変フレームレート5 秒ごとにビデオを再生し、各フレームの正確なタイムスタンプを取得します。これがこれまでの結果です:

-i inputfile -vstats_file vstats.log  -vsync 2 -vcodec png -r 0.2 -f image2pipe -

そして、これが私が得たものです:

frame=     1 q= 0.0 f_size= 136261 s_size=      133kB **time= 5.000** br=   218.0kbits/s avg_br=   218.0kbits/s type= I
frame=     2 q= 0.0 f_size= 139382 s_size=      269kB **time= 10.000** br=   223.0kbits/s avg_br=   220.5kbits/s type= I
frame=     3 q= 0.0 f_size= 141631 s_size=      407kB **time= 15.000** br=   226.6kbits/s avg_br=   222.5kbits/s type= I

抽出に使用されたフレームの正確なタイムスタンプが必要なので、後で生成されたサムネイルに基づいてビデオを正確にカットできます。

また、vstats をファイルではなく stdout に印刷する方法はありますか?

答え1

何を試したのか分かりませんが、それがうまくいっているのであれば大丈夫です...

とにかく、フレームをスキップするには選択するビデオフィルター(libavfilterが有効になっていることを確認してください)。フレーム情報には情報を表示ビデオフィルター。

コマンドは次のようになります。

ffmpeg -i inputfile -vf '[in]select=not(mod(n\,150))[s1];[s1]showinfo[out]' -vcodec mpeg2video outputfile

(150フレームは5秒×30fps)

関連情報