100% on-device

Compress a video in your browser

Drop any common video — MP4, MOV, MKV, AVI, WebM — and get an MP4 that fits under the limit you name. No upload, no sign-up, no watermark.

How it works

  1. Drop any video. The engine reads the file itself rather than trusting its extension, so the container does not matter — MP4, MOV, MKV, AVI and WebM all land the same way.
  2. Name a size, not a bitrate. Type a limit (or tap Email 25 MB · WhatsApp 16 MB · Discord 10 MB) and the tool works backwards from your budget and the clip's duration to a bitrate that lands under it.
  3. Download an MP4. Re-encoded to H.264/AAC on your device by FFmpeg compiled to WebAssembly — the format that plays everywhere, whatever you started with.

In our own test, an 81-second 798 MB .mov straight out of an editor came out at 23.6 MB — 97% smaller — under a 25 MB email cap.

Resolution, frame rate and bitrate are three dials, and they are not interchangeable

Bitrate is the one to turn first: H.264 spends bits where motion and detail are, so halving the number does not halve what you see. Resolution is the second lever - going from 1080p to 720p discards more than half the pixels before encoding begins, which leaves the survivors a thicker share of the same budget and often looks sharper than 1080p squeezed into it.

Frame rate is usually the wrong dial for video. Consecutive frames at 60 fps are nearly identical, so they are cheap to predict and cost far less than their count suggests, while halving them makes panning visibly stutter. Cut frames only for a screen recording of a mostly static interface, where there is genuinely nothing between one frame and the next to describe.

Duration and the audio track decide what is left for the picture

A size cap is a total, so the per-second budget is that cap divided by the length. Thirty seconds under an email limit is generous; forty minutes of screen recording under the same limit is not, and no encoder setting rescues it. Audio is subtracted first - at 128 kbps that is 960 kB for every minute, by arithmetic alone, before a single frame is encoded.

The other ceiling is the machine. FFmpeg here is WebAssembly running on one thread, so a job takes longer than the same job on a desktop build, and the file has to fit in what the browser tab will allocate. Length and pixel count drive both of those, not the container you started with - an hour of 1080p is real work wherever it runs.

Questions

Is my video really not uploaded?

Yes — and not as a policy, as a fact of how it is built. There is no upload endpoint: the file is read straight into this browser tab and compressed by code running on your own machine. You can watch the Network tab while it works, or pull your Wi-Fi out mid-compression and it will still finish. Nothing is stored, nothing is queued, and there is no account.

Which formats can I drop?

MP4, MOV (including QuickTime and ProRes exports), MKV, AVI, WebM, WMV, FLV, MPEG and the .MTS files camcorders produce. FFmpeg identifies a video by probing its bytes, not by its file name, so the container genuinely does not matter — if it is a video, it is worth dropping.

Why does it always give me an MP4?

Because that is the answer to the question you actually have. An MP4 with H.264 video and AAC audio is the one combination that plays on every phone, every browser, every editor and every chat app — and it is what email, Discord and WhatsApp size limits are built around. Keeping your original container would hand you a smaller file that still will not open where you need it.

Will it fit exactly under my limit?

That is the whole design. The size you type is a hard ceiling: the bitrate is solved from your byte budget and the clip's duration, and if the encoder overshoots anyway the tool rescales and re-encodes rather than handing you a file that misses the cap.

Why is the first compression slow to start?

The video engine (FFmpeg, ~30 MB of WebAssembly) downloads once, the first time you compress something. After that the browser caches it, and it is shared with the GIF and audio tabs — so every run after the first starts immediately.

Other formats

The same workbench handles all of them — pick a tab above, or start from its own page:

All six engines on one page →