Skippable in-stream bills at 30 seconds: cut a 30-second version
Google bills skippable in-stream per view at 30 seconds watched, or full length if shorter. Cut a 30-second version of a long master with video-trim.

A skippable in-stream ad has no maximum length, but the bill has a 30-second hinge. Google's video specs page says skippable in-stream uses CPV bidding, where you pay when a viewer watches 30 seconds, or the whole video if it is shorter than 30 seconds, or interacts with it (read 2026-10-07). A 30-second version of your master means the view is complete at the point you pay for it.
Sume's video-trim makes that version for $0.02 and leaves the long master untouched.
The lengths and billing on Google's page
From Google Ads video ad specs.
| Format | Length on the page | Billing on the page |
|---|---|---|
| Skippable in-stream | no max (under 3 minutes recommended) | CPV: 30 s watched, or full length if shorter, or interaction |
| Non-skippable in-stream | 15-60 s depending on campaign subtype | Target CPM (impressions) |
| Bumper | 6 s (5 s minimum) | Target CPM (impressions) |
| YouTube Shorts ads | under 60 s recommended | Target CPM, or TrueView views |
Decide with the hinge
A view is paid at 30 seconds or on interaction, so a 3-minute ad and a 30-second ad pay on the same event. The difference is what the viewer sees by then. If the first 30 seconds of the long master carry the offer and a clean ending, cut at a natural stop; if the story needs two minutes, keep the long one and accept that the pay point lands mid-story.
I am not claiming either choice costs less or converts better. The page defines the trigger, and nothing else.
Cut the 30-second version
Video trim takes a clip hosted on media.sume.com, start, and one of end or duration. The source can be up to 1800 seconds, so a 3-minute master is no problem. The script builds the body and refuses nonsense before you spend a call.
import json
def trim_body(url, start, seconds, master_seconds):
if start < 0 or start + seconds > master_seconds:
raise ValueError("range outside the master")
return {"video_url": url, "start": start, "duration": seconds}
body = trim_body("https://media.sume.com/artifacts/artf_demo/master-180s.mp4", 0, 30, 180)
print(json.dumps(body))Check the result
Poll the job as described in Jobs and results, then use video inspect to confirm duration_seconds is 30 or a little under. A trim that runs past the source end clamps and adds trim_clamped_to_source to warnings[], so read the warnings.
A cautionary note
Google's line concerns what triggers the charge. It says nothing about how well each length performs, and I have no numbers. Test the two cuts against each other in your own account rather than assuming the shorter one wins.
Also keep the first five seconds in mind for skippable formats: the viewer can skip early, so the opening matters more than the length. A related post covers sampling those first frames with video-inspect.
Sources
Related posts
More in Media tools
- Split a 9-minute recording into three Reels under 3 minutes
Instagram's Reels page says Reels over 3 minutes won't be recommended to new audiences. Find sentence ends with video-inspect STT, then cut with video-trim.
- Test a Kling motion control look on 10 seconds for $1.575, then run 30
On Sume a 10-second Kling 3.0 motion control test costs $1.575 and the full 30-second run $4.725. How to cut the test clip and what it can and cannot tell you.
- Three-minute Short: songs cap at 90 seconds, so plan the music bed
YouTube says most songs run up to 90 seconds in a 3-minute Short, some 60 or 30. Build the 180-second timeline with a voice spine and a looping, ducked bed.
- TikTok ad creatives prohibit watermarks: sample corner stills first
TikTok's reservation spec prohibits watermarks, TikTok's own included. Pull stills with video-inspect and crop the four corners before a reused clip goes up.
Written by Sume