How browser-based video compression works

The short version: FFmpeg runs inside your browser. Your video never leaves your device. The long version is below.

The Technology

FFmpeg, compiled to WebAssembly

FFmpeg is the video processing engine behind VLC, most encoding pipelines and a large share of the video on the internet. It is a long-lived C codebase that handles close to every codec and container ever shipped.

WebAssembly is a binary instruction format that browsers execute in the same sandbox as JavaScript, at speeds far closer to native code than JavaScript can reach. Compiling FFmpeg to it — the job of the ffmpeg.wasm project — puts a real encoder inside a browser tab.

When you compress a video here, that roughly 30 MB WebAssembly binary is downloaded once, cached, and then run locally. No video data is sent anywhere.

What runs in your browser

$ ffmpeg -i input.mp4 \

-c:v libx264 \

-b:v 2000k \

-preset ultrafast \

-vf scale=-2:720 \

-c:a aac \

output.mp4

✓ Done — output written to the virtual filesystem.

Why the page sets unusual HTTP headers

FFmpeg is multi-threaded, and WebAssembly threads need SharedArrayBuffer — memory that the main thread and web workers can both touch. Browsers only expose it to pages that are cross-origin isolated, which requires two response headers: Cross-Origin-Opener-Policy and Cross-Origin-Embedder-Policy.

This site sends both. If your browser will not grant SharedArrayBuffer, the tool falls back to a single-threaded build of the FFmpeg core — slower, but it still works, and it still never uploads anything. The full explanation of ffmpeg.wasm, COOP and COEP is in this guide.

What the privacy claim actually covers

No uploads

Your video bytes travel zero distance over the network. The file stays on your disk and in your browser memory only.

No accounts

There is no user database. Nothing to log in to, and therefore nothing to breach.

Page analytics only

Cookieless page-view counts on our own analytics server — URL, referrer, country, device class. Never your file, its name, its size or its contents.

The full details are on the privacy page.

Step by step, from file picker to download

1

You select a video file

The browser reads the file from your disk into memory. Nothing is transmitted. The page also probes the duration with a hidden <video> element so it can compute a bitrate target.

2

The FFmpeg WebAssembly core loads

Roughly 30 MB of WebAssembly is downloaded once, then cached by the browser. It initialises a virtual filesystem that exists only inside the tab.

3

Your video is written to the virtual filesystem

The file is copied into FFmpeg's in-memory filesystem — a sandboxed environment that lives in browser memory and is discarded when the tab closes.

4

FFmpeg encodes the video

The command built from your settings runs on your CPU. FFmpeg's own log output streams into the progress panel, so you can see exactly what it is doing.

5

The output is read back

The compressed file is read out of the virtual filesystem, wrapped in a Blob URL, and offered to you as a download.

6

You download the result

The smaller video is saved to your disk. The virtual filesystem is discarded. Nothing about the file was ever recorded anywhere else.

The honest limitations

Running the encoder locally has real costs, and it is better to know them before you start a two-hour export.

  • It is slower than native FFmpeg. WebAssembly is fast, but a browser sandbox is not a bare-metal encoder. Expect a browser encode to take noticeably longer than the same command in a terminal.
  • Your device's memory is the file size limit. The source and the output both live in RAM. A phone will handle a short clip fine and fall over on a multi-gigabyte one.
  • The first run downloads about 30 MB. On a slow connection that is a real wait. It is cached afterwards.
  • Hardware encoders are unavailable. A browser page cannot reach your GPU's video encoder, so everything runs on the CPU.
  • Newer codecs cost more than the charts imply. H.265 and VP9 are both in the build, and both ask a great deal more of the CPU than H.264 does. On a CPU with no help available, that turns a wait into a much longer wait, which is why H.264 is what the tool reaches for unless you say otherwise.

If you compress video daily, install FFmpeg locally — it will be faster. This tool exists for the case where you want one file smaller, right now, without installing anything or handing the file to a stranger.