Truth Social 450 MB video limit: average bitrate for 15 minutes

A 450 MB cap over a 900-second clip leaves about 4 Mbps for video plus audio. Worked ceilings for 5, 10 and 15 minutes, and a Python check before upload.

4 min readSume
All posts

A 450 MB file that runs the full 15 minutes has an average ceiling of 4 megabits per second for video and audio together. The arithmetic is 450 megabytes times 8, which is 3,600 megabits, divided by 900 seconds. That is a ceiling for the whole file, not a target, and it assumes 1 MB is 8 megabits as a decimal unit. Truth Social's help page does not say whether MB means decimal or binary, so leave some headroom.

The two numbers on the page

Truth Social's upload page lists the maximum video size as 450 MB and the maximum duration as 15 minutes. The page does not list a bitrate, a codec, a resolution or a frame rate. This post only works with the two numbers it gives.

Average bitrate ceiling under a 450 MB cap (read 2026-10-05)
Clip lengthSecondsCeiling for video plus audio
5 minutes30012 Mbps
10 minutes6006 Mbps
15 minutes9004 Mbps
60 seconds6060 Mbps

Where the cap actually bites

Short clips almost never reach the cap, so duration is the limit that matters for them. The size gate only bites near the top end, where a high bitrate source or a high resolution render can pass 450 MB before it reaches 15 minutes. Sume video inspect returns size_bytes and duration_seconds in its probe, so you can calculate the real average before upload instead of guessing.

Check a probe before you upload

Run a probe with frames set to false, which returns the probe and no stills. In the probe, read duration_seconds and size_bytes. Note that size_bytes can be null, so treat a null as a failed check and not as a pass.

The function below returns the average megabits per second for the probe and says whether the file fits under 450 MB and 900 seconds. Replace the sample numbers with your own probe values.

LIMIT_BYTES = 450 * 1_000_000
LIMIT_SECONDS = 900

def check(probe):
    size = probe.get("size_bytes")
    secs = probe.get("duration_seconds")
    if size is None or not secs:
        return {"ok": False, "reason": "missing size or duration"}
    mbps = size * 8 / secs / 1_000_000
    ok = size <= LIMIT_BYTES and secs <= LIMIT_SECONDS
    return {"ok": ok, "average_mbps": round(mbps, 2)}

print(check({"size_bytes": 380_000_000, "duration_seconds": 840}))
print(check({"size_bytes": 520_000_000, "duration_seconds": 840}))

What to change if it is over

If the file is over, shorten it first. Video trim cuts a range of one hosted clip into a new MP4, and for exact precision it accepts an output object with width, height and fps. Width and height run from 256 to 2160, and fps is 24, 25, 30 or 60. Smaller dimensions and a lower frame rate usually reduce the size, but Sume does not expose a bitrate control, so measure the result with another probe and do not assume a number.

Trim also accepts audio set to drop. That removes the soundtrack, which matters if you only need a silent loop, but it is not a good idea for a talking clip.

Reading the average honestly

The 4 Mbps figure is an average over the whole file, and real encodes vary. A talking head with a static background compresses far below the average. A fast-moving scene, film grain or a busy handheld shot can sit far above it for stretches. Because the cap is on total bytes, quiet stretches pay for loud ones, so a file with a 6 Mbps average over 10 minutes lands at 450 MB exactly and has no room left.

Audio counts too. The ceiling above is for the sum of video and audio, so a stereo AAC track at a typical speech rate takes a small slice, but it is not zero. When you plan a render, subtract the audio rate you expect from the ceiling before you set the video side. Sume's audio detach job can produce an mp3 at 128 kbps if you need to measure what an audio track costs on its own.

Finally, remember the units. This post uses 1 MB as 1,000,000 bytes, which is the smaller reading of the two. If the platform counts in binary megabytes the true cap is about 4.9 percent higher, so planning with the decimal reading is the safe side.

Cost of the checks

Sume's trim job costs $0.02 per job at the public rate, and the docs tell you to confirm the live rate in the catalog. A probe is billed by its compute, so skipping stills with frames set to false keeps it small.

Sources

Related posts

More in Integrations

All Integrations posts

Written by Sume