Selecting one every n frames from a video using ffmpeg

The image2 muxer defaults to constant frame rate. So if the input is, say, 30 fps, and you select every 10th frame i.e. frames with timestamp 0s, 0.33s, 0.66s.. then ffmpeg will duplicate frames to match the input rate so duplicate 9 frames for every input frame.

Way to avoid that is to set video sync method to passthrough or variable frame rate

e.g.

ffmpeg -i input.mp4 -vf "select=not(mod(n\,10))" -vsync vfr 1_every_10/img_%03d.jpg

This can potentially affect the full extraction if the input is VFR. So, use

ffmpeg -i input.mp4 -vf select -vsync vfr all/img_%03d.jpg