Split Video into 1 Minute Segments with FFmpeg

This guide explains how to split a video into equal-duration segments of one minute (60 seconds) using FFmpeg's segment muxer. It covers the fastest method using stream copying without quality loss, as well as an exact-duration method that handles video keyframe constraints through re-encoding.

The Fast Method: Stream Copying

If processing speed is your priority and minor variations in clip length are acceptable, use the stream copy method. This splits the video without re-encoding.

ffmpeg -i input.mp4 -c copy -map 0 -segment_time 60 -f segment -reset_timestamps 1 output_%03d.mp4

Parameter Breakdown

  • -i input.mp4: Specifies the input file.
  • -c copy: Copies the video and audio streams directly without re-encoding, making the process nearly instantaneous.
  • -map 0: Includes all streams (video, audio, subtitles) from the input file.
  • -segment_time 60: Sets the target segment length to 60 seconds.
  • -f segment: Activates the segment muxer.
  • -reset_timestamps 1: Resets timestamps at the beginning of each segment so that each new file starts at time 00:00:00.
  • output_%03d.mp4: Defines the naming pattern. %03d outputs sequential three-digit numbers (output_000.mp4, output_001.mp4, etc.).

Note on Stream Copying: FFmpeg can only split copied streams on existing keyframes (I-frames). If your video does not have a keyframe at exactly the 60-second mark, the segment will split at the nearest available keyframe, resulting in files slightly longer or shorter than 60 seconds.


The Accurate Method: Forcing Keyframes

To guarantee that every segment is exactly 60.00 seconds long, the video must be re-encoded so that keyframes are placed precisely at the 60-second split boundaries.

ffmpeg -i input.mp4 -c:v libx264 -crf 22 -c:a aac -force_key_frames "expr:gte(t,n_forced*60)" -segment_time 60 -f segment -reset_timestamps 1 output_%03d.mp4

Additional Parameters Explained

  • -c:v libx264: Encodes the video stream using the H.264 codec.
  • -crf 22: Sets visual quality (values range from 0–51; lower means better quality, 18–28 is typical).
  • -c:a aac: Encodes the audio using standard AAC.
  • -force_key_frames "expr:gte(t,n_forced*60)": Forces FFmpeg to insert a keyframe every 60 seconds, ensuring the segment muxer can cut the video at the exact designated intervals.