Compress a video to fit a limit

Fit a video under WhatsApp, email or a size limit, compressed in this browser tab and never uploaded.

How it works

Messaging apps and email impose size limits, and a phone video often sails past them. This tool shrinks a video to fit a limit you choose (WhatsApp, email, or a custom size) rather than making you guess a bitrate.

It reads the video’s length, calculates the bitrate that fits your target, and re-encodes to MP4 (H.264 video, AAC audio) using a video engine that runs entirely in your browser. The first time you compress, that engine (about 30 MB) downloads and is then cached for next time. Your video is never uploaded.

Because quality has a floor, a very small target on a long video may not be fully reachable: the tool tells you when that happens instead of producing something unwatchable.

How to use it

  1. 1 Choose your video (MP4, MOV or WebM).
  2. 2 Pick a target size, WhatsApp, email, or under 10 MB.
  3. 3 Press Compress. The first run downloads the video engine (~30 MB).
  4. 4 Download the compressed MP4.

Good to know

  • The first compression downloads the engine once; after that it works offline.
  • Very small targets on long videos may not be fully reachable, quality has a floor.
  • Output is an MP4 (H.264 / AAC) that plays almost everywhere.
  • Your video is never uploaded. It is compressed in your browser.

Browser support

  • Chrome 94 and later
  • Firefox 113 and later · full speed from 130
  • Safari 16.4 and later
  • Edge 94 and later

These are the oldest versions with everything the tool uses. They are worked out from the tool itself, so they change when it does.

Version numbers checked on 2026-09-04.

Video size is bitrate multiplied by time, and nothing else

The arithmetic of video is simpler than people expect and it is the whole game. A video file is approximately its bitrate multiplied by its duration. Nine megabits per second for ten minutes is about 675 megabytes, and no amount of choosing "high quality" in a menu changes that relationship. If you need a two minute clip to fit under 16 MB for WhatsApp, you have roughly 1,000 kilobits per second to spend, and every decision after that is about how to spend them.

This is why a quality slider on a video encoder is a worse interface than it is on an image encoder. With a still image you can encode, measure and retry in a fraction of a second. A video encode is minutes of work, so guessing a setting and discovering the result was 40 MB is expensive in a way that guessing at a JPEG is not. The size has to be planned before the encode, not discovered after it.

So this tool works backwards from the target. It takes the duration, subtracts what the audio track needs, and derives the video bitrate that fits the remaining budget, then encodes once at that bitrate. The audio matters more than people expect at small targets: 128 kbps of stereo AAC over ten minutes is about 9.6 MB, which is most of a WhatsApp limit before a single frame of video is encoded. At aggressive targets, dropping the audio to mono at 64 kbps buys back more than any video setting will.

Where the budget per second gets genuinely small, resolution has to come down too. Bitrate is spread across pixels, so 1,000 kbps looks acceptable at 640x360 and looks like a smear of blocks at 1920x1080. The encoder has the same number of bits either way; the question is whether it is describing two million pixels per frame or two hundred thousand. Reducing resolution is not giving up, it is spending the budget where it survives.

The encoding runs in your browser through ffmpeg compiled to WebAssembly. That engine is about 30 MB, which is why it loads only when you actually compress something and never on the landing page. It is also why the video route is the one page on this site served with cross-origin isolation: threaded WebAssembly needs SharedArrayBuffer, and SharedArrayBuffer needs headers that would break ordinary advertising scripts, so that route gets them and no other route does.

Frequently asked questions

How do I make a video small enough to send on WhatsApp?

Pick the “WhatsApp (16 MB)” target, choose your video, and press Compress. The output is an MP4 that fits.

Why does the first compression take a while to start?

The first run downloads the ~30 MB video engine. It is cached afterwards, so later compressions start immediately and work offline.

Is my video uploaded to a server?

No. The whole compression runs inside your browser tab.

Why can’t a long video reach a very small size?

Below a minimum bitrate the video becomes unwatchable, so very small targets on long videos may not be reachable; the tool compresses as far as sensible and tells you.

Which video formats are supported?

Common inputs like MP4, MOV and WebM. The output is an MP4.

Related tools

How this tool was built — a step-by-step account of the engine, the code and what went wrong.

Your files are processed on your device and are not uploaded. You can verify this in your browser’s developer tools under the Network tab.