FFmpeg 处理视频
按时间分割视频
将视频按指定时长分割为多个片段:
bash
ffmpeg -i "input.MP4" -c copy -map 0 -reset_timestamps 1 -segment_time 60 -f segment output_%03d.MP4参数说明:
| 参数 | 说明 |
|---|---|
-c copy | 直接复制流,不重新编码(速度快) |
-map 0 | 映射所有流 |
-reset_timestamps 1 | 重置时间戳 |
-segment_time 60 | 每段时长 60 秒 |
-f segment | 使用分段输出格式 |
关于视频分割后前导空白的问题
像视频这样的进行压缩的,该技术仅将视频中发生更改的部分保存为帧,而不是每个帧的所有像素数据。
当您将视频分段时,通常遵循关键帧(I 帧)的规则,这些规则确保每个切割的片段都以 I 帧开头,因为 I 帧是关键帧,可以独立显示,因此 I 帧之间的 B 帧和 P 帧可以更轻松地进行解码。
当用于压缩视频的算法以帧差异的形式工作时,前媒体通常是通过差异编码技术导空白通常被包含在前一个 I 帧切割视频段的末尾和下一个 I 帧切割视频段的开头(因为它是从先前的帧中派生出来的)。因此,当您在第二段视频中开始播放时,您可能会看到空闲时间,这是因为之前的部分被包含在第一个视频片段中。
注意
使用 -reset_timestamps 1 参数可以重置时间戳来解决此问题,但可能会对部分视频的编辑和处理产生影响,请根据自己的需求谨慎使用。