YouTube Shorts series: cut a long video into 3-minute episodes

A Shorts series needs Shorts only, portrait or square, up to 180 s. Plan windows of 170 s and send one Sume video-trim per episode with start and duration.

4 min readSume
All posts

For a YouTube Shorts series, every episode must be a Short, so portrait or square and at most 180 seconds. The practical plan with Sume is to compute episode windows, then send one POST /v1/video-trim per window, each with a start and a duration of 170 seconds or less. YouTube's page says the playlist for a Shorts series must contain only Shorts and that a season number is required (YouTube Help, read 2026-10-05).

Sume's trim route cuts one clip per job, up to 900 seconds of output from a source of up to 1800 seconds, at $0.02 per job in the public pricing constant.

Series rules from YouTube

The Create shows page lists the constraints that matter for a cut plan.

Shorts series rules (YouTube Help read 2026-10-05)
RuleDetail
Contentonly Shorts, portrait or square, up to 180 seconds
Seasona season number is required
Order, non-serial shownewest to oldest
Order, serial showoldest to newest
Thumbnailscustom thumbnails per Short are allowed in a series

Compute the windows

A 12 minute source cut into 170 second episodes gives five windows with a short last episode. Using 170 seconds instead of 180 leaves headroom, because an exact re-encode can land a frame off. The script prints each trim body; it does not call the API or read any key.

import json

def windows(total, step=170, min_tail=20):
    out, start = [], 0
    while start < total:
        length = min(step, total - start)
        if length >= min_tail:
            out.append({"start": start, "duration": length})
        start += step
    return out

for i, w in enumerate(windows(720), 1):
    body = {"video_url": "https://media.sume.com/artifacts/artf_demo/long.mp4", **w}
    print(i, json.dumps(body))

Cut each episode

Send each body to POST /v1/video-trim with its own Idempotency-Key, for example one per episode number, and poll GET /v1/jobs/:id/status and /result, because the trim route has no GET resource route. Default precision is exact, a frame-accurate re-encode. keyframe is faster but can start a group of pictures early, and the result reports actual_start_seconds. The video trim docs list both. A trim does not change the aspect ratio; a 16:9 source cut this way is still 16:9, and still not a Short.

Costs and checks

Five episodes cost five trim jobs, so $0.10 at the public rate of $0.02 per job; confirm the live price in GET /v1/catalog. Before cutting, a probe-only call to video inspect with frames: false tells you the source duration and whether it has audio, so the window list is built from the real length and not a guess. After cutting, probe a finished episode once to confirm it is within 180 seconds. A series with an episode that is 181 seconds long is no longer all Shorts, and the playlist rule then fails.

When not to use this

Cut at story beats, not at fixed windows, if the content has natural breaks; use a transcript to find them. This plan only prepares clips. Creating the series, choosing the season number and uploading are done in YouTube, and the rollout of Shorts series is announced on YouTube's own blog.

Sources

Related posts

More in Use cases

All Use cases posts

Written by Sume