Extract Frames From Video: Stills at Any Interval
By Mark Fulton · 2026-09-11 · 12 min read

To extract a frame from a video, open the clip in a tool that can decode it, name the timestamp you want, and export that single decoded picture as an image file. Save it as PNG when the frame contains text, a user interface or anything with hard edges, and as JPG when the frame is photographic and you need many of them. The still will always be the video's native resolution, and it will always look slightly softer than the video did, because a frame in a compressed video is not stored as a picture. It is rebuilt from the frames around it. That last fact is the one that explains almost every complaint people have about extracted stills, so it is worth understanding before you pick any settings.
What are you pulling a frame out of a video for?
Four jobs send people to a frame extractor, and they want almost opposite settings.
A thumbnail. You need one good frame out of a few thousand. The hard part is not the export, it is finding the moment. A grid of sampled frames solves that in seconds; scrubbing a timeline does not.
A documentation screenshot. You recorded a screen and now you need the moment the dialog appeared, with the text still readable at full size. Format matters enormously here and resolution is non negotiable.
Frame-by-frame review. A golf swing, a car crossing a line, a bug that appears for two frames in a screen recording. You want every frame in a narrow window, and you want to be sure you are not skipping any.
Triage of footage you have not watched. Dashcam files, long recordings, an archive someone handed you. You want a visual index, not images.
The first and fourth are the same operation seen from two ends, which is why contact sheets exist. The second and third are the ones where the wrong setting quietly ruins the result.
JPG or PNG: which for which job?
The usual advice is that JPG is much smaller and PNG is much sharper. Both halves are true, but the size gap depends almost entirely on what is in the frame, and it is far smaller than most tool pages suggest.
I measured it. I built a 1920 by 1080 frame of red monospace code on a dark grey background, encoded four seconds of it with x264 at CRF 20 in the usual 4:2:0 colour format, then pulled the still at the two second mark and saved it both ways. I did the same with a highly detailed, photographic-style render encoded at the same settings.
| Frame content | PNG | JPG (high quality) | JPG saving |
|---|---|---|---|
| Code on a flat background | 235 KB | 168 KB | 29% |
| Dense photographic detail | 1.29 MB | 368 KB | 72% |
On the text frame JPG saves less than a third, and it spends that saving on exactly the pixels you care about: the boundaries between the red glyphs and the grey behind them. MDN's image file type and format guide puts the reason plainly, noting that applying lossy compression to content that needs sharpness, like diagrams and charts, produces unsatisfactory results. Screen recordings are diagrams that move.
On photographic content the trade flips completely. Nearly three quarters off, for damage that is genuinely hard to see, because photographic detail is the case JPEG was designed around.
So the rule is not "PNG is better". The rule is:
- PNG for screen recordings, slides, code, charts, logos, subtitles, anything you will crop or zoom into later, and anything you will edit and re-save more than once.
- JPG for camera footage, people, landscapes, and any job where you are exporting dozens or hundreds of frames and the total size matters more than the last few percent of fidelity.
One thing worth knowing before you reach for JPG on principle: a JPG export is a second round of lossy compression stacked on the one the video already applied. The frame you extracted is not a clean original, so you are compressing artifacts along with the picture. Which brings us to the part nobody explains.
Why does the still look softer than the video did?
Play a clip and it looks fine. Pull one frame out of it and the frame looks mushy. Nothing broke. Three separate things are stacked on top of each other, and only one of them is under your control.
Most frames are not pictures. A compressed video stores a complete, self-contained image only occasionally, at a keyframe. Everything between keyframes is stored as a description of change: these blocks moved this far, these pixels shifted this much. A P or B frame is reconstructed at playback time from a chain of those differences. It never existed as a stored picture, and what the decoder hands you is a reconstruction. It is the same mechanism that makes lossless cuts snap to keyframes rather than landing where you asked, which I go through in how lossless trimming and keyframes work.
Colour is stored at half resolution, in both directions. Almost all consumer video uses 4:2:0 chroma subsampling. As MDN's digital video concepts guide describes it, the picture is split into a full resolution greyscale layer plus a much coarser grid of colour values, with one row of chroma samples shared across two rows of pixels. A 1080p video has 1920 by 1080 brightness samples and roughly 960 by 540 colour samples. Your still is full resolution in luminance and quarter resolution in colour, upsampled back on the way out.
That is why red text on a dark background is the worst case for an extracted frame, and why the same clip's greyscale content looks fine. I checked the size of the effect in isolation by running my source frame through a 4:2:0 round trip with no encoder involved at all, no quantization, no bitrate: structural similarity against the original dropped to 0.9990, while the same round trip at 4:4:4 stayed at 0.99985. Then I compared the frame extracted from the real encode against the pristine original and got 0.9984. In other words, most of the degradation in an extracted still is the colour format, not the quality setting, and no amount of raising the bitrate on export will get it back.
Motion gets fewer bits. Encoders spend their budget where the eye notices. A locked-off shot holds detail; a whip pan or a hand near the lens is reconstructed with far less data. Nudge the timestamp half a second toward a calmer moment and the same footage gives you a visibly sharper image.
There is a strange consequence of all this that catches people out. My extracted PNG came out at 235 KB, while the pristine source frame I encoded from was only 137 KB, and the entire four second video was 163 KB. A lossless format has to store compression artifacts faithfully too, and artifacts are noise, and noise is expensive to compress. One still from a video will frequently be larger than several seconds of the video itself. Nothing is wrong when that happens.
How do you hit an exact frame rather than a nearby one?
Two different things get conflated here: where the tool seeks to, and what "an exact time" even means in a video.
Seeking first. Video files are not randomly addressable at the frame level. FFmpeg's own command line documentation is explicit about what happens when you ask for a position: in most formats it is not possible to seek exactly, so it seeks to the closest seek point before your position. If nothing corrects for that, you get a frame from up to several seconds earlier. The correction is a setting called accurate seek, which is on by default when decoding: the segment between the seek point and your requested position is decoded and thrown away, so you land on the frame you asked for. Tools that hand you a frame noticeably before the moment you picked have either turned that off or are doing a keyframe-only seek for speed.
Now precision. Even with perfect seeking, a timestamp does not identify a frame; it identifies a moment, and the frame on screen at that moment is the one you get. The granularity is one frame duration, which is the reciprocal of the frame rate:
| Frame rate | One frame lasts |
|---|---|
| 24 fps | 41.7 ms |
| 25 fps | 40 ms |
| 30 fps | 33.3 ms |
| 60 fps | 16.7 ms |
At 30 fps, asking for 12.48 seconds and 12.50 seconds returns the same picture. Typing more decimal places does not buy you more precision, it just moves you around inside the same frame. If you need the frame after the one you got, add one frame duration, not a tenth of a second.
Practically, this means the right way to land on a specific instant is to step in frame-sized increments rather than guess at decimals. On a long clip, trim the section first. A short clip loads faster, seeks faster, and turns "somewhere around four minutes in" into a ten second window you can walk through.
One more thing that quietly breaks frame grabs: rotation. If the source came off a phone, the picture may be stored one way and flagged to display another, and depending on the tool the still can come out sideways even though the video plays upright. That is a metadata problem rather than a pixel problem, and it is worth fixing the rotation before you start pulling stills out.
The settings recipe
Four choices, and only four: scope, format, scale and timestamp precision. Here is the combination each job actually wants.
| Job | Scope | Format | Scale | Timestamp precision |
|---|---|---|---|---|
| Video thumbnail | One frame, chosen off a contact sheet | JPG to upload, PNG if you will add text over it | Native, then downscale as the last step | Tenths, nudged to a still moment |
| Documentation screenshot | One frame | PNG, always | Native, never upscale | Exact, on the frame after the UI settles |
| Frame-by-frame review | Every frame in a short window | JPG | Native | One frame duration per step |
| Triage of unwatched footage | Fixed interval across the whole clip | One grid image | Small tiles, legibility over detail | Irrelevant, even spacing is the point |
| Reference stills for design | A handful of frames | PNG | Native | Tenths, on calm moments |
Two rules cut across all of them. Downscale last, never first, because every resize is another resampling pass and you cannot get detail back. And pick the calm frame over the correct frame when both would do, because the calm one carries more of the encoder's bit budget.
VidClip's video to image tool covers the single-frame rows of that table directly. You name a timestamp in seconds, it decodes that frame in your browser and hands you a PNG at the video's native resolution. There is no JPG toggle, so if you want JPG, save the PNG and convert it afterwards; nothing is lost by that order, and quite a lot is lost by the other one. Stills carry no watermark on either tier, because the free tier's corner mark applies to video exports that get re-encoded, and a still is an image. The free tier does cap input files at 200 MB.
For the every-frame row, be realistic about the arithmetic: a two minute clip at 30 fps is 3,600 images. A browser will do a short burst happily and choke on the full clip. Trim to the window you care about first, then step through it.
How do you get a contact sheet of the whole clip?
A contact sheet is one image containing frames sampled evenly across a whole video, laid out as a grid. The name comes from film, where you printed a strip of negatives at actual size so you could see a roll at a glance and pick the shot worth enlarging. It solves the finding problem, which is the real work in most frame extraction jobs.
The mechanics are simple: sample at an interval derived from the clip's duration rather than a fixed number of seconds, scale each sample down to a tile, and tile them into a grid. Deriving the interval from duration is what stops a twelve second clip from producing a single tile.
On VidClip this is the one part of frame extraction that sits behind Pro: one PNG holding twelve frames in a four by three grid, evenly spaced across whatever you loaded. Pro also removes the 200 MB input cap and the watermark on video exports, and adds exact-target-size compression, instant lossless trim and mute, and the AI settings advisor. If you only need one still and you already know roughly when it happens, the free single-frame grab does that job completely and always has.
Frequently asked questions
How do I get a still image from a video? Load the video into a tool that decodes it, set the timestamp you want, and export that frame as an image. In a browser, drop the clip on the video to image tool, type the second you want, and download the PNG. Nothing uploads: the file is read into browser memory and decoded on your own machine. Taking a screenshot of the playing video is not the same thing, because that captures the frame scaled to your player window and colour-managed by your display, sometimes with controls fading over the top.
What resolution will the frame be? The video's native resolution, exactly. A 1080p clip gives 1920 by 1080 stills, a 4K clip gives 3840 by 2160. Nothing is upscaled and there is no quality tier that changes this. If the still is smaller than you expected, the source is smaller than you thought, which is common with clips that have been re-shared through a messaging app or downloaded from a social platform, since each of those hops may have re-encoded at a lower resolution.
Why is my exported frame blurry? Almost always one of three reasons, in this order. The moment you picked has motion in it, so the encoder spent fewer bits there; move half a second to a calmer moment. The content has saturated colour edges, such as red or blue text, which 4:2:0 chroma subsampling stores at half resolution in each direction. Or the source was already re-encoded at low bitrate before it reached you, in which case the softness is in the file and no export setting recovers it. If you are zooming into the result to read something, that is a resolution problem rather than a compression one: start from the highest resolution copy you can find.
Can I extract every frame of a long video? You can, but you usually should not. Every frame of ten minutes at 30 fps is 18,000 images, which is tens of gigabytes as PNG and a long wait in any tool, browser-based or not. If you genuinely need consecutive frames, trim to the seconds you care about and extract from that. If you need coverage of a whole clip rather than every frame of it, an interval or a contact sheet gives you the same information in a fraction of the files. Reserve all-frames extraction for training data and compositing work, and do those with a local install rather than a tab.
Grab the frame in the browser on the video to image tool: pick the second, get a full resolution PNG, nothing leaves your machine. Contact sheets of the whole clip come with Pro. The rest of the tool list covers the trim and rotate steps you will probably want first.