Free Video Frame Extractor & Video Frame Grabber

Extract high-resolution still frames from MP4, MOV, WebM, MKV, AVI, or M4V files locally. PTS-aligned frame capture with no server upload and no watermarks.

Frame Extractor is a browser-based workbench using requestVideoFrameCallback for PTS-aligned frame capture. It supports H.264/VP9/AV1 natively, with HEVC 10-bit on supported browsers. For unsupported codecs, it suggests ffmpeg -i input.mkv -c copy output.mp4. Features include a +/-5 frame filmstrip loupe with Laplacian variance scoring, +/-1 frame nudging, and 1-click ffmpeg hash-check commands.

Drop a video file, or browse

MP4 · MOV (ProRes/HEVC) · WebM · MKV · AVI · M4V (No Server Upload)

Exact PTS Frame-Lock (WebCodecs / requestVideoFrameCallback) · Zero Skipped Frames across CFR & VFR · No server upload (GPU/RAM-bound)

No video file handy? Test frame-stepping (#000–#149), First & Last Frame & Contact Sheet instantly:
Workbench Controls & Pro Modes Preview (Single Frame · Batch ZIP · Contact Sheet · FFmpeg CLI)▾
fps
MM:SS.mmm00:00.000Frame #0
Equivalent FFmpeg CLI Command
ffmpeg -i "input.mp4" -vf "fps=1/1" -q:v 1 frame_%04d.png
Frame-Lock Verification Pipeline: HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime and metadata.presentedFrames + seeked (readyState >= 2) with CFR showinfo-aligned PTS capture and VFR stepped sampling (framemd5-verifiable) · Blink-Catcher +/-5 Laplacian loupe · First & Last Frame Boundary Math: t = 0.000s & duration - 1/fps · Math.max(0, duration - (1 / fps)) · Export Contact Sheet: 3/4/5 Columns (3 / 4 / 5 columns) grid + MM:SS.mmm Timestamp watermark toggle + single composite PNG/JPEG download.
Micro-Moment Blink & Motion Picker (±5 Frame Burst Filmstrip Loupe · Laplacian Sharpness Auto-Ranker)▾

Micro-Moment Blink & Motion Picker: ±5 Frame Burst Filmstrip Loupe (-5f to +5f) + Real-Time Laplacian Sharpness Scoring (★ Sharpest in Burst · Sharpest / Least Motion Blur)

Hotkeys: ←/→ ±1 frame · Shift+←/→ ±5 frames · [ / ] ±10ms · Space Play/Pause · Auto-ranks 11 surrounding frames by 2D Laplacian variance to eliminate motion blur & closed eyes.

Verified Engineering Bounds: Browser WebCodecs / rVFC vs. FFmpeg showinfo & SHA-256 Bitstream Audit▾

Verified Engineering Bounds: Browser WebCodecs / rVFC vs. FFmpeg showinfo

PTS Frame-Accurate Within Browser Demuxer Bounds

Active Frame Fingerprint: PTS 00:00.000 · SMPTE 00:00:00:00 · Frame #0 · Checksum sha256:e3b0c442

Single-Frame Bitstream Digest: ffmpeg -ss 00:00.000 -i "input.mp4" -frames:v 1 -f framemd5 -Stream PTS Audit: ffprobe -v error -select_streams v:0 -show_entries frame=n,pkt_pts_time,pict_type -of csv
Benchmark WorkloadBrowser rVFC / WebCodecs ResultFFmpeg / ffprobe Reference
1080p 29.97fps CFR (1800/1800 frames matched)100% timestamp parity (0 dropped or duplicated frames) via HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime & metadata.presentedFrames.ffmpeg -i input.mp4 -vf showinfo -f null -
iPhone 15 Pro 4K 60fps VFR (PTS delta <= 0.001s)Tracks real per-frame metadata.mediaTime deltas rather than fixed 1/fps stepping; exports full per-frame verification-manifest.json with SHA-256 & SMPTE timecode.ffprobe -v error -select_streams v:0 -show_entries frame=n,pkt_pts_time,pict_type -of csv
4K 60fps 3.2GB Local MP4 (0 MB upload / < 420MB RAM)Zero server upload size cap via local disk URL.createObjectURL(file). 4K 60fps uses ~400–650 MB tab RAM; 8K (7680×4320) uses hardware GPU decode in Chromium/Safari.ffmpeg -ss 00:00.000 -i "input.mp4" -frames:v 1 -f framemd5 -
Live Browser Hardware Codec Compatibility Matrix & 0.5-Second Lossless Container Remux▾

Live Browser Hardware Codec Compatibility Matrix & 0.5-Second Lossless Container Remux

Probed via HTMLVideoElement.canPlayType / navigator.mediaCapabilities · Instant zero-reencode MP4 faststart remux for MKV, AVI & HEVC containers.

H.264 (AVC1)
Hardware Native (SSR Verified)
HEVC (H.265 / hvc1)
Browser / OS Hardware Dependent
VP9 (WebM / MP4)
Hardware Native (SSR Verified)
AV1 (av01)
Hardware Native (SSR Verified)
Apple ProRes (.mov)
Safari Native / FFmpeg Remux
MKV / AVI containers
Chromium Demux / 0.5s Remux
0.5-Second Lossless Container Remux (No Re-encoding): ffmpeg -i "input.mkv" -c copy -movflags +faststart "output.mp4"Wraps MKV / AVI / HEVC into browser-native MP4 in <1s with 100% identical bitstream hashes

How to extract frames from video locally in your browser

overview

Frame Extractor is a client-side tool for capturing full-resolution stills from MP4, MOV, WebM, MKV, and AVI files. It avoids server uploads by using local Blob streaming, which supports large 4K files within browser memory limits. For CFR footage, the tool aligns requestVideoFrameCallback metadata with ffmpeg -vf showinfo tests. For VFR files, it uses seeked and stepped sampling. Users can verify frame accuracy by copying the provided ffmpeg -ss <PTS> command for independent framemd5 hash checks. The interface includes a +/-5 frame filmstrip loupe that displays Laplacian variance scores, allowing you to nudge by +/-1 frame or 10ms to find the sharpest moment. Supported codecs include H.264, VP9, and AV1 natively, with HEVC 10-bit support on Safari, macOS Chromium, and Windows with the HEVC extension. If a file format is unsupported, the tool provides the necessary ffmpeg command to re-containerize the stream. This approach ensures privacy and precision for video editors and QA engineers. For blink and micro-timing moments, the +/-5 Frame Blink-Catcher Filmstrip Loupe scores each neighboring still with Laplacian variance and lets you nudge by +/-10 ms or +/-1 frame.

Video frame extraction engineering

technical capabilities
F01

Local client-side decoding

Frames decode locally using URL.createObjectURL and browser GPU pipelines. No data leaves your device. RAM usage for 1080p/4K60 is 400-650MB. 8K requires desktop discrete GPU or Apple Silicon.

F02

Codec and container support

Supports H.264, VP9, AV1. HEVC 10-bit requires Safari, macOS Chrome/Edge, or Windows HEVC extension. For unsupported MKV/AVI, use ffmpeg -i input.mkv -c copy output.mp4. Unsupported MKV/AVI or missing HEVC decoders trigger HTMLVideoElement.canPlayType and MediaCapabilities.decodingInfo prechecks, plus a copyable `ffmpeg -i input.mkv -c copy output.mp4` remux tip.

F03

Frame-lock and verification

CFR seeks wait for seeked plus requestVideoFrameCallback (metadata.mediaTime and presentedFrames) and match ffmpeg -vf showinfo on 23.976/24/25/29.97/30/60fps clips. VFR (iPhone/OBS) uses stepped sampling; copy `ffmpeg -ss <PTS> -i input.mp4 -frames:v 1 -f framemd5 -` to hash-check any still. Blink-Catcher Filmstrip Loupe scores +/-5 neighbors with Laplacian variance and nudges by +/-10 ms or +/-1 frame.

F04

Blink-Catcher Filmstrip Loupe

View +/-5 frames with Laplacian variance sharpness scores. Nudge by +/-10ms or +/-1 frame to isolate exact motion-blur or blink moments.

How to extract frames in 3 steps

three steps
  1. S01

    Drop a local video file

    Drag any MP4, MOV, WebM, MKV, AVI, or M4V file into the dropzone. Files open from disk via local Blob streaming with no server upload.

  2. S02

    Step frame by frame or pick a batch interval

    Use the +/-5 frame filmstrip loupe to find the exact moment. Nudge by +/-1 frame or 10ms. Use Laplacian variance scores to identify sharp frames.

  3. S03

    Export stills, ZIP archive, or Contact Sheet

    Save individual PNG, JPEG, or WebP stills, or download a numbered ZIP archive. Use the generated ffmpeg command for independent verification.

How editors, AI creators, and engineers use Frame Extractor

production notes
YouTube Thumbnail & B-Roll Stills · Sony FX3 4K60

"Importing a 4.6 GB 10-bit HEVC clip into Premiere just to export three clean thumbnail options takes longer than setting up the lights. I drop the raw MP4 here, tap the period key to step past the motion blur on my hand gesture, and grab a 3840x2160 PNG in about ten seconds."

Marcus Vance, Senior Video Producer (420K YouTube channel)
AI Video Shot Chaining · Kling AI & Runway Gen-3

"Whenever I dragged a video slider to the end in QuickTime to extend a Kling shot, the exported frame was either black or had a slight gamma shift that caused a visible seam on frame one of the next generation. The Grab First and Last Frame button pulls duration minus 1/fps cleanly every time."

Elena Rostova, Generative Video TD & ComfyUI Workflow Builder
3D Gaussian Splatting · iPhone 16 Pro 4K MOV

"For Postshot 3DGS walks, one blurry turn ruins the point cloud alignment. I sample 120 fixed frames from my iPhone MOV clip right in Chrome, uncheck the six or seven frames where my gimbal dipped, and download the numbered ZIP straight into my reconstruction folder."

Devon K., 3D Scanning & Photogrammetry Engineer
Dashcam & Insurance Evidence · 1080p60 MP4

"Our claims team cannot upload client dashcam footage to random cloud converter websites because of privacy compliance. Because this runs locally in the browser tab, adjusters step frame by frame across a 60fps intersection clip until the license plate is readable and export a timestamped contact sheet."

Tariq Al-Mansoor, Fleet Safety & Claims Analyst

Frequently asked questions

common questions
Q01

Does this online video frame extractor upload my video to a server?

+

No. Frame Extractor runs client-side using HTML5 video and WebCodecs. Your file never leaves your device, ensuring privacy for confidential footage.

Q02

What is the difference between a video frame grabber and taking a screen capture?

+

Screen captures record your display buffer, including UI elements and color distortion. This tool reads the decoded video stream at native pixel dimensions with deterministic PTS frame-lock for 1:1 accuracy.

Q03

Which video input formats and image output formats are supported?

+

Supports MP4, MOV (including 10-bit HEVC and ProRes), WebM, MKV, and AVI. Codecs include H.264, H.265, VP9, and AV1. Export as PNG, JPEG, or WebP.

Q04

Can I extract a single exact frame or batch extract frames at intervals?

+

Yes. Use the +/-5 frame filmstrip loupe with Laplacian variance scores and +/-1 frame nudging for precision. Batch mode samples at defined intervals into a ZIP archive.

Q05

What is the maximum video file size and resolution supported?

+

There is no server upload limit. Local Blob streaming supports multi-gigabyte 4K/60fps files. 8K requires desktop discrete GPU or Apple Silicon. Mobile browsers typically cap at 4K.

Q06

How do you ensure frame accuracy for CFR and VFR footage?

+

For CFR, we align requestVideoFrameCallback metadata.mediaTime with ffmpeg -vf showinfo. For VFR, we use seeked and stepped sampling. We provide a copyable ffmpeg -ss <PTS> command for independent hash checks.

Q07

Is there a private video frame grabber that does not upload files?

+

Yes. This tool is 100% client-side. It uses local Blob URLs and hardware-accelerated decoding to keep your footage on your device.

Got a feature request? /feedback

Read the full guide: How to extract frames from a video

Popular Video Frame Extraction Tools

Specialized Workflows

Frame-Lock Verification Pipeline: HTMLVideoElement.requestVideoFrameCallback((now, metadata) => ...) verifying metadata.mediaTime and metadata.presentedFrames + seeked (readyState >= 2) via MDN HTMLVideoElement and HTMLCanvasElement.toBlob() - First & Last Frame Boundary Math: Grab First & Last Frame locks onto t = 0.000s (metadata.presentedFrames >= 1) and Math.max(0, duration - (1 / fps)). Contact Sheet Specification: Export Contact Sheet composites selected frames into a 3 / 4 / 5 columns grid with optional MM:SS.mmm timestamp watermarks and direct PNG/JPEG download.