How to use this page
- Drop one local video, or choose it from the file picker.
- Read the size, duration, and any frame rate this page could parse from the file.
- Either take stills on a 1 / 2 / 5 / 10 / 30 second interval, or scrub the playhead and capture a single frame.
- Pick PNG or JPG (JPG quality applies to the next extract or capture, not to stills already on screen).
- Tick the frames you want. Download one image, or a ZIP of the selection.
What this video frame extractor will and will not do
This page is a video frame extractor for a single file. It draws the current decoded picture onto a canvas and saves that picture. It does not upload the video, open an account, keep a history, watermark the stills, or convert a file the browser cannot decode into a different codec.
Interval mode is the direct way to turn a video to frames at a steady spacing. Timeline mode is for grabbing one still at a time. Both stay on this page.
Supported containers — what the browser must be able to decode
You can point this page at MP4, MOV, MKV, WEBM, or AVI. That is the list of containers it will attempt. Decode is whatever this browser already ships. This page does not bundle FFmpeg and does not send the file to a converter.
Measured in Chrome on this Mac, 17 Sep 2026, with 6-second 640×360 test clips (10 fps):
- MP4 (H.264) — decoded. Sample table reported 10 fps and 60 frames. Interval extract produced 6 PNG stills.
- MOV (H.264) — decoded. Same clip in a QuickTime container.
- WEBM (VP9) — decoded.
- MKV (H.264) — decoded on this Chrome build. Other MKV codecs are untested here and may still fail.
- AVI (MPEG-4) — refused with
src not supported. The page still read 640×360, 10 fps, and 60 frames from the AVI header and did not emit stills or swap in another file.
HEVC / H.265, Safari, and Firefox were not in that run. If this browser cannot paint a frame, you get an error on this page — not a substitute image, and not a silent “success”.
Limits (chosen on this page, not a browser spec)
- One video at a time. There is no multi-file batch.
- File size cap: 200 MB. Larger files are refused so this tab is less likely to run out of memory.
- Interval runs stop at 300 stills. If 1-second spacing would exceed that, choose a longer interval or capture frames on the timeline.
- Stills are the displayed resolution of the decoded video (
videoWidth×videoHeight), not a claimed 4K pipeline I have not measured here. - Frame rate and total frame count are shown when the container metadata has them (MP4 sample table, WebM/MKV track, or AVI header). If those fields are missing, the page writes “Not in file metadata” instead of inventing 30 fps.
Privacy
The file is read with the browser file API and played from a local object URL. Closing or refreshing the tab drops it. There is no login, no cookie wall, and no remote encode step on this page.
FAQ
Can I extract frames from video without uploading?
Yes. Choose a local file. This tab decodes it. Nothing is posted to a server by this page.
How do I export frames from video as a ZIP?
Run an interval extract or capture frames on the timeline, leave the ones you want ticked, then use Download selected ZIP. Each still is also a separate download link.
Does video to JPG keep the original quality?
JPG is lossy. The slider is the browser canvas.toBlob quality (0.60–0.95). PNG keeps the pixels the canvas had, which are the decoded and displayed frame, not a guaranteed bit-exact copy of a YUV source.
Why did my MKV or AVI fail?
A readable container is not the same as a playable codec. This frame extractor reports a decode failure when <video> cannot paint a frame. Re-wrap or re-encode to H.264 MP4 or VP9 WebM on your machine if you need that file to work here.
Will this work on a phone?
The controls are sized for a phone-width window, and stills wrap in a two-column sheet. A long 4K file can still exhaust a mobile tab; that is a memory limit, not a layout one. Use a shorter clip or a longer interval if the phone warns you.