Online Video Frame Grabber - Extract Frames from Video
Extract high-quality frames from any video file directly in your browser. Grab single or batch frames as PNG/JPEG/WebP. No upload, fully offline.
Drop a video file here or browse
MP4, WebM, MOV, OGG supported
About
Extracting a single frame from a video stream requires sub-second temporal precision. A 30 fps video contains 1800 individual frames per minute. Selecting the wrong frame - even 33 ms off - produces motion blur or closed eyes in a portrait still. This tool renders the exact frame at time t by seeking the browser's native decoder and drawing the decoded pixel buffer onto a Canvas element at the video's original resolution. Output quality depends on codec: H.264 keyframe intervals (typically every 2 - 5 s) mean inter-frame seeks may show minor decode artifacts on older browsers. For critical work, seek to the nearest keyframe first.
Batch extraction divides the video duration into n equal segments and captures one frame per interval. All processing runs client-side. Your video never leaves your device. Supported containers depend on your browser's built-in codecs - Chrome handles WebM/VP9 and MP4/H.264; Safari prefers MP4/H.264/HEVC. This tool approximates frame position using the currentTime property, which has millisecond granularity but not sample-accurate precision. For frame-exact editing, a non-linear editor is required.
Formulas
Frame timestamp from batch index:
ti = in × Dwhere ti = seek time for frame i, n = total number of frames to extract, D = video duration in seconds, and i ∈ {0, 1, ..., n − 1}.
Canvas pixel capture is performed via:
ctx.drawImage(video, 0, 0, W, H)where W = video.videoWidth and H = video.videoHeight. The canvas dimensions match the native video resolution to prevent scaling artifacts.
JPEG/WebP file size approximation:
S ≈ W × H × 3 × (1 − q) byteswhere q ∈ [0, 1] is the compression quality parameter. This is a rough heuristic. Actual size varies with scene complexity.
Reference Data
| Container | Common Codecs | Typical FPS | Keyframe Interval | Chrome | Firefox | Safari | Max Resolution (Common) |
|---|---|---|---|---|---|---|---|
| MP4 | H.264, H.265 | 24 - 60 fps | 2 - 5 s | ✔ | ✔ | ✔ | 8192 × 4320 |
| WebM | VP8, VP9, AV1 | 24 - 60 fps | 2 - 10 s | ✔ | ✔ | ✘ | 7680 × 4320 |
| MOV | H.264, ProRes | 24 - 120 fps | 1 - 5 s | Partial | ✘ | ✔ | 4096 × 2160 |
| AVI | MPEG-4, DivX | 24 - 30 fps | Every frame | ✘ | ✘ | ✘ | 1920 × 1080 |
| OGV | Theora | 24 - 30 fps | 4 - 8 s | ✔ | ✔ | ✘ | 1920 × 1080 |
| MKV | H.264, VP9 | 24 - 60 fps | Varies | Partial | Partial | ✘ | 7680 × 4320 |
| 3GP | H.263, H.264 | 15 - 30 fps | 1 - 3 s | ✔ | ✔ | ✔ | 1280 × 720 |
| FLV | Sorenson, VP6 | 24 - 30 fps | 2 s | ✘ | ✘ | ✘ | 1920 × 1080 |
| Output Format Comparison | |||||||
| PNG | Lossless | ~2 - 8 MB per 1080p | Best for screenshots, UI, text overlays | ||||
| JPEG | Lossy (0 - 100%) | ~100 - 500 KB per 1080p | Best for photos, thumbnails, web | ||||
| WebP | Lossy/Lossless | ~80 - 400 KB per 1080p | Best compression-to-quality ratio | ||||