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


4

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に出力する方法はありますか?


コマンドラインツールである限り、ffmpeg以外のソリューションでも問題ありません。
マンゴー

回答:


2

私はあなたが何をしようとしたのか分かりませんが、それがあなたのために働くならそれは大丈夫です...

とにかく、フレームをスキップするには、SELECTビデオフィルターを使用します(libavfilterが有効になっていることを確認してください)。フレームの場合、infoIはSHOWINFOビデオフィルターを使用します。

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

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

(150フレームは5秒* 30fpsです)


2
showinfoはまさに私が必要としていたものです、ありがとう。ちなみに、可変フレームレートのビデオの場合、select='isnan(prev_selected_t)+gte(t-prev_selected_t,5)'5秒ごとにフレームを取得していました。
マンゴー

@Mango 'isnan(prev_selected_t)+ gte(t-prev_selected_t、5)'このフィルターは私には機能しませんが、まだ有効ですか?
ベンダフ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.