Video tools

Rotate video

Rotate 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 your device. The file is never uploaded.

Rotate video writes a rotation of 90, 180 or 270 degrees into the MP4 container and copies every packet across untouched. The angle you pick is added to whatever the source already declared and wrapped into the 0 to 359 range. No pixel is turned, so a player that ignores the metadata field shows the clip exactly as it was.

Input

Options

Questions

Does rotating re-encode the video?

No. The tool writes a rotation value into the container metadata and copies every packet across untouched. The pixels are never decoded, so there is no quality loss and no long encode. This is the same mechanism phones use to record sideways and still play upright.

Why does my player still show the old orientation?

Because that player ignores container rotation metadata. Most players honour it, but one that does not will show the original orientation. If you need pixels that are physically turned, you need a re-encoding tool, and this one deliberately is not that. The trade-off buys you a lossless, near instant result.

What angles can I use?

Only 90, 180 or 270 degrees clockwise, with 90 as the default. The container field itself holds one of those four values, so arbitrary angles have nowhere to be stored. The value you choose is added to whatever rotation the source already declared and wrapped back into the 0 to 359 range, so rotating an already rotated clip behaves as you would expect.

What is the output file?

Always MP4, named after your input with -rotated.mp4 on the end. Audio is copied through unchanged when the source has an audio track. A file with no video track is refused with "no video track found", since there is nothing to rotate.

Can I run this outside the browser?

Yes. Because nothing is decoded, this tool runs in Node too, so the command line and MCP surfaces accept it as well as the web page. The browser only restriction applies to the tools that need WebCodecs, such as Convert video and Compress video.

Is anything uploaded?

No. The file is read into memory, the new MP4 is assembled in memory and handed straight back to you. There is no server step and no account. Because both the source and the result are held at once, a large video can still be limited by how much memory your browser tab has.

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→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→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