Video to Frames

Extract frames from any video as JPG or PNG images, download as ZIP

Turn a Video Into a Numbered Folder of Still Images

This tool runs a single ffmpeg command, -vf fps=N -vframes M, that samples a video at a fixed rate you choose and writes out one image file per sampled frame (frame0001.jpg, frame0002.jpg, and so on). The fps filter here isn't changing playback speed, it's a sampling rate: setting it to 1 pulls one frame per second of source video, setting it to 24 or 30 pulls close to every frame of a typical recording. A vframes cap (20 to 500) limits how many files get written in total, which matters because a long video sampled at a high rate can otherwise produce thousands of images. After ffmpeg finishes writing frames into its virtual filesystem, the tool reads each one back out and packages the whole set into a ZIP archive with JSZip before triggering the download, so you get one file instead of hundreds of separate downloads.

This kind of frame-by-frame export is what people reach for when building a storyboard from raw footage, generating a batch of thumbnail candidates to pick from, pulling reference frames for documentation, or assembling a training dataset from video for a computer vision project. All the sampling and encoding happens through ffmpeg.wasm in the browser tab, so the source video itself never leaves your device, only the resulting JPG or PNG files get written locally before they're zipped.

How to Use

  1. 1

    Upload a video or animated GIF

    MP4, WebM, MOV, MKV, AVI, and GIF files are all accepted as the source.

  2. 2

    Pick the extraction rate

    Choose from 0.5 up to 30 frames per second. Low rates (0.5-2fps) give you a sparse set of key moments; high rates near the source's real frame rate capture nearly every frame.

  3. 3

    Set a maximum frame count

    Cap the export between 20 and 500 frames so a long clip at a high sampling rate doesn't produce an unmanageably large ZIP.

  4. 4

    Choose JPG or PNG

    JPG keeps individual files small; PNG is lossless and better suited to frames you plan to analyze or reassemble pixel-for-pixel.

  5. 5

    Extract and download the ZIP

    ffmpeg samples the video at the chosen rate, then every frame is packaged into a single sequentially-numbered ZIP file.

Key Features

  • →The FPS setting here is a sampling rate, not a playback speed, 1fps means 'grab one frame per second of video', not 'play the video at 1 frame per second'.
  • →A 30fps source sampled at 30fps produces one image per actual frame; sampling at 1-2fps instead gives you a manageable set of representative moments.
  • →The max-frames cap protects you from accidentally generating thousands of files on a long video at a high sampling rate, raise it deliberately once you know roughly how many frames you need.
  • →PNG is the safer pick when frames will be reassembled or analyzed programmatically, since it doesn't introduce the compression artifacts JPG does.
  • →Frames are numbered sequentially inside the ZIP (frame0001, frame0002, ...), so sorting alphabetically preserves the original playback order.
  • →For picking a single best thumbnail rather than exporting a whole batch, the Video Thumbnail tool is a better fit since it lets you scrub to an exact moment instead of sampling at a fixed rate.

Frequently Asked Questions

What does the FPS setting actually control here?

It sets the fps value in ffmpeg's sampling filter, which determines how many frames per second of source video get written out as images. It's a sampling rate, so 1fps means one image is captured per second of footage, not that playback runs at 1 frame per second.

Why is there a maximum frame count separate from the FPS setting?

The vframes cap limits the total number of images the export can produce, since a long video combined with a high sampling rate could otherwise generate thousands of files. The two settings work together: FPS decides how densely to sample, the cap decides when to stop.

Why do I get a ZIP file instead of individual image downloads?

After ffmpeg writes the sampled frames, the tool reads them back and bundles them with JSZip into one archive, so you get a single download with sequentially numbered files rather than triggering a separate download prompt per frame.

Should I export as JPG or PNG?

JPG produces smaller files and is fine for storyboards, thumbnail candidates, or casual reference. PNG is lossless and preserves every pixel exactly, which matters more if the frames feed into further image analysis or need to be reassembled precisely.

Can I extract frames from an animated GIF, not just video files?

Yes, GIF is accepted as an input alongside MP4, WebM, MOV, MKV, and AVI, and is sampled the same way as any video source.

Last updated: June 2026

Related Tools