Video Frame Extractor

Upload a video file from your own device, scrub or step to any moment, and grab that exact frame as a still image — or batch-export several evenly-spaced frames at once. Everything runs entirely in your browser; your video is never uploaded anywhere.

🔒 Video processed locally — never uploaded Frame-accurate stepping Batch export → ZIP Free · no account

Grab a frame from your video

Only video files saved on your own device — this tool does not fetch or download video from YouTube or any other website/platform. Your file is decoded and processed entirely on-device; nothing is sent to a server.

How this frame extractor works

This tool works only with video files you upload from your own device — it does not accept a YouTube link, a TikTok URL, or any other website address, and it never fetches or downloads video from another platform. When you choose a file, your browser loads it locally with the standard HTML5 <video> element (via URL.createObjectURL), which decodes the video using your browser's own built-in video codec support — the same decoder your browser already uses to play any video on the web. When you scrub the seek bar, click a frame-step button, or hit "Grab this frame," the page sets the video's currentTime to the exact timestamp you want, waits for the browser's seeked event confirming that frame is now on screen, and then draws that single frame onto an in-page HTML5 canvas with drawImage(). From there, canvas.toBlob() exports the pixel data as a real PNG or JPG file, which is offered to you as a direct download — the same way any client-side image tool on this site works. At no point does the video file, or any frame extracted from it, leave your device.

Frame-accurate stepping

Scrubbing a normal video player is usually only accurate to a fraction of a second, which makes it hard to land on one exact frame. This tool adds a frame-step control: on load, it briefly and silently samples the video's own decoded frame timestamps (using the browser's requestVideoFrameCallback API where supported) to estimate its real frame rate, then lets the −1 frame / +1 frame buttons move exactly one frame interval at a time — for example about 1/30th of a second for a 30fps video. If your browser doesn't support that detection API, the tool falls back to a manual frame-rate dropdown (24/25/29.97/30/50/60fps) so you can still step accurately once you know your source video's frame rate.

Single grabs and batch export

Use "Grab this frame" to export exactly the frame currently showing in the player. Use batch export to have the tool automatically step to N evenly-spaced points across the whole video — useful for quickly pulling a set of thumbnails, a storyboard, or a handful of reference stills without manually scrubbing to each one. Batch results appear as a grid of thumbnails you can individually deselect; download the ones you keep together as a single ZIP file (built client-side with the open-source JSZip library — the frames never pass through a server on their way into the ZIP either).

Free tier and Pro

Every export on the free tier is capped at 960 pixels on its longest edge and carries a small "FREE PREVIEW" watermark in the corner, so you can try the full workflow — scrubbing, frame-stepping, single grabs, and batch ZIP export — at no cost. A one-time $5.99 Pro unlock removes both limits: exports come out at your source video's full resolution with no watermark, for both single grabs and batch ZIP export.

Why nothing gets uploaded

There is no server-side video processing on this site — decoding, seeking, drawing frames, and building the ZIP all happen with ordinary JavaScript running in your own browser tab. That means there's no upload step, no server log of your video, no storage bucket, and no size limit imposed by a server (only the limits of your own device's memory). See the privacy policy for the full picture, including the one legitimate third-party network request this page makes (loading the JSZip library code, which never includes your video or your frames).

FAQ

Can I paste a YouTube or TikTok link instead of uploading a file?
No, and that's intentional. This tool only works on video files already saved on your own device. It does not fetch, download, or process video hosted on YouTube, TikTok, Instagram, or any other platform — doing so raises real copyright and terms-of-service concerns that a simple upload-your-own-file tool avoids entirely.
What video formats are supported?
Whatever formats your browser's built-in video decoder supports — in practice MP4 (H.264/H.265), WebM (VP8/VP9/AV1), and MOV/QuickTime work well in most modern desktop and mobile browsers. If a file won't load, try a different browser or re-export it as MP4.
Is my video uploaded anywhere?
No. The video is loaded directly into your browser and every frame is drawn on an in-page canvas with client-side JavaScript. Nothing is sent to a server — see the privacy policy.
How accurate is the frame stepping?
It's based on your browser's own decoded frame timestamps where the detection API is supported (most current Chrome/Edge versions), so stepping lands on real frame boundaries. Where that API isn't available, stepping uses whichever frame rate you pick from the dropdown, which is accurate as long as it matches your source video's actual frame rate.
Why is my downloaded image watermarked and smaller than the original video resolution?
That's the free tier: exports are capped at 960px on the long edge with a small watermark. A one-time $5.99 Pro unlock (click "Go Pro" above) removes both — full source resolution, no watermark.
Does batch export work on long videos?
Yes — it seeks to N evenly-spaced points across the video's full duration regardless of length, though very long videos will naturally take longer to step through since each frame requires a real seek-and-decode.

Works on video files you upload from your own device only — this tool does not accept URLs from YouTube or other video platforms.