halfsize / Size limits
Video size limits, by platform
Every platform publishes a cap, and almost every cap is measured differently from the number your file manager shows. Here are the limits people actually hit, checked in November 2026, and the one command that lands under each of them.
The current caps
| Platform | Cap | What counts | Fit it |
|---|---|---|---|
| Discord (free) | 20 MB | per file, per message | --for discord |
| 16 MB | video sent as media | --for whatsapp | |
| 20 MB | video sent in a chat | --for wechat | |
| Gmail | 25 MB | the whole message, after base64 | --for gmail |
| Outlook.com | 20 MB | the whole message, after base64 | --for outlook |
| X / Twitter | 512 MB | per video upload | --for twitter |
| Telegram | 2 GB | per file, 4 GB on Premium | --to 2gb |
| Slack (free) | 1 GB | per file | --to 1gb |
| YouTube | 256 GB | per upload, 12 hours max | not the use case |
Caps change without much notice, and paid tiers differ. The presets are a convenience; --to always wins.
Why the number you see is not the number you get
Three things eat into a cap, and they stack:
- Decimal versus binary. Platforms mean 20,000,000 bytes. Windows and macOS often show 19.07 MiB and call it 19 MB. A file that “is 20 MB” can already be over.
- Base64 for email. Binary attachments are encoded as text, 3 bytes into 4. A 20 MB file becomes a 26.7 MB message and bounces at a 25 MB limit. Compress to 18 MB for Gmail, 15 MB for a 20 MB mailbox.
- Container and audio. The cap applies to the whole file, not the video stream. Muxing overhead and the audio track are part of the budget, which is why the planner subtracts them first.
Rule of thumb: aim 5% under the advertised cap for a normal upload, and divide by 1.37 first for an email attachment. --for already does both.
One command per cap
$ npx halfsize holiday.mp4 --for discord
target 20.0 MB
plan H.264 1280x720 2.46 Mbps audio 128 kbps 2-pass
scale 1920x1080 → 1280x720
output holiday.discord.mp4
136 MB → 19.45 MB 7.0x smaller 2.7% under target
VMAF 88.3 SSIM 0.971 slight softening
Swap the preset for the platform you are fighting: --for whatsapp, --for wechat,
--for gmail, --for outlook, --for twitter. Anything else becomes
--to 800mb or --to 700k.
What each cap costs in quality
Measured on the same 60-second 1080p30 source at 18 Mbps (136 MB), encoded locally on a laptop:
| Target | Output | Resolution | VMAF | Verdict |
|---|---|---|---|---|
| 20 MB (Discord, WeChat) | 19.45 MB | 1280×720 | 88.3 | slight softening |
| 18 MB (Gmail) | 17.62 MB | 1280×720 | 87.4 | slight softening |
| 16 MB (WhatsApp) | 15.59 MB | 960×540 | 84.8 | slight softening |
| 10 MB | 9.77 MB | 960×540 | 82.9 | slight softening |
| 5 MB | 4.93 MB | 640×360 | 72.0 | visible loss |
VMAF above 90 reads as “looks the same”, 80–90 as slight softening, 70–80 as visible loss. Real numbers move with content: a talking head does better than confetti.
When the target is arithmetically impossible
A cap is a bitrate budget: bytes × 8 ÷ seconds. One hour inside 20 MB is 44 kbps for video and audio combined, which no encoder can make look good. Since 0.1.9 the tool says so before encoding and reports the smallest size that duration can hold, instead of spending ten minutes to hand back a file that still does not fit. Trimming the clip is the honest fix.
FAQ
Why does a 20 MB file fail on a 20 MB limit?
Decimal megabytes versus binary mebibytes, base64 for email, and container overhead all count. Aim 5% under, or use the preset which already does.
What is Discord's free upload limit?
20 MB per file on the free plan as of November 2026. Nitro raises it; --to overrides the preset.
Does WhatsApp re-compress videos?
Yes, when you send video as media. Sending it as a document skips the 16 MB media cap and the second encode, but the recipient gets a file rather than a preview.
Can it hit a 2 GB target?
Yes, if the source has the bitrate to spend. A short clip cannot grow to fill a big cap, and a very long one cannot shrink into a tiny cap.
Is anything uploaded?
No. FFmpeg runs on your machine. No account, no quota, no watermark.