Compress a video to fit an upload limit
Free, no sign-up, and nothing is uploaded.
Worked example
Pick a target size and the required bitrate is calculated from your clip's actual length, rather than guessed from a table.
Each preset is a resolution cap and a quality level. Downscaling does most of the work — halving the height removes three quarters of the pixels, which no quality setting can match.
| Preset | Settings |
|---|---|
| Tiny — 480p, for messaging | CRF 30 · 480p |
| Small — 720p, for the web | CRF 27 · 720p |
| Balanced — 1080p (recommended) | CRF 23 · source |
| High quality — keeps resolution | CRF 20 · source |
| Near-lossless — for editing | CRF 18 · source |
For a 60-second clip with 128 kbps audio, these are the video bitrates that land under each common upload limit:
| Upload limit | Video bitrate |
|---|---|
| 8 MB — Discord, free | 969 kbps |
| 10 MB — WhatsApp | 1243 kbps |
| 25 MB — Gmail attachment | 3299 kbps |
| 100 MB — Discord Nitro | 13579 kbps |
The equivalent command
ffmpeg -i holiday-clip.mp4 -c:v libx264 -crf 23 -pix_fmt yuv420p -preset veryfast -c:a aac -b:a 160k -movflags +faststart -threads 1 -y out-holiday-clip.mp4
This is exactly what runs in the browser. Copy it to run the same job locally on a file too large for a tab.
Why it matters
Most "compress to 8 MB" tools apply a fixed quality setting and hope. Size and bitrate are related by one equation — size equals bitrate times duration — so the bitrate that hits a target is arithmetic, not guesswork, once you reserve space for the audio track and the container's own overhead. What is genuinely unpredictable is the reverse: at a constant quality setting the size depends on the footage, which is why this tool refuses to show an estimate in that mode.
What this needs
A 30.7 MB FFmpeg download, cached by your browser after the first time. Nothing is downloaded until you click.