Skip to content

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 参数可以重置时间戳来解决此问题,但可能会对部分视频的编辑和处理产生影响,请根据自己的需求谨慎使用。

最近更新

基于 VitePress + Teek 主题构建