Free · no sign-up · no watermark

How it works

No server, no account, no queue. Here is what actually happens when you press the button.

Where the encode runs

Nothing is uploaded and nothing is encoded on a server. Your browser decodes the file with its own video pipeline, a canvas redraws each frame at the preset size with the preset’s filter chain applied, and the browser’s own WebCodecs encoder compresses the result. The MP4 container is assembled in the same tab.

There is no engine to download. Nothing on this page fetches a binary, a model or a codec: the decoder, the drawing layer and the encoder are all parts of the browser you already opened. That is also why the first frame may pause for a moment — the decoder has to spin up — and why there is no progress bar for "loading".

Why the wait scales with frame count

Frames have to be decoded, redrawn and re-encoded in order, so time tracks the number of output frames rather than the length or sharpness of the source in isolation. A 12 fps preset over a minute of video is 720 frames. A 20 fps preset over the same minute is 1,200 frames for the same minute of watching.

Trim first if you only need a section. Encoding 30 minutes and cutting afterwards costs the full encode; trimming costs seconds. Keep the tab in the foreground too — browsers throttle background tabs, and a throttled tab makes the encode crawl.

What it refuses to do

Files over 2 GB, longer than 30 minutes, or above 1080p are stopped before encoding starts — you get a message, not a failure at 80%. Anything above 1080p is scaled down and we say so.

Mobile browsers are not supported in this release: the frame pipeline needs video memory and a hardware encoder that phone browsers will not give a background tab.

The numbers we publish

Every preset states its resolution, frame rate and target bitrate. No vague "quality" percentage. If a number changes, it changes on this page too.

Bitrate is a target, not a guarantee: the encoder came in 4–14% above it in our tests, and short clips drift most because the first keyframe has nowhere to spread its cost. Output size estimates use 1.15× the target for that reason.

Each row was produced by exporting from this build and reading the file back with ffprobe — not estimated from theory.
Frame pipelineCanvas 2D · browser-native filter chain
EncoderWebCodecs · H.264
Presets matching spec5 of 5 — size, frame rate, frame count
Bitrate accuracy4–14% above target
Size estimate assumes1.15× target
Formats acceptedanything the browser can decode
Download for any inputnone
Uploadnone — file stays in the tab

← Back to the tool