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.

1 min readSume
All posts

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.

File size window from TikTok's 516 kbps and 500 MB limits; arithmetic with 1 MB = 1,000,000 bytes (read 2026-10-03)
LengthSmallest file at 516 kbpsHighest average bitrate under 500 MB
15 s0.97 MB266.7 Mbps
30 s1.94 MB133.3 Mbps
60 s3.87 MB66.7 Mbps
180 s11.61 MB22.2 Mbps
600 s38.70 MB6.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

All Media tools posts

Written by Sume