使用 ffmpeg 分割视频

本文介绍如何通过命令行调用 ffmpeg 工具来分割视频。 如果要使用图形界面,可以使用 FileThings 等工具。

ffmpeg 是一个强大的多媒体处理工具,可以处理视频、音频和其他多种媒体文件。

按指定时间段切割视频

命令示例: ffmpeg -i input.mp4 -ss start_time -to end_time -c copy output.mp4

选项说明:

  • start_time 是要开始切分的时间戳,以秒为单位, 或者是 00:00:00.00 (时:分:秒.毫秒) 格式。
  • end_time 是要结束切分的时间戳,单位同上。
  • -c copy 选项表示直接复制原视频的音频、视频流,不重新编码。

如果以 00:00:00.00 格式指定时间,可以省略小时和分钟,例如 00:10 表示第10秒。

或使用命令 ffmpeg -i in.mp4 -c copy -ss 开始时间 -t 时长 out.mp4

即使用 -t 选项指定从起始时间点之后的时长,而不是结束时间。

按指定时长均分视频

命令示例 ffmpeg -i input.mp4 -c copy -map 0 -segment_time 3 -f segment -reset_timestamps 1 output%03d.mp4

选项说明

  • -c copy 表示直接复制原视频的音频、视频流,不重新编码。
  • -map 0 表示映射所有流, 包括音频、视频、字幕等。
  • -segment_time 3 表示每个片段的时长为 3 秒。
  • -f segment 表示为分割模式, 每个片段保存为一个单独的文件。
  • -reset_timestamps 1 表示重置每个片段的时间戳, 使每个片断文件的时间是从 0 开始。
  • output%03d.mp4 表示输出文件名的格式,%03d 是一个占位符, 会被替换为递增的数字序号(如 output001.mp4)

注意: 此模式无法精确按照指定时长(例如3秒)分割视频,因为 ffmpeg 在切分视频时只能在关键帧处进行切割。如果在指定的时间点上没有关键帧,那么切分点会向前或向后移动到最近的关键帧位置,从而导致分割后的片段时长不一致。

可能的解决办法是通过重新编码视频并在指定的时间点强制插入关键帧来实现精确切割。例如,使用 -g 参数来设置关键帧间隔,使关键帧出现在预期的切分点。