How to extract frames from a video
Three approaches that all produce identical pixels. The differences are in effort, batching and how easy it is to land on the right frame.
Free toolVideo Frame ExtractorFrame-accurate stills from MP4, WebM and MOV files at true native resolution. Batch export included.Open the extractorQuick comparison
| Browser (floi) | ffmpeg | VLC | |
|---|---|---|---|
| Install needed | None | Yes | Yes |
| Frame-accurate | Yes | Yes | Roughly |
| Batch / interval | Yes | Yes | Yes (awkward) |
| Visual frame picking | Yes | No | Yes |
| Output format choice | PNG / JPG / WebP | Anything | PNG / JPG |
| Handles any codec | Browser-supported only | Yes | Yes |
1. In the browser
Drop the file into the frame extractor. Your browser decodes it locally. Nothing uploads, so even a 10 GB file opens instantly. Scrub to roughly the right place, then step one frame at a time with the arrow keys and press C.
Best when you need to see the frame you are choosing. Limited to codecs your browser can play, which in practice means H.264 MP4, VP9/AV1 WebM and most MOV files. MKV and AVI usually will not open.
2. ffmpeg
The precise, scriptable option. The commands worth knowing:
One frame at a timestamp
ffmpeg -ss 00:01:23.500 -i input.mp4 -frames:v 1 -q:v 2 out.jpg-ss before -i seeks by jumping to the nearest keyframe first, which is dramatically faster on long files. Add -accurate_seek to keep it exact.
Lossless PNG instead
ffmpeg -ss 00:01:23.500 -i input.mp4 -frames:v 1 out.pngOne frame every N seconds
ffmpeg -i input.mp4 -vf fps=1/5 frame_%05d.pngfps=1/5 means one frame every five seconds. fps=2 means two per second.
Only the scene changes
ffmpeg -i input.mp4 -vf "select='gt(scene,0.4)'" -vsync vfr shot_%03d.pngExcellent for building a shot list. Raise the threshold to catch fewer cuts.
A contact sheet
ffmpeg -i input.mp4 -vf "fps=1/60,scale=320:-1,tile=4x4" sheet.png3. VLC
Already installed on a lot of machines. Play the video and press Shift + S (Windows/Linux) or Cmd + Alt + S(macOS) to drop a snapshot into your Pictures folder.
For a series, use Tools → Preferences → Video → Filters → Scene filter. It works, but the configuration is buried and frame-stepping only moves forward.
Things that quietly cost you quality
- Screenshotting the player instead of extracting. A screenshot is capped at your display resolution; extraction gives you the video's real resolution.
- Saving to JPG by habit. The frame already carries the video codec's artefacts. A JPG re-encode stacks a second set on top.
- Trusting a fixed 1/30s step. On 24, 25, 50 or 60 fps footage that lands between frames. Detect the real rate. floi shows it next to the timecode.
- Extracting every frame when you wanted a sample. One minute of 4K at 30fps is 1,800 PNGs and tens of gigabytes.