Pulling images out of a video is one of FFmpeg's most useful tricks — for poster frames, thumbnails, dataset frames, or just grabbing a clean still. The key levers are seeking (-ss), how many frames to take (-frames:v or fps), and an output filename pattern.
Key takeaways
- Use
-ssto seek to a timestamp,-frames:v 1for a single still. fps=1exports one frame per second;fps=1/5one every five.- Output a numbered pattern like
frame_%04d.jpgfor sequences. - The
thumbnailfilter auto-selects a representative frame.
A single frame at a timestamp
Seek to 10 seconds and write exactly one high-quality JPEG:
ffmpeg -ss 00:00:10 -i in.mp4 -frames:v 1 -q:v 2 frame.jpg
Putting -ss before -i seeks fast. Lower -q:v means higher quality (2 is excellent for JPEG).
One image per second
The fps filter controls sampling rate. This writes a numbered sequence, one frame per second:
ffmpeg -i in.mp4 -vf "fps=1" frame_%04d.jpg
For one frame every 5 seconds use fps=1/5; for 2 per second use fps=2.
Every Nth frame
To keep, say, every 30th frame regardless of frame rate, use select:
ffmpeg -i in.mp4 -vf "select=not(mod(n\,30))" \ -vsync vfr frame_%04d.png
Extract every single frame
ffmpeg -i in.mp4 frame_%06d.png
Use a wide counter (%06d) so frames sort correctly for long clips.
Auto-pick a representative thumbnail
The thumbnail filter analyzes a batch of frames and chooses the most representative one — great for an automatic poster image:
ffmpeg -i in.mp4 -vf "thumbnail=n=100,scale=640:-1" \ -frames:v 1 thumb.jpg
Make a contact sheet (tiled grid)
The tile filter packs frames into a single montage image:
ffmpeg -i in.mp4 -vf "fps=1/10,scale=320:-1,tile=4x4" \ -frames:v 1 sheet.png
Grab stills on a timeline
FFmpegLab lets you scrub to any point and export a still, generating the exact seek command behind the scenes — and because it runs offline, frames from sensitive footage never leave your device. Need to cut first? See the trim & cut guide.