使用 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(快十倍)。
但問題是它會跳過許多圖像,並引發錯誤:

應用程式向流中的複用器提供了無效的、非單調遞增的 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。

相關內容