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.mp4Parameter 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 time00:00:00.output_%03d.mp4: Defines the naming pattern.%03doutputs 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.mp4Additional 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 thesegmentmuxer can cut the video at the exact designated intervals.