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
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
Open your video
Drag a video file onto the page, or click to browse for it. It loads instantly because nothing is uploaded.
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.
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.pngRuns 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
| Key | Action |
|---|---|
| Space / K | Play or pause |
| ← → | Step one frame back / forward |
| Shift + ← → | Jump one second |
| C / Enter | Capture 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
| Control | What it changes |
|---|---|
| Play / Pause | Start or pause playback. |
| Seek | Drag the timeline to move through the video. The timecode shows position and duration. |
| −1s / +1s | Move one second backwards or forwards. |
| ◀ frame / frame ▶ | Move by 1 divided by the chosen frame rate, in seconds. |
| Frame rate | Detect 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 timecode | Enter 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
| Control | What happens |
|---|---|
| Frame thumbnail | Open a preview with Download and Close buttons. Escape closes it too. |
| Seek here | Return the video to the captured frame's timestamp. |
| Remove | Delete that frame from the tray. |
| Download | Save that frame in the format used when you captured it. |
| ZIP | Download all frames still in the tray as one archive. |
| Clear | Remove 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