Sources and formats
Nine platforms are recognised by name, any other page is attempted generically, and your own files upload directly. That last part covers more than web video: camera masters and edit-suite formats work too, and when one carries SMPTE timecode it is stamped onto every frame beside the elapsed time.
Last updated
Platforms
Recognised by name means there is a route to it that is maintained — several of these actively refuse datacenter traffic, and getting a video out of them is a per-platform problem rather than a download.
| Source | What is specific about it | URLs |
|---|---|---|
| YouTube | Videos, Shorts and unlisted links. Public captions are used when the uploader wrote them, which is both free and more accurate than transcribing. | youtube.com/watch, youtu.be, youtube.com/shorts |
| TikTok | Videos and photo carousels. Carousels need an extractor of our own — yt-dlp refuses them — and slides come back as one frame per second, second 0 being slide 1. | tiktok.com/@user/video, vm.tiktok.com |
| Public Reels and posts, including photo carousels. Anything behind a private account has to be uploaded instead. | instagram.com/reel, instagram.com/p | |
| X (Twitter) | Videos in public posts. | x.com/user/status, twitter.com/user/status |
| Facebook and Meta Ad Library | An ads-library link is a video like any other, which is what makes a competitor's creative something you analyse rather than describe. Watch, Reels and public posts work the same way. | facebook.com/ads/library/?id=…, fb.watch |
| Vimeo | Fetched through the player endpoint, so no account is involved. | vimeo.com/…, player.vimeo.com |
| Twitch | Clips and VODs. | twitch.tv/…/clip, clips.twitch.tv |
| Hosted video in posts. | reddit.com/r/…, redd.it | |
| Dailymotion | Public videos. | dailymotion.com/video |
| Any other page | Attempted generically: a landing-page hero video, a webinar recording, a direct .mp4 or .m3u8 URL. This reaches a great many sites and is not a guarantee — a page that hides its video behind a login or a bespoke player can still refuse. | example.com/launch, cdn.example.com/reel.mp4 |
| Your own files | Uploaded once and reused for every later call. The only route for anything private, geo-blocked, or that never was on a platform. | an export, a screen recording, a camera master |
File formats
What ffprobe can read once the bytes are here — a longer list than the platform one, and a less interesting one, except at the two ends.
Web and delivery
What comes off a platform or out of an export preset.
mp4 · mov · mkv · webm · avi · m4v
Camera and edit suite
Production formats, not just web video. When one of these carries SMPTE timecode, every tile is stamped with it in blue beside the elapsed time in yellow — two clocks, both true.
mxf (XAVC · XDCAM · AVC-Intra · DNxHD) · mov (ProRes) · gxf · lxf · ts · dv
Refused, by name
Camera raw needs the manufacturer's own decoder, which cannot be shipped in a container. These are turned away with the export to make instead, rather than failing with something obscure about a stream.
.r3d · .braw · .ari · .crm
How the source is handled
Four things happen to every video before anything measures it, and each one changes what an answer means.
- Letterboxing is detected, not analysed
- A 16:9 video pasted into a 9:16 frame is two thirds black bars. The picture inside is found and the tiles show that region, so you are not paying for, or reasoning about, the padding.
- Interlaced sources are woven first
- Broadcast masters are routinely fielded. Fields are combined before anything measures a frame, because comb artefacts read as motion to every detector downstream.
- Only the window asked for is fetched
- Ask about 0.7 seconds at 30 fps and 0.7 seconds are downloaded, not the whole video. Measured on one HD window: 19 seconds and 12 MB instead of minutes and 100+ MB.
- A login wall is not a block
- The two failures need different fixes — one means upload the file, the other means try again from somewhere else — so they are reported as different things rather than as a generic failure.
Uploading is covered under the REST API, and the way an agent sends a local file up without a key of its own is on the connect page.
Questions
- Can Playhead analyse a TikTok video?
- Yes, including photo carousels — TikTok's photo mode, which yt-dlp refuses outright, so we ship our own extractor for it. Carousel slides come back as one frame per second, second 0 being slide 1, and the response says so rather than implying a duration.
- Can it analyse an ad from the Meta Ad Library?
- Yes. A facebook.com/ads/library link is a video like any other here, which is what makes a competitor's creative something you watch frame by frame rather than describe from its caption.
- Does it work with any website?
- Any page is attempted with a generic extractor, which reaches a great many sites — a landing-page hero video, a webinar recording, a direct .mp4 or .m3u8 URL. It is not a guarantee: a page that hides its video behind a login or a bespoke player can still refuse, in which case upload the file.
- Can it read broadcast formats like MXF and ProRes?
- Yes. MXF covering XAVC, XDCAM, AVC-Intra and DNxHD, ProRes in MOV, plus GXF, LXF, TS and DV. Camera raw — .r3d, .braw, .ari, .crm — needs the manufacturer's own decoder and is refused by name, with the export to make instead.
- What about private or login-walled videos?
- They cannot be reached by link, and no amount of retrying changes that. Upload the file instead — that is the route that exists for private, geo-blocked and never-published footage.