all tools

Video tools 18

Trim, merge, compress, rotate and convert video, and pull audio or frames out of it. These use WebCodecs in your browser, so they need a recent Chrome, Edge or Safari and they do not run on the command line. Several copy packets instead of re-encoding, which is faster and lossless.

Video7

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→nCompress videoShrink 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.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

Audio5

Frames & GIF4

n→nVideo thumbnailGrab a single frame from a video as a PNG or JPEG, in the browser only, like pdf-to-image (src/tools/pdf-to-image.ts), because decoding a frame needs WebCodecs, which Node has no equivalent of.Runs on each file you dropn→nExtract video framesPull out one frame every N seconds as a sequence of PNGs, in the browser only, like pdf-to-image (src/tools/pdf-to-image.ts), because decoding frames needs WebCodecs, which Node has no equivalent of.Runs on each file you dropn→nVideo to GIFConvert a video clip to an animated GIF. In the browser only, like video-extract-frames (src/tools/video-extract-frames.ts), because decoding frames needs WebCodecs, which Node has no equivalent of. WebCodecs has no GIF codec at all, so this decodes frames with mediabunny/WebCodecs and then builds the GIF89a bytes itself (src/gif.ts): one shared 256-colour palette (median-cut, sampled across every frame this tool decodes, not per-frame) so colours stay consistent frame to frame, with each pixel mapped to its nearest palette entry. No dithering.Runs on each file you dropn→nGIF to videoConvert an animated GIF into a video, in the browser only, like video-convert (src/tools/video-convert.ts), because encoding needs WebCodecs, which Node has no equivalent of. WebCodecs has no GIF codec at all, so this parses the GIF89a bytes itself (src/gif.ts), including disposal method and transparency compositing, so a GIF built from partial-frame deltas decodes to the same full frames a browser would show, not only its raw per-frame rectangles. It then feeds the composited frames to mediabunny/WebCodecs to encode. Always outputs MP4, following every other Node-native remux tool in this codebase; each frame's own GIF delay becomes its video frame duration. MP4 has no alpha channel, so any transparent GIF pixel, composited onto a canvas that starts fully transparent black, becomes opaque black in the video, not the checkerboard a GIF viewer shows; verified by executing this tool against a transparent fixture and reading the pixel back out.Runs on each file you drop

Overlay2

Questions

Why do the video tools only work in a browser?

They use WebCodecs, which Node has no equivalent of. Running one on the command line refuses with a message pointing at its page. Use a recent Chrome, Edge or Safari.

Do they re-encode my video?

Several do not. Trim, merge, mute, rotate and audio extraction copy packets, which is fast and lossless. Compression, resizing, watermarking and subtitle burn-in decode and re-encode, because they change the pixels.

How large a file can I work on?

The video is held in browser memory, so the limit is your device rather than a rule here. A phone will run out on a long recording sooner than a laptop will. Trimming first is the usual way to make a large file manageable.

What format do I get back?

MP4 for most tools, .m4a for audio extraction, and the conversion tool lets you choose MP4 or WebM. Each page states its output, because guessing wrong wastes a long encode.

Is my video uploaded?

No. Everything happens in the tab. That is the point of the WebCodecs requirement: the encoding hardware in your machine does the work rather than a server you would have to upload to.