FFmpeg -ss 参数详解(输入/输出选项区别)
官方说明翻译
-ss 位置(输入/输出选项)
作为输入选项时(在 -i 之前使用)
- 行为:在输入文件中跳转到指定位置
- 注意:
- 大多数格式无法精确跳转,FFmpeg 会跳转到最近的可定位点(早于目标位置)
- 转码时若启用
-accurate_seek(默认开启),跳转点与目标位置之间的多余片段会被解码后丢弃 - 使用流复制(stream copy)或
-noaccurate_seek时,这些片段会被保留
作为输出选项时(在输出URL前使用)
- 行为:解码输入内容但丢弃时间戳未到达指定位置前的所有数据
通用要求
- 位置格式:必须符合时间持续时间规范(参见
ffmpeg-utils(1)手册中的"时间持续时间"章节)
关键区别图示
| 选项位置 | 阶段 | 处理方式 | 典型用途 |
|---|---|---|---|
-ss 在 -i 前 | 输入阶段 | 非精确跳转+解码丢弃 | 快速定位(牺牲精度) |
-ss 在输出前 | 输出阶段 | 精确解码丢弃 | 帧精确切割(速度较慢) |
技术细节说明
输入阶段跳转(性能优先)
1ffmpeg -ss 00:01:30 -i input.mp4 ... # 优先使用关键帧跳转- 类似视频播放器的拖拽进度条行为
- 可能产生 ±0.5秒的误差
输出阶段跳转(精度优先)
1ffmpeg -i input.mp4 -ss 00:01:30 ... # 逐帧解码直到目标时间- 确保第一帧就是精确时间点
- 需要完整解码前置内容,速度较慢
最佳实践建议
剪辑场景:组合使用实现快速+精确
1ffmpeg -ss 00:01:00 -i input.mp4 -ss 00:00:30 output.mp4- 第一个
-ss粗定位到1分钟附近 - 第二个
-ss精确跳过前30秒
- 第一个
转码场景:根据需求选择:
1 2 3 4 5# 快速但不精确(适合预览) ffmpeg -ss 00:05:00 -i input.mp4 -c copy segment.mp4 # 精确但较慢(适合成品) ffmpeg -i input.mp4 -ss 00:05:00 -c:v libx264 output.mp4
张芷铭的个人博客
💬 评论