Extract Frames from Video
Extract frames every N seconds or N evenly spaced frames, pull keyframe-only thumbnails, add timestamp overlays, and build a contact sheet. JPG, PNG, WebP.
About Extract Frames
This online tool extracts frames (images) from video files directly in your browser using HTML5 video decoding plus the WebCodecs API where supported - no upload, no server. Pull a frame every N seconds, a fixed number of evenly spaced frames, frames at a chosen FPS, every Nth frame at the source frame rate, or clean keyframe-only (I-frame) thumbnails. Add a timestamp overlay, embed the timestamp in each filename, build a single contact-sheet grid image, trim to a time range, and export as JPG, PNG, or WebP. All processing happens locally for complete privacy.
How does this tool actually extract frames - does it use FFmpeg?
No. It runs entirely in your browser with no server and no FFmpeg.wasm. By default it uses an HTML5 <video> element and the Canvas 2D API: it seeks to a target time, waits for the 'seeked' event, and draws the decoded frame onto a canvas. For the new keyframe-only and 'every Nth frame' modes it uses the WebCodecs VideoDecoder API (Chrome/Edge 94+ and other modern engines) to demux and decode the elementary stream, giving genuinely frame-accurate, keyframe-aware results. When WebCodecs is unavailable the tool gracefully falls back to the seek-based path, which is approximate. Nothing is uploaded - your file stays in memory on your device.
How do I get a frame-accurate extraction at an exact frame index?
Pick the 'Every Nth frame at source FPS' mode and set N (use N=1 for every frame). Where WebCodecs is supported, the tool decodes real VideoFrame objects in presentation order with exact timestamps, so frame index 0, N, 2N... map to true decoded pixels rather than an approximate seek. The plain interval and FPS modes are time-based: browsers seek to the nearest decodable position, so for variable-frame-rate (VFR) sources or sparse-keyframe encodes the captured pixels may not land exactly on the requested PTS. If you need ground-truth frames, use frame-step or keyframe mode in a WebCodecs-capable browser.
What does the keyframe-only (I-frame) toggle do?
Modern codecs store frames in a GOP (Group of Pictures). I-frames (intra-coded) are full standalone images - the largest and highest quality, with no inter-frame prediction error. P-frames store only differences from previous frames; B-frames reference both past and future frames. Enabling 'Keyframe (I-frame) thumbnails only' makes the tool select just the sync (key) samples while decoding via WebCodecs, so you get clean, high-fidelity images roughly every 2-4 seconds for typical web video - ideal for chapter markers, scene-change thumbnails, or storyboard candidates. This is real keyframe detection, not a guess.
What output format should I pick: PNG, JPEG, or WebP?
PNG is lossless: every pixel from the decoded frame is preserved exactly. Best for thumbnails you will edit, forensic frames, or images needing transparency; files are large (often 5-10x JPEG). JPEG uses lossy DCT compression that discards high-frequency detail most viewers never notice - use quality 85-95 for high-fidelity thumbnails and 70-85 for web previews where size matters. WebP supports both lossless and lossy modes, gives roughly 25-35% smaller files than JPEG at the same visual quality, and is supported by all modern browsers. Pick PNG for editing, WebP for web delivery, JPEG for universal compatibility.

How do I build a contact sheet (storyboard) in one image?
Choose how densely to sample - e.g. every 5 seconds for a quick index, or the keyframe-only toggle for scene thumbnails - then enable 'Generate contact sheet'. After extraction the tool tiles every captured frame into a single grid image with per-frame timestamp labels and offers a 'Download Contact Sheet' button. The grid aspect ratio is taken from the source video and the overall sheet size is clamped so large frame counts will not blow up browser memory. Lowering the frame size in Advanced Options also keeps the sheet compact for long videos.
Why might an MKV, AVI, WMV or FLV file fail to load?
This tool decodes with the browser's own video pipeline, so it can only open containers and codecs the browser natively supports: MP4 (H.264/H.265/AV1), WebM (VP8/VP9/AV1), MOV, M4V, and OGV. MKV, AVI, WMV, FLV and MPEG-2 are generally not decodable in-browser, so they may refuse to load or produce a blank canvas - the tool will tell you when a file cannot be decoded. Convert such sources to MP4 (H.264) or WebM first, then extract. This honesty is deliberate: we only advertise formats the engine can truly handle.
Why are my extracted frames blurry, or different from what I see when scrubbing?
Two separate issues. Blurriness usually means the source is low resolution or heavily compressed, you captured a P/B-frame with motion-prediction artifacts (use the keyframe-only toggle for cleaner images), the source is interlaced, or JPEG quality was set too low - try PNG or JPEG 90+. Scrub mismatch happens because players skip decoder warm-up and use their own seek heuristics; the pixels you see while scrubbing may be partially decoded or interpolated. The exported image is the decoded frame at the requested presentation timestamp. With VFR sources or B-frame reordering, time-based modes may land on a neighbouring frame - use the WebCodecs frame-step mode for the true frame.
What are the file-size and frame-count limits, and how do I work around them?
Inputs are capped at 100 MB and each run extracts at most 100 frames, both to protect browser memory (everything is held in RAM, never uploaded). For long videos: use the time-range trim to process a section at a time, raise the interval or frame step so 100 frames span the whole clip, or lower the frame resolution in Advanced Options. Download everything at once as a ZIP, grab individual frames from the preview gallery, or export a single contact-sheet image.
