Trim MP4 — Free Online Tool

Trim any section from an MP4 video or audio file by specifying a start and end time. Uses stream copying to cut without re-encoding, so trimming is near-instant and preserves the original video and audio quality exactly.

FFmpeg Command

Copy this command to run the same conversion locally with FFmpeg on your desktop. Download FFmpeg

Free — no uploads, no signups. Your files never leave your browser.

Estimated output:

Conversion Complete!

Download

How It Works

The tool uses FFmpeg's stream copy mode (-c copy) to extract the specified time range from the MP4 file without re-encoding the video or audio streams. Rather than decompressing and re-compressing the H.264/H.265 or AAC data, FFmpeg reads the existing encoded packets and writes only those that fall within the requested time window directly into a new MP4 container. Because MP4 uses keyframe-based seeking, the actual cut point may be snapped to the nearest keyframe before your specified start time to avoid a blank or corrupted opening frame — this is normal behavior and means the output may be a fraction of a second longer than requested. The -movflags +faststart flag rearranges the MP4 metadata so the moov atom sits at the beginning of the file, enabling streaming and web playback without downloading the entire file first.

What Each Flag Does

Flag What it does
ffmpeg Invokes the FFmpeg binary. When running in the browser, this is executed via FFmpeg.wasm, a WebAssembly port that runs entirely client-side with no server upload. On the desktop, this calls your locally installed FFmpeg executable.
-i input.mp4 Specifies the source MP4 file to trim. The -i flag must point to a valid MPEG-4 container; FFmpeg will read its video, audio, subtitle, and chapter streams for processing.
-ss 00:00:00 Sets the trim start point in HH:MM:SS format. Placed before -i, this uses fast keyframe-based seeking in the MP4 index rather than slow frame-by-frame decoding, making it efficient even for large files. FFmpeg will seek to the nearest keyframe at or before this timestamp.
-to 00:00:10 Sets the trim end point as an absolute timestamp in the source file, here 10 seconds from the beginning. The output will contain only the content between the -ss and -to positions. Replace this value with your desired end time in HH:MM:SS or fractional seconds format.
-c copy Copies all streams — video (H.264/H.265/VP9), audio (AAC/MP3/Opus), subtitles, and attachments — directly without re-encoding. This makes trimming near-instant and guarantees zero quality loss, since the original compressed data is written unchanged into the new MP4 container.
output.mp4 The filename for the trimmed MP4 output. FFmpeg infers the output container format from the .mp4 extension and wraps the copied streams into a new MPEG-4 Part 14 file with the -movflags +faststart optimization applied for web-friendly playback.

Common Use Cases

  • Extract a specific highlight clip from a long screen recording or gameplay capture to share on social media
  • Remove unwanted footage from the beginning or end of a dashcam video before sharing with an insurance company
  • Cut a short preview or trailer segment from a full-length MP4 presentation or webinar recording
  • Isolate a single song or chapter from a long MP4 audio recording such as a live concert or podcast episode
  • Trim dead air or countdown sequences from the start of a Zoom or Teams meeting recording before distributing it
  • Extract a specific interview segment from a long documentary footage file for use in an edit without transcoding

Frequently Asked Questions

No — because the tool uses -c copy, neither the video nor the audio stream is re-encoded. The existing H.264, H.265, or AAC data is copied byte-for-byte into the new file. Quality loss only occurs when video or audio is decoded and re-encoded, which this command deliberately avoids. The output is bit-for-bit identical to the corresponding section of the source file.
MP4 video streams encoded with H.264 or H.265 can only be cleanly cut at keyframes (I-frames). When using -c copy, FFmpeg snaps the start point back to the nearest keyframe before your requested time to avoid outputting a partial GOP, which would result in corrupted or missing frames at the beginning. If frame-accurate cutting is critical, you would need to re-encode the video around the cut point, which takes longer and introduces generation loss. For most use cases — sharing clips, trimming silence, extracting segments — the keyframe snap is imperceptible.
Replace the values after -ss and -to with your desired timestamps in HH:MM:SS format, or in seconds. For example, to trim from 1 minute 30 seconds to 4 minutes 45 seconds, use -ss 00:01:30 -to 00:04:45. Alternatively, you can replace -to with -t followed by a duration, e.g. -t 00:03:15 to cut exactly 3 minutes and 15 seconds starting from the -ss point. Placing -ss before -i (as in this command) uses fast keyframe-based seeking, which is much faster than slow input seeking for large files.
With -c copy, all streams present in the source MP4 are copied to the output, including embedded subtitle tracks, chapter markers, and multiple audio tracks — as long as they are supported by the MP4 container. Subtitle tracks stored as text (mov_text) and chapter metadata are preserved. However, chapter timestamps that fall outside the trimmed range are discarded, and chapter times within the range are adjusted relative to the new start time.
Yes — the page displays the exact FFmpeg command so you can copy it and run it locally on any machine with FFmpeg installed. For files larger than 1GB, open a terminal and run the command directly: ffmpeg -i input.mp4 -ss 00:00:00 -to 00:00:10 -c copy output.mp4, replacing the timestamps and filenames as needed. Because -c copy is used, even very large files trim in seconds regardless of file size, since no re-encoding occurs.
You can batch process files in a shell loop. In bash, use: for f in *.mp4; do ffmpeg -i "$f" -ss 00:00:00 -to 00:00:10 -c copy "trimmed_$f"; done. On Windows Command Prompt, use: for %f in (*.mp4) do ffmpeg -i "%f" -ss 00:00:00 -to 00:00:10 -c copy "trimmed_%f". Both approaches apply identical start and end points to every MP4 file in the current directory and write prefixed output files, leaving originals untouched.

Technical Notes

MP4 (MPEG-4 Part 14) is a flexible container that can carry H.264 (libx264), H.265 (libx265), and VP9 (libvpx-vp9) video alongside AAC, MP3, and Opus audio. Stream-copy trimming works well for H.264 and H.265 content because these are the native video codecs for the MP4 container, but VP9 inside MP4 is less common and some players may not support it. The -ss flag placed before -i enables fast input seeking, which jumps directly to the nearest keyframe using the MP4 index rather than decoding from the beginning of the file — this makes trimming a 2-hour file to a 10-second clip almost instantaneous. The trade-off is that the cut may be off by up to a few seconds depending on keyframe interval. If the source MP4 was encoded with a high keyframe interval (common in screen recordings or variable-bitrate encodes), the snap distance can be noticeable. The -movflags +faststart flag moves the moov atom to the front of the output file, which is important if the trimmed clip will be embedded in a web page or streamed, as browsers can begin playback before the full file is downloaded. Metadata such as creation time, rotation tags, and color space information embedded in the original MP4 are preserved through the copy operation.

Related Tools