Extract video frames

Save a range of a clip as a numbered still image sequence.

Your inputs stay on your deviceFREE · NO SIGN-UP

A small task starts here.

Drop your video here, paste it, or choose from your device.

Up to 100 MB total · Processed locally
Save frames as
Take every
frame
Frame size
px
× px

Result

Download ZIP

Choose a video and the timeline appears above.

THE LITTLE DETAILS

Extract video frames, without the extra steps.

Turn a piece of a video into numbered still images - every frame, or every second, fifth or tenth one. The frame count is on screen before the run starts, because thirty seconds at 60 frames a second is eighteen hundred files and that is not something to discover afterwards. Frames are decoded in sequence rather than by seeking to each one in turn, so a few hundred take about a second; the files are numbered from one with no gaps so they drop straight into anything that imports an image sequence, and a frames.csv beside them names which frame of the source each one was and when.

How to use this tool

  1. 1Choose an MP4, M4V, or MOV. The first frame appears and the range opens on as much as one run holds.
  2. 2Drag the in and out points, then set the format, the size, and whether to take every frame.
  3. 3Press Extract frames, check what came out, then download the ZIP.

When Extract video frames is the right tool

  • An animator needs a shot as a numbered sequence to trace over, frame by frame.
  • The number plate is readable for about a third of a second and you need every frame of it.
  • A tutorial needs six stills from one manoeuvre, taken a tenth of a second apart.
  • A machine-learning dataset needs one frame a second out of a longer clip.
  • A video editor wants a clean still to grade, rather than a screenshot of a paused player.
  • You are checking whether a compression artefact is in the footage or in the playback.

How many files, said before the run rather than after

Thirty seconds at 60 frames a second is eighteen hundred files, and a folder is a bad place to learn that. The count the current settings will write sits beside the Take every field and moves as you drag the range, change the size, or switch format - along with the most a run at that size allows. When the two cross, the page says by how much and which of the three things to change, rather than waiting for the run to fail.

Decoded in sequence, not seeked to one at a time

The obvious way to get frame 400 is to seek a video element to it and paint it, and for one frame that is exactly right. For four hundred it is minutes of work, because each seek discards and rebuilds the decoder's state. Here the samples are fed to the browser's video decoder in order and the frames fall out as they are ready, which is how a player works and is roughly a thousand times less work. The cost is the container: this reads the MP4 family, and a WebM is refused by name rather than half-read.

Numbered from one, with the real positions written beside them

The files are frame-0001, frame-0002, frame-0003 with no gaps, because that is what an image-sequence importer needs: one hole in the numbering and the whole import stops. Taking every fifth frame therefore loses which frame of the source each one was — so that goes in frames.csv next to them, naming the file, the source frame number, and its time in seconds. Putting the timestamp in the filename instead would break the very thing the numbering is for.

PNG, JPEG, or WebP, and why the ceiling moves

PNG keeps every pixel exactly and costs several times as much per frame; JPEG is a fraction of the size and throws some of the detail away; WebP sits between them. Since the limit on a run is the memory the archive needs, the number of frames allowed changes with the format as well as the size — which is why the ceiling on screen moves when you switch. For tracing and grading, take PNG and shorten the range. For a contact sheet or a dataset, JPEG at half the width gets you hundreds.

GOOD TO KNOW

A few quick answers.

Choose an MP4, M4V, or MOV. The first frame appears and the range opens on as much as one run holds. Drag the in and out points, then set the format, the size, and whether to take every frame. Press Extract frames, check what came out, then download the ZIP.

Tool inputs are processed in your browser. Crate has no upload endpoint and no accounts. Downloaded site assets and a cookie-free page-view count still require a connection; your files and text are not included in those requests.

Reads MP4-family containers; WebM and Matroska are not read here. Up to 600 frames a run, and fewer at larger sizes, because the frame count multiplied by the frame size has to stay inside a fixed budget — smaller for PNG than for JPEG. The page states how many files the current settings will write. Decoding needs the browser's WebCodecs video decoder, which Chrome and Edge 94+ have and Safari and Firefox do not yet expose to a page.

Because the frames are held in the page until the archive is written, and a browser tab has a finite amount of memory to hold them in. The ceiling is 600 frames and less than that at larger sizes. The three ways round it are all on screen: shorten the range, take every second or fifth frame, or reduce the frame size — at half the width roughly four times as many frames fit.

A PNG frame is exactly what the decoder produced, with nothing thrown away on the way out — it is not a second generation of compression, though it is still a decode of a compressed source, so any artefacts already in the footage are in the still. JPEG and WebP add one generation of loss with a quality you control. What you will not get is a screenshot: no player chrome, no scaling, no colour shift from the compositor.

It maps each saved file back to the clip: the filename, which frame of the source it was, and its time in seconds to three decimal places. If you took every tenth frame, frame-0004.png might be source frame 31 at 1.292 seconds. It opens in any spreadsheet, and it is the reason the filenames can stay a clean unbroken sequence.

Reading frames out of a container means parsing its index to find where each compressed frame starts, and this tool carries a reader for the MP4 family only — MP4, M4V, and MOV. WebM and Matroska are a different format with a different index. Video to GIF here takes a different approach that does accept WebM, at the cost of being far slower per frame; it is the right tool when the output is a short low-rate animation rather than a sequence of stills.

Back to all tools