Function split_into_segments

Source
pub(crate) fn split_into_segments(
    path: impl AsRef<Path>,
    segment_output_pattern: &str,
    segmented_files_path: impl AsRef<Path>,
) -> Result<Vec<impl AsRef<Path>>>
Expand description

Uses ffmpeg to split the source video file into several segments.

This function performs stream copying (not re-encoding) to split a large video into smaller time-based segments. It’s designed for parallel processing scenarios where multiple cores can work on different segments simultaneously. The segmentation preserves video quality while enabling parallel frame extraction.

§Arguments

  • path - Path to the source video file to be segmented
  • segment_output_pattern - ffmpeg formatting pattern for output filenames (e.g., “output_%09d.mp4” creates output_000000001.mp4, output_000000002.mp4, etc.)
  • segmented_files_pattern - glob pattern to find the created segment files

§Returns

  • Ok(Vec<PathBuf>) - Paths to all generated segment files
  • Err - If ffmpeg fails or file discovery encounters errors

§Examples

let segments = split_into_segments(
    Path::new("input.mp4"),
    "segments/output_%09d.mp4",
    "segments/*.mp4",
)?;
assert!(!segments.is_empty());

§ffmpeg Parameters Explained

  • -v quiet - Suppress most ffmpeg output
  • -c copy - Stream copy (no re-encoding, very fast)
  • -map 0 - Copy all streams from input
  • -segment_time - Target duration of each segment
  • -f segment - Use segment muxer for splitting
  • -reset_timestamps 1 - Reset timestamps for each segment