Seams type
ffmpeg -i video.mp4 -vf select="eq(pict_type\,I)" -vsync 0 -an keyframes%03d.png
will do something. This is a video filter that selects only I-Frames , which are basically reference frames that appear every time significant changes occur.
More details here: http://ffmpeg.org/ffmpeg.html#select
This is especially true for MPEG-based compression, I donโt know how other codecs behave.
EDIT: as LordNeckbeard notes, the scene option, as in ffmpeg -i video.mp4 -vf select='gt(scene\,0.9)' -vsync 0 -an keyframes%03d.jpg , works better for what I intend.
source share