Frame Extractor
Save a still from a video for a cover image, or extract a batch at fixed intervals. FFmpeg seeks from the time you choose inside your browser and saves at the source resolution; every result shows the time the decoded frame actually reached.
- Seek by timestamp and see the time the decoded frame actually reached
- Decoded at the source resolution in the browser, with nothing uploaded
Drop a video file here
The file stays on your machine — it is never uploaded
Reads MP4, MOV, WebM, MKV, AVI, M4V, and most other formats FFmpeg understands.
No video selected yet
Choose a video file to begin. The frame engine is only downloaded once you do.
Overview
Getting a still out of a video is easy to do badly. This tool is built around one question: where in the video did the image you saved actually land?
- 01
Requested time, actual frame
Each still is sought and decoded separately. Video frames do not necessarily fall on every millisecond, so the tool saves the first usable frame at or after the requested position and shows its real timestamp. You can tell whether it is the moment you wanted instead of trusting a rounded input value.
- 02
Source resolution, not screen resolution
The usual browser trick is to seek a video element and draw it into a canvas, which gives you whatever the player decoded at whatever size the element happened to be. Here the frame is decoded by FFmpeg from the file itself, so a 4K source yields a 4K still unless you ask for something smaller.
- 03
One frame, or a whole sweep
Take a single frame for a cover image, one every few seconds across a range, or a fixed number spread evenly over it. The evenly spread mode samples the middle of each slice, which keeps the first thumbnail off the black frame most recordings open on.
- 04
The time each still came from, reported back
Every still is labelled with the timestamp it actually carries, and a single extraction says so explicitly when the frame it landed on sits after the moment you set. Nothing is rounded away behind your back.
- 05
PNG, JPEG or WebP, at a width you choose
PNG is lossless, so the decoded frame is stored exactly, while JPEG and WebP give some of it up for much smaller files. An output width can be set for thumbnail work, and a width larger than the source is ignored rather than upscaled.
- 06
Local processing
FFmpeg is compiled to WebAssembly and runs in the tab. Nothing is uploaded, there is no server-imposed size cap, no queue, no watermark, and no account.
How to use
From a recording to a folder of stills in four steps.
- 01
Drop a video onto the page, or use the file picker. The frame engine starts downloading at this point — it is about 31 MB and only happens once — and the file is then read for its resolution, frame rate, and length.
- 02
Choose what to take: one frame, one every so many seconds, or a fixed number spread across a range. In single-frame mode the arrows move by a frame interval and the time can also be typed in.
- 03
Set the format and, if you want thumbnails rather than full-size stills, an output width. PNG is lossless; JPEG and WebP are much smaller.
- 04
Press Extract. The stills appear on the right with the time each came from, ready to save one at a time or all together as a ZIP.
Details
Details that decide whether the still you saved is the frame you meant.
- Seek by timestamp and report the actual time of a single extracted frame
- One still, a fixed count, or one every N seconds across a chosen range
- Evenly spread sampling takes the middle of each slice, avoiding the opening black frame
- Single-frame mode moves by a frame interval when the source frame rate can be read
- Times can be typed as seconds, m:ss.ddd, or h:mm:ss.ddd
- The real source timestamp of every extracted frame is shown and used in the filename
- PNG, JPEG or WebP output, with a quality control for the two lossy formats
- Optional output width for thumbnails, with no upscaling above the source
- Stills are decoded at the source resolution, not at the size of the preview player
- Save one still at a time, or all of them as a ZIP
- Real byte-level progress while the engine downloads, not a fake animated bar
- A running batch can be stopped, and the stills already extracted are kept
Use cases
The situations where a real frame, extracted locally, beats a screenshot.
-
A cover image for a video
Uploads, posts, and product pages all want a poster frame. Stepping frame by frame to the one where nobody is mid-blink takes seconds here, and the result is the full-resolution frame rather than a screenshot of a player.
-
Turning a screen recording into documentation
A recorded walkthrough becomes a written guide much faster when you can pull one still per step. Take a frame at each moment you narrated, drop them into the document, and annotate from there.
-
Storyboards and contact sheets
A fixed number of evenly spread stills gives you the shape of a clip on one screen. It is the quickest way to see what is in an unfamiliar recording without scrubbing through all of it.
-
Frames for a bug report
A screen capture of a glitch is only useful if you can point at the moment it happens. Extracting the two frames on either side of it says more than a video attachment nobody will scrub through.
-
Recordings you should not upload
Interview footage, medical video, and captures of internal tools all carry things that should not be handed to a converter site. Extracting in the tab keeps the recording on the machine it was already on.
-
Reference stills for editing and training
Colour reference, pose reference, or an image set built from footage all start with pulling frames out at a regular interval. Doing it locally means no upload wait and no cap on how much footage you feed it.
See also
Stills are usually one step in a longer job. When only part of a long recording matters, cutting it down first means the sweep has less to read through — that is Video Trimmer. When the moment needs movement rather than a single frame, an animation carries it better, and there is Video to GIF. And once the stills are out, resizing a batch of them to one width is a job of its own for Image Resizer.
Best practices
Habits that get you the right frame the first time.
- Use the player to find roughly the right moment, then use the arrows to fine-tune and check the actual time shown with the result
- Pick PNG when the still will be cropped, annotated, or colour-picked, and JPEG or WebP when it is going straight into a thumbnail grid
- Set an output width before a large batch rather than after; full-resolution stills from a 4K source add up quickly in one tab
- For an unfamiliar recording, take a dozen evenly spread stills first — it is faster than scrubbing and tells you where to look
- Check the reported time on a single extraction; if the frame landed later than you meant, the timestamp says so
- Trim long footage down before sweeping it, so the whole file does not have to be read into memory just to sample a minute of it
- Extract from a desktop browser for long or high-resolution sources, since a phone gives a tab far less memory to hold the file in
Limitations
What this tool deliberately does not do, and where it will struggle.
- It extracts stills. It does not build a GIF or an animation from them, and it does not edit or export video.
- It does not pick a frame for you. There is no scene detection and no "best frame" scoring — the choice of moment is yours, which is why stepping and sweeping are both quick.
- PNG is lossless, but it cannot undo the compression the video already went through. Every frame you extract already carries whatever the recording's own encoding did to it.
- A run is capped at 200 stills, because each one is held in memory until you download it. Longer sweeps take more than one pass.
- It reads the whole video into memory before decoding any frame, so extracting one still from a two-hour file still means loading the two-hour file.
- The engine is about 31 MB on first use. It is cached afterwards, but the first extraction in a fresh browser profile carries that download.
- WebAssembly is 32-bit and the source is held in memory while it is read, so videos beyond roughly a quarter of a gigabyte become unreliable.
- Some containers FFmpeg reads fine, such as MKV with HEVC, will not play in the browser preview. Extraction still works from the timeline and the typed time; only the moving preview is missing.
FAQ
Questions that come up when pulling stills out of video in a browser.
How do I get a single frame out of a video?
Drop the file onto the page, move to the moment you want with the slider or the frame arrows, and press Extract. One image comes back, decoded at the source resolution, and you can save it as PNG, JPEG or WebP. Nothing is uploaded — the whole thing runs in the tab.
Is the extracted image the frame at the time I set?
The tool seeks and decodes from the position you set, saves the first usable frame at or after it, and reports that frame’s real timestamp. Frames do not necessarily sit on every millisecond, so the result can be an adjacent frame; when it lands later than you asked for, the interface shows that plainly so you can adjust forward or back.
Why is this better than taking a screenshot of the video?
A screenshot captures the player, not the file. You get the size the video was displayed at, whatever scaling and colour handling the browser applied on the way, and any controls that were on screen. Here the frame is decoded from the file itself, so a 4K recording gives a 4K still with nothing drawn over it.
How do I extract frames every second from a video?
Switch to the interval mode and set the interval to 1. The tool sweeps the selected range and takes one still at each step, reporting the timestamp of each. A run is capped at 200 stills, so a long recording is better sampled a section at a time or at a wider interval.
Which format should I choose?
PNG when the still will be edited, cropped, or colour-picked: it is lossless, so the decoded frame is stored exactly. JPEG or WebP when the still is a thumbnail or a preview, where the much smaller file is worth a round of lossy compression on top of the video's own. WebP is a little smaller than JPEG at a comparable setting and every current browser reads it.
Is my video uploaded anywhere?
No. The engine is FFmpeg compiled to WebAssembly and it runs inside your browser tab. The file is read from disk into the tab's memory and the stills are written back out as downloads. Nothing about the file crosses the network, which you can confirm by watching the network panel while an extraction runs.
How many stills can I take at once, and how long does it take?
Up to 200 in one run. Each still needs its own seek and decode, so the time depends on the codec, resolution, video length, and your device. Large files take longer to read into memory first; for long or high-resolution footage, start with a shorter range or a smaller output width.
Can I get a frame by frame number?
Not directly: both input and results use time. When the source frame rate can be read, the slider and arrows move by one frame interval, which makes nearby adjustments easier. For variable-frame-rate video in particular, rely on the actual time shown next to each still.
Why does the still look different from the video preview?
The preview is your browser decoding and displaying the video, scaled into a small player and subject to whatever colour handling it applies. The still is decoded separately by FFmpeg at the source resolution. The preview is there to help you find the moment, not to be the thing you save.
Can it find the best frame for a thumbnail automatically?
No, and that is a deliberate omission. Automatic scene detection picks frames that differ from their neighbours, which is not the same as picking a good cover image, and it would need a full decode of the video to do it. Taking a dozen evenly spread stills and choosing one takes a few seconds and gives you the frame you actually wanted.
Related tools
More local, browser-only tools for working with video and images.