Skippable YouTube ads: check the first 5 seconds with stills

Skippable in-stream ads can be skipped after 5 seconds and Google recommends under 3 minutes. Sample the pre-skip frames of a Sume clip with video inspect.

4 min readSume
All posts

A skippable in-stream YouTube ad can be skipped after 5 seconds, and Google's format page puts no maximum on its length while recommending that it stay under 3 minutes. Whatever the total length, the viewer decides on the opening five seconds, so those are the frames to check before you spend on a render. A Sume video inspect call returns stills at timestamps you name, which is enough to review the pre-skip window.

What Google lists for the in-stream formats

The Google Ads format page, read on 2026-10-03, lists the video ad lengths by format.

YouTube ad lengths (Google Ads Help, read 2026-10-03)
FormatLength
Bumper6 seconds (5-second minimum)
Non-skippable in-stream15 to 60 seconds, depending on subtype
Skippable in-streamNo maximum; under 3 minutes recommended; skippable after 5 seconds
In-feedNo maximum

Why the first five seconds are a separate deliverable

With the skip control arriving at 5 seconds, a skippable ad has a short stretch that every viewer sees and a long remainder that only some do. Treat them as two separate checks. The pre-skip window needs the message or the reason to keep watching. The remainder carries the detail for people who stayed.

The page gives no rule about what must appear in those seconds, and this post does not invent one. It only fixes the boundary: anything you want every viewer to see has to land before second 5.

Pull the pre-skip stills with video inspect

Video inspect reads one clip already on media.sume.com and returns stills as durable image artifacts. The docs say frames.at takes 1 to 24 explicit timestamps, each at least 0, and every value must fall inside the clip or the call fails with frame_time_out_of_range. The default max_edge is 768, and the default mode is sync, which waits up to 30 seconds for a 200 or returns 202 to poll. The route needs an Idempotency-Key, and the clip must be imported first with POST /v1/media-imports.

This request samples the opening in one-second steps plus one frame just before the skip control appears.

curl -X POST https://api.sume.com/v1/video-inspect \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: preskip-check-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/ad.mp4",
    "frames": { "at": [0, 1, 2, 3, 4, 4.8], "format": "jpeg", "max_edge": 768 }
  }'

Why sampling beats scrubbing

A batch of twenty ad variants is too many to scrub through by eye, and a fixed set of timestamps makes the comparison fair: every variant is judged on the same instants. Because video inspect returns durable image artifacts, the strips can be stored next to the job that produced the clip, so a later question about why one variant lost can be answered from the stills rather than from memory. The call reserves its compute and is billed by its own container seconds, so a probe-only call with frames: false is the cheaper first step if you only need duration and whether the clip has audio.

Reading the stills

Open the six stills as a strip. Frame 0 shows what a viewer sees the instant the ad starts, which for a generated clip is sometimes a soft or empty first beat. The frame at 4.8 seconds is the last thing seen before the skip option is available. If the strip does not tell a coherent story on its own, re-prompt the opening rather than trimming from the middle.

When the opening is right but the clip is too long for the slot, video trim takes a start and a duration and returns a new MP4 for $0.02 per job, with the source untouched. Re-run the inspect on the trimmed file, because the first seconds of the new clip are what you actually ship.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume