ffmpeg keyframe extraction

Shikhar Shrivastav picture Shikhar Shrivastav · Sep 22, 2012 · Viewed 10.9k times · Source

I have been trying to extract keyframes from video using ffmpeg 0.11.1 . So far all the commands I have tried do not extract keyframes but return all the frames ie 25fps*total time number of frames in the output. I tried setting the keyint_min as 25 to make sure there is a amximum of 1 keyframe per second.

ffmpeg -vf select="eq(pict_type\,PICT_TYPE_I)" -g 250 -keyint_min 25 -i C:\test.mp4 -vsync 2 -f image2 C:\testTemp\thumbnails-%02d.jpeg

But still all the frames are returned.

Then i tried, to separate the keyframes by 20 seconds.

ffmpeg -i C:\test.mp4 -vf select='eq(pict_type\,I)*(isnan(prev_selected_t)+gte(t-prev_selected_t\,20))' -vsync 0 -f image2 C:\testTemp\%09d.jpg

Again same result, all the frames are returned.

What should I do?

Answer

llogan picture llogan · Sep 22, 2012

In your first command you are using the filter as an input option. I don't know how ffmpeg will interpret that.

Try this:

ffmpeg -i C:\test.mp4 -vf select='eq(pict_type\,I)',setpts='N/(25*TB)' C:\testTemp\%09d.jpg

Change 25 to the frame rate of your source: 30000/1001 for NTSC video, 24000/1001 for NTSC film, 25 for PAL, etc.

Control output quality with the -q:v or -qscale:v option (just called -qscale in old ffmpeg). Range for mpeg* is 1-31 where 31 is the worst quality.

Next time remember that ffmpeg usage questions are to be asked at superuser.com since stackoverflow is specifically for programming.