张芷铭的个人博客

FFmpeg `-ss` 参数详解(输入/输出选项区别)

FFmpeg -ss 参数详解(输入/输出选项区别)

官方说明翻译

-ss 位置(输入/输出选项)

作为输入选项时(在 -i 之前使用)

  • 行为:在输入文件中跳转到指定位置
  • 注意
    • 大多数格式无法精确跳转,FFmpeg 会跳转到最近的可定位点(早于目标位置)
    • 转码时若启用 -accurate_seek(默认开启),跳转点与目标位置之间的多余片段会被解码后丢弃
    • 使用流复制(stream copy)或 -noaccurate_seek 时,这些片段会被保留

作为输出选项时(在输出URL前使用)

  • 行为:解码输入内容但丢弃时间戳未到达指定位置前的所有数据

通用要求

  • 位置格式:必须符合时间持续时间规范(参见 ffmpeg-utils(1) 手册中的"时间持续时间"章节)

关键区别图示

选项位置阶段处理方式典型用途
-ss-i输入阶段非精确跳转+解码丢弃快速定位(牺牲精度)
-ss 在输出前输出阶段精确解码丢弃帧精确切割(速度较慢)

技术细节说明

  1. 输入阶段跳转(性能优先)

    1
    
    ffmpeg -ss 00:01:30 -i input.mp4 ...  # 优先使用关键帧跳转
    
    • 类似视频播放器的拖拽进度条行为
    • 可能产生 ±0.5秒的误差
  2. 输出阶段跳转(精度优先)

    1
    
    ffmpeg -i input.mp4 -ss 00:01:30 ...  # 逐帧解码直到目标时间
    
    • 确保第一帧就是精确时间点
    • 需要完整解码前置内容,速度较慢

最佳实践建议

  1. 剪辑场景:组合使用实现快速+精确

    1
    
    ffmpeg -ss 00:01:00 -i input.mp4 -ss 00:00:30 output.mp4
    
    • 第一个 -ss 粗定位到1分钟附近
    • 第二个 -ss 精确跳过前30秒
  2. 转码场景:根据需求选择:

    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
    

💬 评论