By Updated

Video Frame Extractor

Extract still frames from any video as PNG or JPG: every N seconds, every N frames, at a single timestamp, or N evenly-spaced thumbnails. Runs entirely in your browser via ffmpeg.wasm. Downloads as a ZIP.

Interactive tool

ffmpeg.wasm engine loads on first run (~32 MB)

The engine is cached for the rest of your session. Every transcode runs entirely in your browser: files never leave your device.

Threading: detecting…

Drop a video here

Up to 250 MB / 5 minutes. The file never leaves your browser.

What is the Video Frame Extractor?

A free, in-browser tool that pulls still frames from any video as PNG or JPG. Pick "every N seconds", "every N frames", a single timestamp, or N evenly-spaced thumbnails. Frames download as a ZIP and a preview grid. No upload.

How to Use the Frame Extractor

  1. 1Drop a video file (mp4, webm, mkv, mov)
  2. 2Pick the extraction mode (every N s / every N frames / single / N evenly-spaced)
  3. 3Pick PNG (lossless) or JPG (smaller)
  4. 4Click Extract: your frames appear as a thumbnail grid
  5. 5Download the ZIP or any individual frame
What you get

Key features

Four extraction modes

Every N seconds, every N frames, single timestamp, or N evenly-spaced thumbs

PNG (lossless) or JPG (tunable)

PNG for archival, JPG with -q:v 1-31 quality for smaller batches

Thumbnail-grid preview

Glance at every extracted frame before downloading

ZIP bundle + per-frame downloads

Grab the whole batch or just the frame you need

Multi-threaded ffmpeg.wasm

Uses SharedArrayBuffer when available for faster decoding

100% private

No upload, no logs: the video stays in your browser

Why Extract Frames Locally?

Online frame extractors upload your full video, watermark thumbnails, or pad pages with ads. Doing it locally is faster on anything modest in size, keeps the source private, and gives you precise ffmpeg controls.

Common use cases

  • Pull a key frame from a screen recording to use as a CMS thumbnail
  • Generate 10 evenly-spaced storyboard frames for a meeting recap
  • Capture every 5th frame for a slow-motion animation reference
  • Grab the single best-looking frame at a known timestamp
  • Build a frame-by-frame contact sheet for QA / annotation

Mode cheatsheet

  • Every N seconds: best for "give me a thumbnail every minute of this talk"
  • Every N frames: best for animation work, where N = your source FPS
  • Single timestamp: exact poster-frame grabs
  • N evenly-spaced: best for storyboards and contact sheets

PNG vs JPG

PNG is lossless and best for archival or post-processing. JPG is smaller and lets you tune quality with the slider (lower = smaller; -q:v 4 is roughly visually lossless for photography).

Pro tips

Tips & best practices

Use evenly-spaced for storyboards

10 evenly-spaced frames from a 5-minute video give you a clean contact sheet without overthinking timestamps.

JPG quality 4-6 is the sweet spot

q:v 4 looks nearly lossless on photographic content, q:v 6 visibly softens but cuts size by another 40-60%.

PNG for UI captures, JPG for video

PNG handles flat-colour UI captures with crisp edges; JPG handles photographic gradients more efficiently.

Built for trust

Privacy & security

Extraction runs entirely in ffmpeg.wasm inside your browser. The source video is never uploaded, logged, or stored. ZIP packaging happens locally in your browser.

Frequently Asked Questions

What modes can I extract in?

Four modes: every N seconds, every N frames, a single timestamp, or N evenly-spaced thumbnails. Each maps directly to a small ffmpeg filter chain.

PNG or JPG?

PNG is lossless and best for archival, UI captures, or post-processing. JPG is smaller and exposes a -q:v 1-31 quality slider (lower = better).

How are frames bundled for download?

All extracted frames are packed into a single .zip with JSZip, locally in your browser. You can also click any thumbnail to download just that frame.

Does the file get uploaded?

No. Extraction runs locally via ffmpeg.wasm. The engine artefacts are served from the same origin under /ffmpeg/<version>/.

Why is the first run slower?

The ffmpeg.wasm core is ~32 MB and downloads only on demand. It is cached for the rest of the session after the first run.