ffmpeg截图

发布于:2025-12-04 10:1270人浏览
本文详细解析FFmpeg截图命令的用法,并通过对比实验展示截图时将开始时间参数-ss置于输入文件参数-i之前相较于之后的性能差异,提供优化截图过程的技巧。 以下样例基于ffmpeg-0.10.4和ffmpeg-1.2.4均能测试通过

本文详细解析FFmpeg截图命令的用法,并通过对比实验展示截图时将开始时间参数-ss置于输入文件参数-i之前相较于之后的性能差异,提供优化截图过程的技巧。

以下样例基于ffmpeg-0.10.4和ffmpeg-1.2.4均能测试通过


截图命令

./ffmpeg -ss 00:05:00 -i h264_aac_20M.mp4 -t 2 -vframes 10 -s 128x76 -r 1/2 -filter:v "crop=320:240:10:10:keep_aspect=1" -f image2 test-%02d.jpg

智能体编程

plain

命令详解:


-ss: 开始截图时间,有两种格式,一种是秒数,一种是hh:mm:ss[.xxx]


-i: 截图的源文件

    

-t: 截图时长,格式与-ss相同


-vframes: 截图帧数


-s: 图片宽高,格式WxH


-r: 指定帧率,即每秒钟输出的帧数:如果指定为25帧,则每秒截取25帧图;如果指定为1/2,则每秒截取半帧图,可达到两秒钟一张图的目的。

        如果需要在指定时间段内均匀截取固定帧数的(指定了-vframes)图片,则使用该公式计算-r应该指定的值:固定帧数/时间段内的秒数


-filter:v: 设置视频的过滤条件:

crop: 裁剪,crop=output_width:output_height:x:y:keepaspect=1,五个参数分别为:

output_width: 裁减之后输出视频的宽

output_height: 裁减之后输出视频的高

x: 在输入视频上开始裁减的横坐标

y: 在输入视频上开始裁减的纵坐标

keep_aspect: 1表示保持裁剪后输出的纵横比与输入一致,0表示不保持


-f: 指定输出格式


test-%02d.jpg: 支持格式化命名,输出的命名为: test-01.jpg, test-02.jpg, ...


除了输入与输出必须以外,以上其他参数均可相互组合使用


下面是设定了截图的起止时间(-ss和-t)之后并组合使用-vframes或者-r时的区别:

1. 组合使用-vframes来指定截取的帧数时,程序会按时间顺序截取够-vframes这么多的图片为止


2. 组合使用-r来指定每秒的输出帧数,程序则会在这段时间内按照均匀的时间分布来截取图片


Tips:

1. 当-ss设置得越大,程序需要找到位置(或者解码到指定的位置)的时间就越长


2. 以下是从ffmpeg官方文档中摘抄下来的: 

'-ss position (input/output)'

    When used as an input option (before -i), seeks in this input file to position...

    When used as an output option (before an output filename), decodes but discards input until the timestamps reach position...

当-ss用作输入参数(存在于-i参数之前)时,程序会先找到输入文件的指定的这个位置,然后再进行后面的处理...

当-ss用作输出参数(存在于一个输出文件名参数之前)时,程序会先对输入文件进行解码并丢弃这些帧,直到找到指定的这个位置为止...


所以在截图时,如果*将-ss置于-i参数之前*,效率会远远高于作为输出参数时的效率:


视频时长为05:32.12,同样从00:01:30开始截图,第一条命令-ss在-i前,第二条反之


由上图明显可看出,截取同样的时间点的图片,将-ss置于-i参数之前,效率比置于-i后的效率高了不止一个数量级

————————————————

版权声明:本文为CSDN博主「罗大喵」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/fawn2315/article/details/42361359


相关文章
    最新文章
    热门标签