Threads API video rules: H.264, AAC, edit lists, and what Sume covers
Meta's Threads page lists MP4 or MOV, H.264 or HEVC, AAC, no edit lists and a front moov atom. Which of these Sume documents, and which you must check.

Sume's docs confirm only some of Threads' container rules. Meta's Threads API page asks for MOV or MP4 with no edit lists and the moov atom at the front, HEVC or H.264 video with progressive scan, closed GOP and 4:2:0 chroma, and AAC audio up to 48 kHz. Sume's trim docs say exact precision re-encodes with libx264 and yuv420p and remuxes kept audio as AAC, which covers codec, chroma and audio. Edit lists, moov position and GOP are not documented, so inspect your output.
Rule by rule
Status is based on what the Sume docs state, not on my testing of files.
| Threads rule | Value | Sume docs say |
|---|---|---|
| Container | MOV or MP4, no edit lists, moov atom at front | Output is MP4; edit lists and moov position not documented |
| Video codec | HEVC or H.264, progressive, closed GOP, 4:2:0 | Trim exact: libx264, yuv420p; GOP not documented |
| Audio codec | AAC, max 48 kHz, mono or stereo | Trim exact remuxes kept audio as AAC; sample rate not documented |
| Frame rate | 23 to 60 FPS | Output fps 24, 25, 30 or 60 all fit |
| Resolution | Max horizontal 1920 px | Output sides 256 to 2160; keep width at 1920 or less |
| Duration and size | Max 300 s and 1 GB | Sume does not cap at 300 s; you set the duration |
Steps
- Cut or assemble the video with
precision: "exact"so it is re-encoded rather than copied. - Keep width at 1920 or below. A 1080x1920 portrait and a 1920x1080 landscape both fit.
- Keep the duration at 300 seconds or less.
- Run
ffprobeor MediaInfo on the downloaded file for edit lists and moov position, since the Sume result does not report them. - If Threads rejects the file at publish time, read its error before you re-render.
The keyframe precision is a stream copy, so it inherits whatever the source had. Use exact when a platform has codec requirements.
A quick file check
The fastest way to settle the open items is to probe one finished file. A media tool such as ffprobe shows the video codec, the pixel format, the audio codec and sample rate, the frame rate, and the duration. For the moov atom position, inspect the order of the atoms at the start of the file. For edit lists, look for an elst atom in the track header.
Do this once per pipeline, not per file. If the first output passes, and you keep the same settings, later files from the same job type will normally behave the same way. If you change precision from exact to keyframe, check again, because a stream copy keeps what the source had.
If a file fails Threads' check at publish time, the fix is usually outside Sume: a remux that moves the moov atom to the front, run on your side.
What Sume does not do
Sume does not promise moov-first MP4, no edit lists or closed GOP, because its docs do not state them. It does not call the Threads API either.
Sources
Related posts
More in Developers
- Threads API video max is 300 s: split a 21-minute talk into parts
The Threads API page lists video up to 300 seconds and 1 GB. Split a 21-minute recording into five trim requests with a small Python script. $0.02 per trim.
- Threads video aspect ratio runs 0.01:1 to 10:1: Sume Timeline sizes
Meta's Threads page allows ratios from 0.01:1 to 10:1 with 9:16 recommended and 1920 px max width. Sizes that Sume Timeline can output inside those bounds.
- TikTok 500 MB cap and 10 minutes: the bitrate that fits is 6.67 Mbps
TikTok's non-Spark in-feed ad page allows 10 minutes and 500 MB or less. A full 10 minute ad fits only at 6.67 Mbps or below. The arithmetic and a Sume render.
- TikTok 516 kbps minimum bitrate: a 30 second ad is at least 1.94 MB
TikTok's non-Spark spec lists bitrate of 516 kbps or more. The smallest file for 15, 30 and 60 seconds is shown with the math, plus how to check a Sume render.
Written by Sume