TikTok ad file size window: 516 kbps floor to a 500 MB cap
TikTok's ad specs set a 516 kbps floor and a 500 MB cap. See the smallest and largest sensible file from 15 seconds to 10 minutes, and read yours with Sume.

TikTok's video ad specification gives a bitrate of at least 516 kbps and a file size of 500 MB or less, for videos up to 10 minutes. Together they define a window for every length: a file smaller than the floor allows is too compressed, and one larger than the cap is too heavy. The arithmetic is simple, and Sume's video inspect gives you the two numbers you need to check a file.
The limits are from TikTok Ads Help: video ad specifications (read 2026-10-03). The page does not say whether MB means 1,000,000 or 1,048,576 bytes, so the numbers below use 1,000,000, the stricter reading.
The window by length
The smallest file at a length is the floor: 516 kbps times the seconds, divided by 8. The largest average bitrate is 500 MB times 8, divided by the seconds. Short ads never come near the cap. At the full 10 minutes the cap works out to an average of about 6.7 Mbps.
| Length | Smallest file at 516 kbps | Highest average bitrate under 500 MB |
|---|---|---|
| 15 s | 0.97 MB | 266.7 Mbps |
| 30 s | 1.94 MB | 133.3 Mbps |
| 60 s | 3.87 MB | 66.7 Mbps |
| 180 s | 11.61 MB | 22.2 Mbps |
| 600 s | 38.70 MB | 6.7 Mbps |
What it means for a normal ad
A 30-second 1080x1920 ad is nowhere near the cap, so the floor is the only limit worth checking. At the other end, a 10-minute upload at 8 Mbps would be 600 MB and fail the size limit, even though the length is allowed.
Check a file
Video inspect returns size_bytes and duration_seconds in its probe when you pass frames: false. This arithmetic runs on those two numbers. The values below are example numbers for a 30-second file; swap in your probe's output.
size_bytes = 9_400_000 # probe["size_bytes"]
seconds = 30.0 # probe["duration_seconds"]
kbps = size_bytes * 8 / seconds / 1000
print(round(kbps), "kbps")
print("floor ok:", kbps >= 516)
print("cap ok:", size_bytes <= 500_000_000)
That average includes the audio track, so it is a close check, not an exact one. If the file is under the floor, regenerate or re-export it at a higher quality rather than trying to fix it afterwards.
Regenerate or re-encode
Sume's Timeline renders MP4 and has no bitrate field, so you steer file size through length, resolution and content rather than a setting. If a file lands under the floor, measure a few more renders before you change anything, since the average depends on how much motion the picture has.
Sources
Related posts
More in Media tools
- Pitch sizzle reel: trim three episodes and join them for $0.19
Cut a 60 second pitch reel from three finished episodes: three video-trim jobs, three audio detaches and one timeline render. Total $0.19, with the request.
- TikTok photo carousel comments take 9 photos: make the set in Sume
TikTok now lets a comment carry up to 9 photos. What the announcement leaves out, and how to build a matching set with Sume's Image API.
- TikTok Pulse Core ad creative: what the video needs to book
What a TikTok Pulse Core ad needs: Reach and Frequency creative specs, booking windows, Spark option, and how to conform a clip with Sume Video trim.
- TikTok Spark Ads: 10-minute cap on sparked videos, probe then trim
TikTok's Spark Ads page says videos over 10 minutes cannot be sparked, though the in-feed page says no duration limit. Probe the length, then trim.
Written by Sume