2016-12-30 3 views
0

私はflvビデオを持っていて、3sの最初のキーフレームの後のビデオの長さを00:39の後で打ち切りたいとします。私は映画の冒頭から 第二十三分で1つの画像フレーム(out1.jpg)を生成しますffmpeg seekingdocument、ここffmpeg PICT_TYPE_Iキーフレームを検索した後のビデオのダンプの長さ

ffmpeg -ss 00:23:00 -i Mononoke.Hime.mkv -frames:v 1 out1.jpg

この例で見積もりを準備ができて。入力はキーフレームを使用して解析された になります。これは非常に高速です。 FFmpeg 2.1以降、 ffmpegによるトランスコード(ストリームコピーだけでなく)の場合、-ssは入力オプションとして使用されても「フレーム精度」である になりました。以前の の動作(精度が正確に でない場合でも、最も近い直前のキーフレームのみを検索する)は、-noaccurate_seekオプションを使用して復元できます。

だから私は、私は、このコマンドを使用する場合(-i-ssを入れて)だと思う

ffmpeg -noaccurate_seek -ss 00:39 -i input.flv -r 10 -s 720x400 -t 3.12 dump.flv 

そして、これは3.12sを最後のビデオをダンプし、右00:39後の最初のkeyframeで始める必要がありますか?結局のところ、これは私が必要なものです。

結果はdump.flvで始まり、keyframeで始まらず、つまりPICT_TYPE_Iフレームです。

私はすべてkeyframe開始時間がffprobeであることを知り、これを達成するための時間を求める-ssを再計算することができます。しかし、より良い方法がありますか?

+0

音声もありますか? – Mulvya

+0

いいえ、音声は問題ありません – armnotstrong

答えて

0

オーディオは関係ないのであれば、あなたはここで

ffmpeg -ss 39.00 -i in.flv -vf select='if(eq(pict_type,I),st(1,t),gt(t,ld(1)))',setpts=N/FRAME_RATE/TB -an -t 3.12 out.flv 

を使用することができ、選択フィルタは、シークポイントの後にある最初のキーフレームの前にすべてのフレームを破棄します。 tの値は、選択した合計期間を制御します。

動画の再生時間は量子化されます。つまり、25fpsの動画の再生時間は0.04秒単位です。

関連する問題