Video tools

Trim / cut video

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

Trim / cut video copies the packets between startSec and endSec into a new MP4, named with a -trimmed.mp4 ending. Nothing is decoded, so the kept range comes out byte for byte, rebased to start at zero. endSec has no default, and a startSec at or past the end is refused rather than written as an empty clip.

Input

Options

Questions

Does trimming re-encode my video?

No. Packets are copied straight from the source into a new MP4 without decoding a single frame, so the picture and sound come out bit for bit identical to the parts you kept. That also makes it fast and means it runs in Node, on the command line and through MCP, not only in the browser.

Why does my cut start earlier than I asked?

Because a packet level trim can only start at a keyframe. The tool asks for the nearest keyframe at or before your start time and begins there, the same trade-off ffmpeg makes with -c copy. Frames between that keyframe and your start time are included. Cutting exactly on the requested frame would require decoding and re-encoding, which this tool deliberately does not do.

What do I have to fill in?

startSec defaults to 0, and endSec has no default because there is no sensible one. Both are in seconds. startSec must be a non-negative number and endSec must be greater than startSec, otherwise you get "endSec must be a number greater than startSec". If startSec sits at or past the end of the file, the tool refuses with "is at or past the end of the video" rather than writing an empty clip.

What format is the output?

Always MP4, whatever went in. A WebM or MOV input is remuxed into MP4 with its original codecs untouched. The file is named after your input with -trimmed.mp4 on the end. Audio is copied over the same range when the source has an audio track, and the kept range is rebased so it starts at zero.

Why does it say no video track found?

Because the file it opened has no video track it can read. The tool works on MP4, WebM and MOV containers. An audio only file goes to Trim or merge audio instead, which does the same packet copy for sound. A file with an unsupported codec can also fail to open at all, since the container reader has to understand the track before it can copy it.

Does the file get uploaded?

No. Bytes are read into memory and the new MP4 is built in memory next to them, all on your device. Nothing is sent anywhere. Because both copies live in memory at once, a large source video can still run a browser tab out of room even though no re-encoding happens.

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