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
041204130414041504160417,..+1 frame

Paste the YouTube link you want to step through

How a step lands where it was asked

ApproachWhat happens
Synthetic key pressesDepends on focus, only works while paused, and the page is guessing at a player it does not own
Nudging the current timeEach nudge rounds, and the error accumulates over a run of steps
Asking for an absolute timeWhat 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.

Next

The guide that goes with this