Free tool · H.264 · Runs in your browser
Compress a video
Short answer
Pick 480p, 720p or 1080p and the tool re-encodes your video as H.264 at CRF 28 inside your browser, so nothing is uploaded. On our 10 second 1080p test clip (13.36 MB) the three presets produced 0.36 MB, 0.65 MB and 1.30 MB. A file that is already small can grow: our smallest source grew 22.3% at 1080p.
Batch is free and unlimited - files are processed one after another on your device, with no queue or daily cap. Maximum 100 MB per file; the first run loads a ~30 MB engine once per visit.
Pick a maximum output resolution. Check the downloaded file against your destination’s upload limit.
Key takeaways
- The presets set the largest frame, not a file size. The tool fits the video inside 854 × 480, 1280 × 720 or 1920 × 1080 without ever upscaling, and holds quality at CRF 28.
- Measured on the shipped engine: 13.36 MB became 1.30 MB (-90.3%), 0.65 MB (-95.1%) and 0.36 MB (-97.3%) at 1080p, 720p and 480p. Video only.
- The output bitrate follows the picture and the frame, not the input: at 720p three sources from 664 to 10,687 kbps all came out at 485 to 519 kbps.
- An efficient source can grow. The 829,715 byte source became 1,014,580 bytes at 1080p (+22.3%). Compare sizes before you upload.
- For an exact size, solve for the bitrate and encode in two passes: the result landed within 1.8% of the target in our test, against 7.9% to 11.3% under for a single pass.
What the tool does to your file
Every preset runs the same encode and differs only in the size of the frame it fits the video into. The tool scales the video down to fit inside the preset without ever scaling it up, keeps the aspect ratio, and rounds each side to an even number, which H.264 with 4:2:0 color requires.
| Setting | Value | What it means |
|---|---|---|
| Video codec | H.264 (libx264), yuv420p | The most widely accepted video format |
| Rate control | CRF 28 | A quality target, not a file size target. FFmpeg's wiki calls 17 to 28 the subjectively sane range, so 28 is its low-quality end |
| Encoder preset | veryfast | Faster encoding in the browser, at the cost of some compression efficiency |
| Audio | AAC, 128 kbps | Re-encoded, so it adds 16,000 bytes for every second of video |
| Frame fit | Fits inside 854 × 480, 1280 × 720 or 1920 × 1080, never upscales | A 16:9 source fitted to 854 × 480 comes out 852 × 480 in our test |
CRF is exponential: the FFmpeg wiki says +6 roughly halves the bitrate and file size, and -6 roughly doubles it. There is no CRF control in this tool; the value is fixed at 28.
Measured: what each preset produced
Measured on Big Buck Bunny, 10 second excerpt (CC BY 3.0, Blender Foundation), 1920x1080 at 30 fps. It is an animated film, not camera footage, so camera video with more motion and noise needs more bits. The test file has no audio track, so every size here is video only; the tool adds AAC at 128 kbps, which is 16,000 bytes for every second of video.
The three sources are the original excerpt (10.7 Mbps, 13,358,215 bytes) and two re-encodes of it, so the table shows what the tool does to a large file, a medium one and a small one. SSIM compares each output with its own source scaled to the output size; 1.0 would be identical.
| Source and preset | Output size | Change | Output video bitrate and frame | SSIM against the source |
|---|---|---|---|---|
| 10.7 Mbps source, 480p | 362,508 bytes (0.36 MB) | -97.3% against 13,358,215 bytes | 290 kbps, 852 × 480 | 0.9642 |
| 10.7 Mbps source, 720p | 648,407 bytes (0.65 MB) | -95.1% against 13,358,215 bytes | 519 kbps, 1280 × 720 | 0.9689 |
| 10.7 Mbps source, 1080p | 1,299,320 bytes (1.30 MB) | -90.3% against 13,358,215 bytes | 1,039 kbps, 1920 × 1080 | 0.9731 |
| 2.2 Mbps source, 480p | 356,114 bytes (0.36 MB) | -87.2% against 2,791,249 bytes | 285 kbps, 852 × 480 | 0.9659 |
| 2.2 Mbps source, 720p | 638,518 bytes (0.64 MB) | -77.1% against 2,791,249 bytes | 511 kbps, 1280 × 720 | 0.9719 |
| 2.2 Mbps source, 1080p | 1,247,311 bytes (1.25 MB) | -55.3% against 2,791,249 bytes | 998 kbps, 1920 × 1080 | 0.9787 |
| 0.66 Mbps source, 480p | 340,913 bytes (0.34 MB) | -58.9% against 829,715 bytes | 273 kbps, 852 × 480 | 0.9697 |
| 0.66 Mbps source, 720p | 606,661 bytes (0.61 MB) | -26.9% against 829,715 bytes | 485 kbps, 1280 × 720 | 0.9763 |
| 0.66 Mbps source, 1080p | 1,014,580 bytes (1.01 MB) | +22.3% against 829,715 bytes | 812 kbps, 1920 × 1080 | 0.9868 |
Video only; the test file has no audio track.
On the original, the 1080p preset made 1.30 MB (-90.3%), 720p made 0.65 MB (-95.1%) and 480p made 0.36 MB (-97.3%). Encoding the 10 second clip took between 10.4 and 32.3 seconds in a headless run of the same engine; your browser and device will differ.
Why the output is about the same size for very different sources
CRF aims at a quality, so the output bitrate follows the picture, not the input file. At 720p the three outputs were 485 to 519 kbps although the sources ran from 664 to 10,687 kbps, a 16-fold spread. The input only matters when it is already lower than the output the settings would produce, which is the next section.
The practical rule: resolution drives the size more than the source does. Going from 720p to 1080p took the video bitrate from 519 to 1,039 kbps on the original (2.0 times), from 511 to 998 on the medium source and from 485 to 812 on the smallest. Going from 720p down to 480p cut it by 44% on the original.
When the file gets bigger
The tool warns that an already efficient video can come out larger. The measurement shows how far: the smallest source, 829,715 bytes at 664 kbps, became 1,014,580 bytes (+22.3%) at 1080p, because the encode is held to CRF 28 and a slow, careful encode of the same clip had already used fewer bits than that. At 720p it fell 26.9% and at 480p 58.9%.
If the result is larger than the original, keep the original, or choose a lower preset. Compare the two sizes before you upload either.
Hit a target size: the formula and how close it gets
The presets cannot hit a size on purpose. When a service has a hard cap, work backwards: bitrate = file size / duration, then subtract the audio bitrate. This is the method on the FFmpeg wiki: a 200 MiB target over 600 seconds gives about 2,796 kbps in total, and about 2,668 kbps for video after 128 kbps audio.
Two-pass encoding spends the bits where the picture needs them and aims at that average. We measured both approaches on the 10 second clip with a 128 kbps AAC track, for three file sizes. Two-pass landed within 1.8% of the target; a single pass at the same bitrate came in 7.9% to 11.3% under it.
| Target and preset | Video bitrate from the formula | Two-pass result | Single-pass result | SSIM (two-pass) |
|---|---|---|---|---|
| 1.00 MB at 720p | 672 kbps | 1,003,559 bytes (+0.4%) | 897,086 bytes (-10.3%) | 0.9749 |
| 2.00 MB at 720p | 1,472 kbps | 1,987,604 bytes (-0.6%) | 1,811,354 bytes (-9.4%) | 0.9863 |
| 5.00 MB at 720p | 3,872 kbps | 4,925,876 bytes (-1.5%) | 4,604,349 bytes (-7.9%) | 0.9930 |
| 1.00 MB at 1080p | 672 kbps | 1,003,106 bytes (+0.3%) | 886,659 bytes (-11.3%) | 0.9624 |
| 2.00 MB at 1080p | 1,472 kbps | 1,983,418 bytes (-0.8%) | 1,794,233 bytes (-10.3%) | 0.9792 |
| 5.00 MB at 1080p | 3,872 kbps | 4,912,548 bytes (-1.8%) | 4,547,850 bytes (-9.0%) | 0.9903 |
Target is the whole file.
The single pass undershoots, so it wastes space you could have used for quality. If the cap is hard, use two passes.
Work out the bitrate for your size limit
Enter the limit and the length. The result is the video bitrate to give a two-pass encode, with the commands filled in.
- Total bitrate that fits
- 1,111 kbps
- Video bitrate after audio
- 983 kbps
- 480p preset on our test clip
- Likely fits: that clip needed up to 290 kbps
- 720p preset on our test clip
- Likely fits: that clip needed up to 519 kbps
- 1080p preset on our test clip
- Probably too big: that clip needed up to 1,039 kbps
- Two-pass commands at this bitrate
ffmpeg -y -i input.mp4 -c:v libx264 -b:v 983k -pass 1 -an -f null /dev/nullffmpeg -i input.mp4 -c:v libx264 -b:v 983k -pass 2 -c:a aac -b:a 128k output.mp4
3 min under 25 MB: 25,000,000 bytes × 8 ÷ 180 s ÷ 1000 = 1,111 kbps, minus 128 kbps audio.
The presets are a guide taken from one animated clip. Camera footage with more motion needs more bits, so the final check is the size of your own file.
Compress for a specific place
Each destination publishes its own cap. These pages turn a cap into a length that fits, with the same measurements.
Free tools:Compress a video for emailCompress a video for DiscordCompress a video for WhatsApp
Questions people ask
Does this upload my video?
No. The tool runs ffmpeg inside your browser, so the file stays on your device. It accepts files up to 100 MB, and the first run downloads an engine of about 30 MB once per visit.
What do 480p, 720p and 1080p do to a video?
They set the largest frame the video is fitted into, without ever scaling it up. On our 10 second 1080p clip (13.36 MB), 720p produced 0.65 MB and 480p 0.36 MB.
Why is my compressed video bigger than the original?
The quality is fixed at CRF 28, not a size. A source that is already smaller than that would produce can grow: our smallest source (829,715 bytes) became 1,014,580 bytes (+22.3%) at 1080p. Pick a lower preset or keep the original.
How do I compress a video to 10 MB or another exact size?
Work out the bitrate: file size in bytes × 8 / seconds / 1000 gives total kbps, then subtract the audio bitrate. Encode with two passes at that video bitrate. In our test two-pass landed within 1.8% of the target. The calculator on this page does the arithmetic.
Is CRF 28 good quality?
The FFmpeg wiki calls 17 to 28 the subjectively sane range, so 28 is the lowest quality in it. Our SSIM scores against the source were 0.96 to 0.99 across the nine runs. Look at the result at the size you will publish it.
How long does compression take?
In a headless run of the same engine, a 10 second 1080p clip took 10.4 to 32.3 seconds, with 1080p the slowest. Your browser and device will differ.
What happens to the audio?
It is re-encoded as AAC at 128 kbps. That adds 16,000 bytes for every second, which is a large share of a small file.
What is the maximum file size?
The tool accepts files up to 100 MB each. For larger files use a desktop encoder.
Can I compress a video for email, Discord or WhatsApp?
Yes. Gmail allows 25 MB on personal accounts, Discord 20MB without Nitro, and WhatsApp says its default is 100MB at 720p or 64MB at 480p. The pages linked above show how long a video fits under each.
Related
Sources and how we checked
- FFmpeg wiki: Encode/H.264 (CRF, presets and two-pass) (read 2026-10-06)
- Gmail Help: Send attachments with your Gmail message (read 2026-10-09)
- Discord Support: File Attachments FAQ (read 2026-10-09)
- WhatsApp Help Center: How to send media, contacts, or location (read 2026-10-09)
Reviewed October 9, 2026. Measurements ran the tool’s own ffmpeg arguments on the same single-thread WebAssembly engine your browser downloads, using a Big Buck Bunny excerpt (CC BY 3.0, Blender Foundation). The evidence file is in data/seo/hub/evidence/2026-10-09/compress.