Sports coaches, animators and editors often need to see exactly what happens between two frames. This player moves one frame at a time, shows the real frame number and timecode, and saves any frame as a full-resolution PNG, all in your browser.
Processing locally on your device
Overview
Stepping frame by frame sounds simple, but browsers seek by time, not by frame. At 30 fps a frame lasts only 33.3 ms, and at 60 fps it lasts 16.7 ms, so rounding errors easily land you one frame early or show the same frame twice. This player computes the exact interval for each frame from the frame rate and seeks to its midpoint. It then uses requestVideoFrameCallback, which reports the presentation time of the frame actually on screen, to display the true frame number instead of a guess based on the clock.
Getting the frame rate right matters just as much. When you open a file, ffmpeg (WebAssembly, downloaded once, about 31 MB) reads the rate stored in the file, for example 23.976, 25, 29.97, 59.94 or 120 fps. Until it finishes, the player measures the rate from presented frames during playback and snaps it to the nearest standard value. You can also type a rate yourself. That helps with variable-frame-rate phone videos, where the nominal rate (30 or 60) gives the most sensible frame numbers.
Timecode is shown as HH:MM:SS:FF, non-drop-frame, so 00:01:12:15 means one minute, 12 seconds and frame 15 of that second. Jump straight to a timecode, a time such as 1:23.5 or 83.5s, or a plain frame number. Playback speed runs from 0.1× to 2×. The A-B loop repeats a range for close study. The zoom (2×, 4× or 8×) asks the browser for unsmoothed pixels where supported, so you can inspect motion blur, focus or compression artifacts.
Export frame saves the current frame at the video's full native resolution as a lossless PNG, named after the file and frame number, such as clip-frame-000412.png. The thumbnail strip under the video lets you scrub quickly through the whole clip, with the loop range highlighted. If your browser can't play the file (MKV, AVI, HEVC on some systems), the player can make a playable copy with ffmpeg first.
| Frame rate | One frame lasts | Typical source |
|---|---|---|
| 23.976 / 24 fps | 41.7 ms | Film, cinema cameras |
| 25 fps | 40.0 ms | PAL broadcast, European video |
| 29.97 / 30 fps | 33.3 ms | Phones, NTSC broadcast, screen recordings |
| 50 fps | 20.0 ms | PAL sports broadcast |
| 59.94 / 60 fps | 16.7 ms | Phones, gameplay, action cameras |
| 120 fps | 8.3 ms | Slow-motion phone and action-cam modes |
Drop a video file. The frame rate is read automatically in the background.
Press → or . to go forward one frame and ← or , to go back. Hold Shift to jump 10 frames.
Type a timecode, a time or a frame number in Go to, then press Enter.
Set A and B (keys A and B) to loop a range, and slow it down to as little as 0.1×.
Press Z to zoom into the frame and S, or the export button, to save it as PNG.
Use cases
Step through a golf swing, a sprint start or a tennis serve frame by frame. Loop the key half-second at 0.25× and save the frames at impact to compare sessions.
Check spacing, timing and in-betweens one frame at a time, read the exact frame number of a glitch, and send the timecode to the artist who needs to fix it.
Video at 60 fps holds sixty candidate photos every second. Step to the frame where eyes are open and motion is sharp, then export it as a PNG at full resolution.
Dashcam and security footage often hinge on a single frame. Read the exact moment with frame-level timecode and zoom into number plates or details without uploading sensitive footage.
Pro tips
Answers to common questions about the frame-by-frame player.
Each step seeks to the middle of the target frame's display interval, and the displayed frame number comes from requestVideoFrameCallback, which reports the timestamp of the frame actually shown. On constant-frame-rate video this lands on every frame exactly.
It shows 30 fps until it knows the real rate. ffmpeg normally reports it within a few seconds (the first time it also downloads the ~31 MB engine). In the meantime, playing the video at 1× lets the player measure the rate from the frames it presents.
HH:MM:SS:FF is hours, minutes, seconds and frames within that second. At 25 fps the frame field runs from 00 to 24. Fractional rates such as 23.976 use the nearest whole number (24) as the frame base, as non-drop-frame timecode does.
This player exports the frame on screen, one at a time. To pull every Nth frame or a whole range as images, use the Frame Extractor tool.
Yes. Stepping backwards takes a little longer on long-GOP files such as phone videos, because the browser has to decode forward from the previous keyframe. Every frame is still reachable.
No. ToolEnhancer processes files on your own device inside the browser. They are never sent to, stored on or seen by our servers.
Yes. The frame-by-frame player is free to use with no sign-up, no watermarks and no daily limits.
Open any image, video or audio file.
Organize media stored on your device.
Audio playback with waveform.
Compare two images with a slider.
Present photos as a slideshow.
Browse a local folder of media.