Google Analytics helps us understand which tools you use and which actions work. Your files and entered text stay out of analytics.

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 the video in, step to the exact frame, export it at full size.

Signed in, typed text and settings save automatically to your private account. Text opened from files stays in this browser’s local storage. Files stay in your browser. Account saving

No video open
0:00.000 / 0:00
Format

Space play/pause · ←→ step one frame · Shift + arrows for 1s ·C capture

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

How to extract a frame from a video

  1. Open your video

    Drag a video file onto the page, or click to browse for it. It loads instantly because nothing is uploaded.

  2. Land on the exact frame

    Scrub the timeline, then use the left and right arrow keys to step one frame at a time until you have the shot.

  3. Capture and save

    Press C or click Capture frame, then download it as PNG, JPG or WebP.

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

Using the frame extractor

Opening and replacing a video

Drop your video on the empty player, or click it to Choose a video file. The file name and size appear above the player. The video stays in your browser.

Your browser must support the video's codec, not just its file extension. If it cannot play the file, convert it to a supported format first. Choose another closes the video and clears its captured frames. Then pick or drop a replacement.

Finding the frame

ControlWhat it changes
Play / PauseStart or pause playback.
SeekDrag the timeline to move through the video. The timecode shows position and duration.
−1s / +1sMove one second backwards or forwards.
◀ frame / frame ▶Move by 1 divided by the chosen frame rate, in seconds.
Frame rateDetect fps estimates the rate from decoded frame timings. Override it with 23.976, 24, 25, 29.97, 30, 48, 50, 59.94, 60 or 120 when you know the source rate.
Jump to timecodeEnter a position such as 00:12.500 and leave the field to seek there.

The frame counter depends on the detected or selected rate. Variable frame rate footage may not line up with a single fixed interval. If detection cannot find a rate, choose one manually.

Choosing the output

Format offers PNG, JPG and WebP where supported. PNG is lossless. JPG and WebP expose the Quality slider from 40% to 100%, initially 92%. Lower values usually make smaller files with more compression artefacts.

Capture frame adds the current picture to Captured frames at the video's native dimensions. The preview's on-screen size does not change the export resolution. A capture keeps its format and quality even if you change those settings later.

Extracting a series

Every selects an interval of 0.5, 1, 2, 5, 10, 30 or 60 seconds. Extract series starts at the beginning of the video, not your current position. It adds frames to the existing tray and shows progress.

A run is capped at 300 frames to limit memory use. If your interval would produce more, the confirmation offers the first 300. Choose a longer interval to cover more of the video. Playback stays paused after extraction.

Previewing and downloading frames

ControlWhat happens
Frame thumbnailOpen a preview with Download and Close buttons. Escape closes it too.
Seek hereReturn the video to the captured frame's timestamp.
RemoveDelete that frame from the tray.
DownloadSave that frame in the format used when you captured it.
ZIPDownload all frames still in the tray as one archive.
ClearRemove every captured frame without closing the video.

Full screen and keyboard controls

Full screen expands the workspace. Width offers Narrow, Wide and Full. Done, Escape or browser Back returns to the document.

While the workspace has focus, Space or K toggles playback. Left and Right Arrow step one frame; hold Shift to move one second. C or Enter captures a frame. Shortcuts leave input fields and dropdowns alone.

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. This tool 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.

Something missing? Request a feature

↑↓ move↵ openesc close