FFmpeg视频截取时-ss参数应置于-i之前还是之后?
FFmpeg视频截取时-ss参数应置于-i之前还是之后?
刚好之前研究过这个问题,我来给你捋得明明白白~
比如你想截取视频里的第二分钟内容,会用到类似这样的FFmpeg命令:
ffmpeg -copyts -ss <start> -i input.mp4 -to <end> -c:v libx264 -crf 23 -c:a aac -b:a 192k output.mp4
纠结-ss该放-i之前还是之后?其实得看你用的FFmpeg版本:
FFmpeg 2.1之前的旧版本:
- 把
-ss放在-i之前:属于「输入侧跳转」,FFmpeg会直接跳到离你指定时间最近的关键帧开始处理,速度特别快,但精度会打折扣——毕竟关键帧不是每一秒都有,截出来的开头可能和你想要的精确时间差个几秒,适合对精度要求不高但追求速度的场景 - 把
-ss放在-i之后:属于「输出侧跳转」,FFmpeg会先完整解码前面的所有内容,再跳到你指定的起始点,精度拉满,但速度慢得离谱,大视频的话会等很久
- 把
FFmpeg 2.1及之后的新版本:
这里就有惊喜了!把-ss放在-i之前,不仅保留了旧版本快速定位的优势,还能做到高精度截取——新版本会在跳到关键帧后,往回解码一小段内容,精准对齐你指定的起始时间点,相当于鱼和熊掌兼得,速度和精度都能满足
不过确实,官方的文档里可能没明确标注这个版本差异,刚看的时候容易懵,但实际测试下来,新版本的这个优化已经很成熟了,放心用就行~
备注:内容来源于stack exchange,提问作者jsx97
相关产品推荐
相关产品推荐

