If you want to extract just a single frame from the video into an image file, you can use the following command line:
ffmpeg -i input.flv -ss 00:00:14.435 -f image2 -vframes 1 out.png
This will seek to the position of 0h:0m:14sec:435msec into the movie and extract one frame (-vframes 1) from that position into a png file.
But, what if you want to extract thumbnails periodically? This will create one thumbnail image every second, named out1.png, out2.png, out3.png, ...
ffmpeg -i input.flv -f image2 -vf fps=fps=1 out%d.png
This will create one thumbnail image every minute, named img001.jpg, img002.jpg, img003.jpg, ... (%03d means that ordinal number of each thumbnail image should be formatted using 3 digits)
ffmpeg -i myvideo.avi -f image2 -vf fps=fps=1/60 img%03d.jpg
This will create one thumbnail image every 10 minutes, named thumb0001.bmp, thumb0002.bmp, thumb0003.bmp, ...
ffmpeg -i test.flv -f image2 -vf fps=fps=1/600 thumb%04d.bmp
This will create one thumbnail image every I-frame, named thumb0001.bmp, thumb0002.bmp, thumb0003.bmp, ...
ffmpeg -i input.flv -f image2 -vf "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr thumb%04d.png
Explanation: By telling FFmpeg to set the output file's FPS option (frames per second) to some very low value, we made FFmpeg drop a lot of frames at the output, in order to achieve such a low frame rate, effectively having our thumbnails generated every X seconds :)
See also: Create a video slideshow from images


