Free · no watermarkNative resolutionNothing uploaded

Video frame extractor

Pull a still from any point in a video file at the source's true resolution, stepping one frame at a time. The file is decoded on your own device and never leaves it.

Drop a video here, or click to choose

MP4, WebM, MOV, M4V. Whatever your browser can play.

Free · no sign-up · nothing uploaded. Your file is decoded on your own device, so even a multi-gigabyte video opens instantly.

  1. Drop your videoMP4, WebM, MOV, M4V. Opens instantly, because there is no upload.
  2. Land on the exact frameArrow keys step by one real frame, at the rate read from the decoder.
  3. Export itPNG, JPG or WebP at full native resolution. Or a whole series as a ZIP.

Why extract frames in the browser?

The usual answer to "I need a still from this video" is a screenshot or an ffmpeg command. A screenshot caps you at screen resolution and catches player overlays. ffmpeg you have to install, then remember the syntax for.

Browsers already ship a complete, hardware-accelerated video decoder. floi points that decoder at your file, draws the decoded frame to a canvas at its full size, and encodes it. The result is pixel-identical to what ffmpeg would give you, with no install and no upload.

Frame-accurate, not approximately accurate

Most browser-based tools nudge currentTime by a hard-coded 1/30th of a second and hope. That drifts on 24 fps film, 25 fps PAL, 50 fps and 60 fps footage alike.

floi instead derives the real rate from the decoder itself, and drops it into a picker you can override. It measures the interval between presented frames, falling back to the decoder's frame counter when the compositor is idle. Stepping then moves exactly one frame. Captures wait for the decoder to actually present the new frame before reading pixels, so you never get the previous frame by accident.

Batch extraction

For contact sheets, thumbnails, dataset frames or scene breakdowns, set an interval and let it run. floi seeks to each mark in turn, captures, and reports progress. When it is done you can download all of them in one ZIP, named by timecode so they sort correctly:

my-video-00h00m00s000ms.png
my-video-00h00m05s000ms.png
my-video-00h00m10s000ms.png

Runs are capped at 300 frames. Each captured frame is held in memory as an encoded blob, and a few hundred 4K PNGs is already a serious amount of RAM. The cap keeps the tab responsive. For longer jobs, run several passes with different start points.

Keyboard shortcuts

KeyAction
Space / KPlay or pause
Step one frame back / forward
Shift + Jump one second
C / EnterCapture the current frame

Frequently asked questions

Is my video uploaded anywhere?

No. The file is opened with a local object URL and decoded by your browser's own video engine. floi has no backend. The page is static files on a CDN, so there is nowhere for a file to be uploaded to. You can disconnect from the internet after the page loads and it keeps working, decoding and all. Reloading while offline is the one thing that will not come back, unless your browser still has the page cached.

What resolution do exported frames have?

The video's exact native resolution. A 3840×2160 source exports 3840×2160 frames. floi reads videoWidth/videoHeight from the decoder, not the on-screen preview size, so a small preview window does not reduce quality.

Which file formats work?

Anything your browser can play: MP4 (H.264/H.265 where supported), WebM (VP8/VP9/AV1), MOV, M4V and OGV. MKV and AVI often will not decode. If the video will not open, remux it to MP4 first with a tool like HandBrake or ffmpeg.

How does frame-by-frame stepping work?

floi samples the decoder's own frame timings to measure the true frame rate, then steps by exactly 1 / fps. Use and for one frame, or hold Shift for one second.

The rate sits in a picker next to the timecode. Detection fills it in automatically, and you can override it. Pick 23.976, 25, 59.94 or any standard rate if you know what your footage was shot at.

Can I extract many frames at once?

Yes. Set an interval, anywhere from every 0.5 seconds to every minute, then press Extract series. floi seeks and captures each point in turn, shows progress, then lets you download the whole set as a ZIP. Batches are capped at 300 frames per run to stay within browser memory limits.

Can I use this on a YouTube video?

Not directly. A browser cannot read pixels out of YouTube's cross-origin player, and its media servers do not permit cross-origin fetches. Either download the video first (only where you have the right to) and open the file here, or use Live Capture, which samples what is already on your screen.

To step through a YouTube video frame by frame in the player, pause it and press . and ,, which are YouTube's own shortcuts. They do not exist on mobile, and they cannot save the frame for you; this extractor does both, on any device, once you have the file.

move openesc close