Extract Frames from Video — Video to PNG or JPG Sequence

Turn a video into individual still images and download them as one ZIP. Every frame, a fixed number per second, or every Nth frame — at full resolution or scaled down. Runs in your browser, so a long clip that would produce thousands of images never has to be uploaded anywhere.

  • No upload wait
  • Nothing leaves your device
  • Free, no account
  • No artificial size limits

What you get

Pick PNG or JPG, choose how often to grab a frame, and the converter writes out numbered stills — frame_0001, frame_0002, and so on — then packs them into a single ZIP so you download one file instead of several hundred.

The numbering is zero-padded deliberately. Sequences named frame_1, frame_2 … frame_10 sort wrongly in almost every file browser and in ffmpeg's own pattern input, which puts frame_10 immediately after frame_1. Four digits of padding keeps the order correct everywhere, which matters if the images are going back into a video later.

The ZIP itself is stored rather than compressed. PNG and JPG are already compressed formats, so running them through deflate again costs time and saves almost nothing — on a few thousand frames that difference is minutes.

Choosing how many frames

You can also set an output width, and the height follows automatically to preserve the aspect ratio. Scaling uses Lanczos, which holds onto detail better than the default when you're reducing size — worth having when the frames are going to be looked at rather than processed.

  • Every frame — a true frame-by-frame dump. A 30-second 60fps clip gives you 1,800 images, so check the length before you start.
  • A fixed rate — one image per second, two, ten. Good for contact sheets, thumbnails, or skimming a long recording for the moment you need.
  • Every Nth frame — keep every 5th or every 10th. Thins out a sequence while staying tied to the original frame timing rather than resampling it.

Getting one specific frame

Set a trim range before extracting and you only get frames from that window. The trim is applied on the output side, which makes it frame-accurate rather than snapping to the nearest keyframe — so asking for 12.4 to 12.5 seconds genuinely gives you the frames in that tenth of a second, not whatever keyframe happened to be nearby.

That's the quickest route to a single still: narrow the trim to the moment you want, extract every frame, and pick from the handful you get.

PNG or JPG

PNG is lossless. Every frame is exactly what the decoder produced, which is what you want if the images are going into a compositor, being analysed, or going back out as video. The files are several times larger.

JPG is lossy but far smaller, with an adjustable quality setting. Sensible for contact sheets, reference stills, or anything headed straight for a web page. Not sensible if the frames are an intermediate step on the way to another encode, because you'd be stacking JPG loss underneath whatever the next encoder does.

Colour is converted, not guessed

Video stores colour as YUV; images are RGB. That conversion needs to know which matrix and range the source used, and getting it wrong is what makes extracted frames come out subtly dark, washed out, or with a slight colour cast — a mistake easy to miss on one frame and obvious across a sequence.

The converter probes the source's actual matrix and range and uses those values for the conversion rather than assuming bt709 limited. An HDR source is handled on the way out too — see converting HDR to SDR for what that involves.

Interlaced sources

Footage from DV tape, DVDs, or broadcast capture is often interlaced: each frame holds two fields captured at different moments. Extract frames from it untouched and you get combing — horizontal teeth along anything that moved. There's a deinterlace option that resolves the fields into whole progressive frames first, which is what you want on anything from a camcorder or a TV capture.

Why in the browser

Frame extraction is the operation where uploading makes least sense. The output is bulkier than the input — often by a wide margin — so a server-based tool has to receive your video, write out thousands of files, and send them all back. Doing it locally skips both transfers entirely, and the video never leaves your device. There's no size cap beyond what your own machine can hold.

Frequently asked questions

How do I extract all frames from a video?
Choose the extract-frames mode, pick PNG or JPG, and set the rate to every frame. The converter writes numbered stills and packs them into one ZIP. Check the clip length first: at 60fps, every frame of a 30-second video is 1,800 images.
How do I get just one frame?
Narrow the trim range to the moment you want, then extract every frame within it. The trim is frame-accurate rather than keyframe-snapped, so a tenth-of-a-second window really does give you just the frames in that tenth of a second.
PNG or JPG?
PNG if the frames are going anywhere else — a compositor, an analysis pipeline, back out as video — because it's lossless. JPG if they're for looking at, where the much smaller files are worth the quality cost. Avoid JPG for intermediate steps, since its loss stacks underneath whatever encodes the images next.
Why are my extracted frames striped or combed?
The source is interlaced — each frame holds two fields shot a fraction of a second apart, which shows as horizontal teeth on anything moving. Common with DV, DVD and broadcast captures. Turn on the deinterlace option to resolve the fields into whole frames before extracting.
Why do extracted frames sometimes look washed out in other tools?
Because converting video's YUV colour to an image's RGB needs the source's actual colour matrix and range, and many tools just assume bt709 limited. When the assumption is wrong you get frames that are slightly dark, flat, or colour-shifted. This converter reads the real values from the file and converts with those.
Is there a limit on how many frames I can extract?
Only your device's memory. Nothing is uploaded, so there's no server-side cap — but frames accumulate in the browser tab before being zipped, so a frame-by-frame dump of something long can get heavy. If you hit that, extract in trimmed sections or lower the rate.
How are the files named?
frame_0001, frame_0002, and so on, with four digits of zero-padding. That keeps them in the right order in file browsers and in ffmpeg's pattern input, both of which sort frame_10 directly after frame_1 when the padding is missing.