Playhead vs your own yt-dlp and ffmpeg script
You can absolutely do this yourself: yt-dlp fetches the video, ffmpeg extracts frames at whatever rate you pick, and a Whisper call gets you a transcript. That part is an afternoon. What takes the other months is everything after it — keeping the frames anchored to a time the model cannot lose, knowing what you did and did not cover, telling a dissolve from a cut, and keeping nine platforms working when they change their minds about who may download what.
Last updated
What a script of your own is better at
First, because a comparison that opens with our own advantages is an advertisement rather than a comparison.
- Free, entirely under your control, and no vendor to depend on.
- You can tune it to exactly one use case, which a general tool never fits perfectly.
- No data leaves your infrastructure.
- For a single fixed pipeline over your own files, this is often the right call.
What it is, and where it runs
| Capability | Playhead | a script of your own |
|---|---|---|
| Nothing to install or maintain | YesOne URL. The toolchain is ours to keep working. | Noyt-dlp needs updating roughly weekly, and each platform breaks in its own way. |
| Platform access when a site starts refusing datacenter traffic | YesTLS fingerprinting per platform, proof-of-origin tokens for YouTube, and a retry path when one route is blocked. | NoThis is the part that turns a weekend project into an ongoing job. |
What it can look at
| Capability | Playhead | a script of your own |
|---|---|---|
| Timestamp burned into the pixels of every frame | YesEvery tile carries its time in a strip above the picture. A model cannot lose track of which frame it is looking at, and cannot invent a time for one. | PartlyPossible, and it is exactly this list that is the work. |
| States what it covered and where the gaps are | YesEvery response carries a coverage object: covered seconds, whether that was the whole video, every second it was not, and where to resume. | PartlyPossible, and it is exactly this list that is the work. |
| 30 fps inspection, frames 33 ms apart | YesThe motion level puts two consecutive frames on a sheet at full size — the level at which easing curves and dropped frames become visible. | PartlyPossible, and it is exactly this list that is the work. |
| SMPTE timecode from camera and edit-suite masters | YesWhen a file carries timecode, every tile is stamped with it in blue beside the elapsed time in yellow — the clock an editor's notes and the NLE are already in. | PartlyPossible, and it is exactly this list that is the work. |
| Broadcast and production containers | YesMXF (XAVC, XDCAM, AVC-Intra, DNxHD), ProRes MOV, GXF, LXF, TS and DV. Camera raw is refused by name with the export to make instead, rather than failing obscurely. | PartlyPossible, and it is exactly this list that is the work. |
| Photo carousels (TikTok photo mode, Instagram) | Yesyt-dlp refuses these outright, so we ship our own extractor. Slides become one frame per second — second 0 is slide 1 — and the response says so rather than implying a duration. | PartlyPossible, and it is exactly this list that is the work. |
| Meta Ad Library links | YesA facebook.com/ads/library link is a video like any other, which is what makes competitor-ad teardowns a normal call rather than a workaround. | PartlyPossible, and it is exactly this list that is the work. |
What it measures
| Capability | Playhead | a script of your own |
|---|---|---|
| Cut times returned as numbers | Yesscene_cuts is a list of seconds, with pacing alongside it — segment count, median and shortest segment, cuts per minute. | PartlyPossible, and it is exactly this list that is the work. |
| Transitions classified, not counted as cuts | YesDissolves, fades, dips, wipes and whip-blurs are detected on a longer baseline and named. Without that, a film with six dissolves reads as six extra cuts and its pacing comes back too fast. | PartlyPossible, and it is exactly this list that is the work. |
| Freezes, black frames and silence detected | YesOne decode produces freezes, black frames, silence gaps and loudness together — the checks a render QA pass is made of. | PartlyPossible, and it is exactly this list that is the work. |
| Sees what happened between the sampled frames | YesA separate pass reads every frame at 32x32 grayscale, so a one-frame flash, a three-frame cut and a half-percent-per-second push-in are found even though no sheet shows them. | PartlyPossible, and it is exactly this list that is the work. |
| Says whether the audio was speech at all | YesMusic scored over a video transcribes into fluent sentences nobody said. The response reports that assessment instead of handing back lyrics as dialogue. | PartlyPossible, and it is exactly this list that is the work. |
Building on it
| Capability | Playhead | a script of your own |
|---|---|---|
| Tunable to exactly one pipeline | PartlySix levels plus raw fps, grid and sheet-width overrides. Wide, but it is somebody else's set of choices. | YesYou control every parameter, and a general tool never fits one fixed use case as precisely as code written for it. |
| Token arithmetic done for you | YesEvery response reports its estimated vision tokens before you send it to a model, and sheets are sized to the 1568 px ceiling rather than past it. | NoThe most common and most expensive mistake here: extracting frames larger than any model will actually look at. |
Running it
| Capability | Playhead | a script of your own |
|---|---|---|
| Free, with no per-video cost | Partly60 credits a month free, then paid. Repeat questions about a window already paid for cost 20%. | YesYour own hardware and your own Whisper key. At high volume on footage you already hold, this is simply cheaper. |
| Video never leaves your infrastructure | NoThe hosted service downloads and processes on our machines. An on-premise deployment exists for enterprise; the hosted product does not run locally. | YesNothing leaves. For footage under NDA, or anything a data-processing agreement covers, this decides it on its own. |
| No vendor to depend on | NoIf we are down, you are down. That is the trade for not maintaining a toolchain. | YesIt breaks when you break it, and you can fix it the same afternoon. |
The verdict
Which is to say: what actually decides it, rather than which row count is higher.
The part people underestimate is not extraction, it is the arithmetic of tokens and the honesty of coverage. A model downscales any image past 1568 px, so a 4K frame costs more and reads no better; looking closer has to mean fewer frames per sheet, not bigger ones, and getting that backwards makes a bill that scales with resolution for no benefit. And a script that quietly samples 100 frames from a 40-minute video produces confident answers about the 39 minutes it never saw. Playhead is the version of that script that states its gaps.
If none of that applies — if you want it on a phone, in a backend job, or shared with a team — the quickstart is two minutes and the free tier needs no card.