FFmpeg を使用してビデオから画像を抽出する高速な方法

FFmpeg を使用してビデオから画像を抽出する高速な方法

FFmpeg を使用して、6 秒ごとに 1 フレームずつビデオから画像を抽出しています。

Normal command on Dos ( Windows 8 OS) >  ffmpeg -i in.mkv -r 1/6 %4d.png

速度が 15 ~ 20 程度と非常に遅いため、時間がかかりすぎます。

そこで私はskip_frame nokey

ffmpeg -skip_frame nokey -i "in.mkv" -vsync 0 -frame_pts true -r 1/6 %4d.png

これにより、約 200 倍 (10 倍高速) で抽出されます。
ただし、多くの画像がスキップされ、エラーが発生するという問題があります。

アプリケーションはストリーム内のマルチプレクサに無効な非単調増加 dts を提供しました

そこで私は次のコマンドを使用しました:

ffmpeg -i in.mkv -vf "select='if(not(floor(mod(t,6)))*lt(ld(1),1),st(1,1)+st(2,n)+st(3,t));if(eq(ld(1),1)*lt(n,ld(2)+1),1,if(trunc(t-ld(3)),st(1,0)))'" -vsync 0 %4d.png

(ここに提供 -FFmpeg を使用して、X 秒ごとに最初の X フレームを PNG にキャプチャするにはどうすればよいですか?

これにより、速度は 25 ~ 30 になります。

でより高速化できる方法はありますか-skip_frame?

答え1

上記の元の投稿で投稿したコードは、これまで私が見つけた、より高速な画像抽出のための唯一のソリューションです。速度が最大 50 まで上がることもあります。

ffmpeg -i in.mkv -vf "select='if(not(floor(mod(t,6)))*lt(ld(1),1),st(1,1)+st(2,n)+st(3,t));if(eq(ld(1),1)*lt(n,ld(2)+1),1,if(trunc(t-ld(3)),st(1,0)))'" -vsync 0 %4d.png

より高速な処理を実現するためにランダムな画像抽出 (キーフレームに基づく) を行う場合は、-skip_frame nokey を使用します。

関連情報