Mastodon video upload: 99 MB, one video, transcoded to 1300 kbps
Mastodon takes one video per post, up to 99 MB, and transcodes it to H.264 MP4 at up to 1300 kbps. What to send from Sume so the re-encode costs less quality.

Mastodon allows one video per post, up to 99 MB, in MP4, M4V, MOV or WebM, and then transcodes it to H.264 MP4 with a maximum bitrate of 1300 kbps and a frame rate up to 120 fps. Because of that second step, the quality limit is the server's bitrate, not your file: a 40 MB 4K clip and a tidy 720p clip both end up squeezed to the same ceiling. Send the smaller, cleaner file.
Limits on the page
| Item | Value |
|---|---|
| Video size | Up to 99 MB |
| Formats | MP4, M4V, MOV, WebM |
| Transcode | H.264 MP4, maximum 1300 kbps, up to 120 fps |
| Videos per post | One |
| Images per post | Up to 4 |
| Animated GIFs / audio files | One each per post |
What to send
Since the server re-encodes anyway, a smaller frame size loses little. With Sume, video trim in exact mode lets you set output to a width and height between 256 and 2160 and an fps of 24, 25, 30 or 60. A 720p output at 30 fps is a reasonable choice for a feed whose ceiling is 1300 kbps. Cut the length with start plus end or duration at the same time and one job ($0.02) does both.
import json
body = {
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"start": 0,
"duration": 45,
"precision": "exact",
"output": {"width": 720, "height": 1280, "fps": 30},
}
print(json.dumps(body, indent=2))
# POST to https://api.sume.com/v1/video-trim with an Idempotency-Key header
Check the size
After the job completes, probe the new MP4 with video inspect and compare probe.size_bytes with 99 MB (about 103,809,024 bytes if you read MB as MiB, or 99,000,000 if decimal; use the smaller to be safe).
Captions before you post
Mastodon's transcode keeps picture and sound but not a text track you did not attach, so burned-in captions are the portable option. Video captions burns styles such as slam or black-outline onto a clip for $0.20 per job up to 60 seconds. Captions are drawn once into the pixels, so do the resize first and caption the final frame size, then confirm the text is still legible at 720p.
Limits
Sume has no bitrate field, so you cannot target 1300 kbps yourself; your control is length and frame size. The page does not state a duration cap, and individual servers can set their own limits, so a particular instance may refuse a file the docs allow. Alt text and captions are separate steps; for the size question alone, see Mastodon video size limit.
Sources
Related posts
More in Media tools
- Keep the sound of AI clips in a Sume timeline: detach to a spine
A Timeline 1.0 render takes one audio spine. To keep audio generated with your clips, detach each clip's track, join the parts, and use that as the spine.
- Reference ingest OCR needs_verification: read the crop
Low-confidence on-screen text from reference ingest returns as needs_verification with a native crop. How the 0.85 default works and how to read the manifest.
- reference_ingest_semantic_unavailable: what to do instead
semantic: true is refused on reference ingest, and reference_ingest_unavailable means the media runtime lacks the function. The two errors and what to call.
- Restyle burned-in captions without paying for a second transcription
Pass source_caption_id to POST /v1/video-captions to re-burn the same video in another style, reusing its word timings. Billing is still one render.
Written by Sume