Video tools

Compress video

Shrink a video by re-encoding it at a lower quality, in the browser only, like video-convert (src/tools/video-convert.ts), because mediabunny encodes through WebCodecs, which Node has no equivalent of. Always outputs MP4. Nothing is uploaded.

Runs on your device. The file is never uploaded.

Compress video re-encodes a clip at a quality preset, low by default, and returns MP4 named with a -compressed.mp4 ending. forceTranscode forces a real decode and encode even when the input already uses the output codec. There is no target size field, and re-encoding needs WebCodecs, which Node lacks, so the page is the only surface that runs it.

Input

Options

Questions

How much smaller will my video get?

That depends on the source, and the tool makes no promise. It re-encodes through mediabunny with the quality preset you choose, and quality defaults to low because shrinking is the point. A video that was already encoded efficiently at low bitrate might not shrink much, or at all. There is no target size field and no way to ask for a specific percentage.

Will the quality drop?

Yes. This is a lossy re-encode, not a lossless repack. The tool sets forceTranscode so that a file already using the output codec is decoded and encoded again rather than copied through unchanged. That is what makes compression possible, and it also means detail is lost. Pick medium or high quality if low looks too rough.

What format do I get back?

Always MP4. The output format is fixed to mediabunny Mp4OutputFormat regardless of what you put in, so a WebM or MOV input comes back as MP4. The file is named after your input with a -compressed.mp4 ending, for example holiday.mov becomes holiday-compressed.mp4.

Why will it not run on the command line?

Because it encodes through WebCodecs, which Node does not implement. The tool is marked browser only and the CLI and MCP surfaces refuse it up front with "video-compress needs a browser (OffscreenCanvas). Use it at /video/video-compress instead." The browser page runs the same code in a Web Worker.

How big a file can it take?

There is no fixed limit in the code, but the whole video is held in browser memory while it is read, and the compressed result is built in memory too. A short clip is fine on any machine. A long recording from a phone or a camera can exhaust a tab, and a phone gives up sooner than a laptop. If a large file fails, trim it first and compress the parts.

Is anything uploaded?

No. The file never leaves your device. Compression happens in a Web Worker in the page you have open, with no server round trip and no account. You can turn your network off and it still works after the first visit.

Related Video tools

n→nConvert videoChange videos between MP4 and WebM, in the browser only. It encodes with WebCodecs, which Node has no equivalent of, so the CLI and MCP surfaces refuse it.Runs on each file you dropn→nTrim / cut videoCut a video down to a start-to-end range without decoding a single frame. Packets are copied straight from the source into a new MP4, so this runs in Node, the CLI and MCP as well as the browser. The cut snaps back to the nearest keyframe before the start you asked for, the same trade-off ffmpeg -c copy makes.Runs on each file you dropn→1Merge videosConcatenate two or more videos, one after another, into a single MP4. A packet-level copy with no decoding, so this runs in Node, the CLI and MCP as well. Every input must share the same video codec (and audio codec, if present); mixed-codec inputs need re-encoding first, which this tool deliberately does not do.Combines the files you dropn→nResize / crop videoResize and/or crop a video, in the browser only, like video-convert (src/tools/video-convert.ts), because mediabunny decodes and re-encodes through WebCodecs, which Node has no equivalent of. Always outputs MP4.Runs on each file you dropn→nRotate videoRotate a video by a multiple of 90° by writing rotation metadata into the container, the same trick phones use for orientation, rather than re-encoding every frame. A packet-level copy, no decoding, so this runs in Node, the CLI and MCP as well as the browser. Most players honour this metadata; a player that ignores it will show the original orientation.Runs on each file you dropn→nChange video speedSpeed a video up or down by rescaling the timestamp on every packet. A packet-level copy, no decoding, so this runs in Node, the CLI and MCP as well as the browser. Audio speeds up with the video and its pitch shifts along with it, the same trade-off most simple speed-change tools make; correcting pitch back to normal needs decoding and resampling the audio, which this tool deliberately does not do.Runs on each file you drop