TikTok Spark Ads vs standard ad video specs: what to render
TikTok lists .mp4 or .mov and no duration limit for Spark Ads, but 9:16 minimums, 500 MB and up to 10 minutes for non-Spark ads. Sume returns MP4.

TikTok's video ad specification page splits the rules in two. Spark Ads list only the formats .mp4 or .mov and say there is no duration restriction. Non-Spark ads list aspect ratios with minimum sizes, up to 10 minutes, 500 MB or less, five container formats and a 516 kbps bitrate floor. Sume's Timeline, trim and video filter jobs all return MP4, which both rows accept.
Side by side
The Spark row has blanks where the other row has numbers. A blank on that page means the page did not list a value, not that the platform has no limit, so do not read it as unlimited.
| Item | Spark Ads | Non-Spark ads |
|---|---|---|
| Aspect ratio and size | Not specified | 9:16 min 540x960 (recommended), 16:9 min 960x540, 1:1 min 640x640 |
| Duration | No restrictions | Up to 10 minutes |
| File size | Not specified | 500 MB or less |
| Formats | .mp4 or .mov | .mp4, .mov, .mpeg, .3gp, .avi |
| Bitrate | Not specified | 516 kbps or more |
| Codec | Not specified | Not specified |
What to render
Render one MP4 and it fits both rows on format. For the non-Spark row, make it 9:16 at 1080x1920 (the Timeline default), keep it under the length you actually need, and check the size and bitrate after. A 15 to 30 second ad is nowhere near the 10-minute ceiling.
A Sume video model request that serves this: ask for aspect_ratio: "9:16", a duration the model lists, and resolution: "1080p" where the model offers it. The vertical request example explains why size is rejected and what to send.
A simple decision rule
Start from the strict row. If you render to satisfy the non-Spark limits, 9:16 at 1080x1920, a few tens of seconds and a file well under 500 MB with a bitrate above 516 kbps, the same file meets every value the Spark row lists. The Spark row names only a container and no duration limit, and an MP4 qualifies on both.
That means you do not need two pipelines. You need one render and one pre-flight check, then you pick the ad type in TikTok's own tools. Which type fits your campaign is outside the scope of the specification page, and this post does not take a view on it.
Two things can still go differently. A Spark row with blanks may be enforced elsewhere, and TikTok may change either row. Re-read the page before a large launch, and keep the clean master and the platform-specific export as separate files so a change in one rule does not force a regeneration.
Where the page leaves you guessing
Neither row names a codec. Sume's exact trim re-encodes with libx264 and yuv420p, per the trim doc, which is a common choice, but TikTok's page does not state that it is required or accepted. If an upload fails, the codec is the first thing to compare. Whether Spark Ads have any hidden size limit is also not on this page, so test one before building a batch.
Sources
Related posts
More in Use cases
- Make a Top 5 vertical video from five stills with Sume Timeline
Five images, a 30-second silent Timeline at 1080x1920, then burned captions: the slot math, the still-motion limit and the cost in Sume.
- Tote bag mockup with an AI image API: your logo on a canvas bag
Send your logo as a reference to GPT Image 2.5 on Sume and ask for a canvas tote on a plain studio set. Check the logo against the original before you list it.
- Trim an ad cutdown from an MCP client: dry run, wait, result
Cut a 15-second holiday ad version from an MCP client with Sume video_trim: dry_run shows the $0.02 estimate, then jobs_wait and jobs_result return the MP4.
- 12 sale plates from an MCP client: compose, then one batch wait
Fan out 12 Sume timeline_compose jobs for holiday sale plates, then wait for all with one jobs_wait on job_ids, and read the results in one call.
Written by Sume