Tools › Media › YouTube frame by frame
YouTube frame by frame
Step through any YouTube video one frame at a time, at the frame rate the video actually uses. Then save the frame you land on, without the paused controls in shot.
- Each step asks for an absolute time, so the error never accumulates
- Captures pile up on a shelf and come back as one ZIP
- Slow playback to a quarter speed to find the moment by eye
- The video streams from YouTube to you as normal, nothing is downloaded or proxied
Paste the YouTube link you want to step through
Arrow keys step a frame, shift and an arrow jumps a second. YouTube's own comma and full stop also work while the player has focus and is paused.
Held. The video is still playing underneath, so no controls are drawn over it. F freezes and resumes.
Cropped to the player: captures contain the video and nothing else. Share this tab rather than a window or a screen, or there is no way to work out where the video sits. Drag a box over a captured frame to narrow it further.
How a step lands where it was asked
| Approach | What happens |
|---|---|
| Synthetic key presses | Depends on focus, only works while paused, and the page is guessing at a player it does not own |
| Nudging the current time | Each nudge rounds, and the error accumulates over a run of steps |
| Asking for an absolute time | What this does. The target is tracked here and never read back from the player, so five steps at 30fps ask for exactly 0.1667s and a hundred ask for exactly 3.333s |
What "no drift" does and does not mean
The obvious way to step a frame is to read the player's current time, add a thirtieth of a second, and seek there. It looks right and it drifts: after a seek the player settles onto a real frame boundary slightly past where it was asked, and the next step reads that settled time and adds another frame on top of it. Measured here before this was fixed, five steps at 30fps moved nearly ten frames.
Keeping the target on this side removes the feedback loop. The player is told an absolute time every time, and where it happens to be is not an input. A hundred steps ask for exactly 3.333s.
What that does not buy is landing exactly there. YouTube snaps to the nearest frame it can decode, usually within a few hundredths, which is why the readout does not advance in perfectly even increments. The readout shows where the player actually is, because that is the frame you would capture, not where it was asked to go.
Why a canvas cannot touch it
A YouTube embed is a cross-origin iframe, and drawing one onto a canvas throws. That restriction is the whole reason a browser can be trusted with other people's pages, and no page can get round it, anything claiming otherwise is either proxying the video through a server or not doing what it says.
Screen capture is the way through. The browser asks you for it, every time, in its own dialogue, and hands back a stream of the surface you chose. Nothing here can take it silently.
The cost is that it is desktop-only: no mobile browser implements getDisplayMedia. Stepping still works on a phone, you just take a device screenshot instead.
Frame rates, and why you have to pick
YouTube's player API does not report the frame rate of the video it is playing. There is no call for it and no way to infer it from the outside, so a tool that steps by frames has to be told which rate to step at.
Most uploads are 30. Film and anything cinematic is 24 or 23.976, European broadcast material is 25, and gaming or sport is often 60. If a step seems to change nothing, the rate is set too high; if it skips, too low.
When the capture comes back black
A small amount of YouTube content plays through an encrypted media path, and that path blanks out under screen capture by design. The capture succeeds and returns a black rectangle.
This page checks for that and says so, rather than handing you a black PNG and leaving you to work out why. There is no way round it from a web page, and there should not be.
What you may do with the frames
The video belongs to whoever made it. Using a frame for reference, criticism, commentary or teaching is ordinary use. Passing it off as your own, or putting it on something you sell, is not.
Questions
Is the video downloaded?
No. It streams from YouTube to your browser exactly as it would on their site. Nothing is proxied, stored or re-hosted.
Why do I have to share my screen?
Because a cross-origin video cannot be drawn onto a canvas. Screen capture is the only route, and the browser asks you for it each time.
Does this work on a phone?
Stepping does. Saving does not: no mobile browser implements the Screen Capture API. Step to the moment and take a device screenshot.
Why is my capture black?
That video uses an encrypted media path, which blanks out under screen capture. It is a deliberate protection and there is no way around it.
Can I capture just the video, not the whole window?
Yes. Capture once, then drag a box over the picture, every capture after that is cropped to it, snapped to 16:9 if you want.
How accurate is the stepping?
The request is exact and does not accumulate error: the target time is kept here and never read back from the player, so a hundred steps at 30fps ask for exactly 3.333s. Where the player lands is its own business: YouTube snaps to the nearest frame it can decode, which is typically a few hundredths away and is why the readout does not move in perfectly even increments. The frame you capture is the one on screen.