Split a 10-minute TikTok into parts for 3 and 5-minute accounts

TikTok's API allows up to 10 minutes, but an account may be limited to 3 or 5. Split a 600-second video into 4 or 2 parts with Sume trim at $0.02 a job.

5 min readSume
All posts

Short answer

For a 600-second video, a 3-minute account needs 4 parts of 150 seconds, a 5-minute account needs 2 parts of 300 seconds, and a 10-minute account needs 1 part. Cut each part with Sume's video trim at $0.02 a job, so the splits cost $0.08, $0.04 and nothing. The limit to use is the one your user's account reports, not the API's 10 minutes.

What TikTok says

TikTok's media transfer guide for the Content Posting API says video can be up to 10 minutes through the API, and that end users may be limited to 3, 5 or 10 minutes (read 2026-10-05). The same guide lists MP4, WebM and MOV, a size of up to 4 GB, and upload in chunks of 5 to 64 MB. So a video that the API accepts may still be refused for an account whose limit is lower, and the fix is to know the limit before you cut.

The split arithmetic

Parts are the smallest count that fits the limit, cut evenly. Trim jobs are $0.02 each at the public rate.

Splitting a 600-second video by account limit, read 2026-10-05
Account limitPartsSeconds per partTrim cost
3 minutes (180 s)4150$0.08
5 minutes (300 s)2300$0.04
10 minutes (600 s)1600$0.00

Generate the trim requests

The script computes the part count with ceil, divides evenly and prints one request body per part. Each body uses precision exact for a frame-accurate cut. Because duration must be 0.2 to 900 seconds, every part fits. Send each body to POST /v1/video-trim with its own Idempotency-Key; the source must already be on media.sume.com.

import json, math

def split(total, limit, url):
    n = math.ceil(total / limit)
    each = total / n
    return [{"video_url": url, "start": round(i * each, 3),
             "duration": round(each, 3), "precision": "exact"}
            for i in range(n)]

url = "https://media.sume.com/artifacts/artf_demo/long.mp4"
for body in split(600, 180, url):
    print(json.dumps(body))
print("trim cost: $%.2f" % (0.02 * math.ceil(600 / 180)))

Cut on a pause

An even split can land mid-sentence. If the video is speech, run video inspect with transcribe set, and nudge each cut to the nearest gap between words, keeping every part under the limit. A part that is 148 seconds cut at a pause is better than 150 seconds cut in a word, and the account limit still holds.

Note the trim API's own limits: the source can be up to 1800 seconds and each output between 0.2 and 900 seconds. A 10-minute video is well inside both.

If the source is longer than 1800 seconds, such as a livestream recording, trim it into sections of 1800 seconds or less first, because the trim route refuses a longer source with source_duration_exceeded. Then split each section for the account limit. Keep a table of part number, start, duration and job id so a re-run after a failed upload cuts only what is missing.

Posting the parts

Post the parts in order and put the part number in the title text you send with each post, so viewers can follow. I did not find a TikTok field for linking parts, so use the title. Upload each part separately in chunks per the guide, and keep the Sume job id with the publish id so you can match them later.

If you want chapters instead of equal parts, use the transcript to find topic breaks and cut there. The part count then depends on the content, but the rule is the same: no part longer than the account limit. Check each part with a probe before you upload, and re-read the limit from the account at post time, since it can differ between users.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume