前言:在阿里云oss视频上传后,我们如何获取视频封面呢?而不是通过上传方式获取封面.其实OSS本身提供了视频截帧功能
OSS提供的视频截帧功能和OSS图片服务功能使用的方式是类似的,都是通过传入x-oss-process参数的方式来实现的。最简单的使用方式就是直接在public的object的url后面拼接处理字符串。比如如下的url:
http://a-image-demo.oss-cn-qingdao.aliyuncs.com/demo.mp4?x-oss-process=video/snapshot,t_10000,m_fast
注意
- 当前仅支持对视频编码格式为H264的视频文件进行视频截帧。
- OSS当前没有默认保存视频截帧的操作,视频截帧的图片需手动下载到本地。
- 如果需要对private的object调用视频截图,需要使用SDK进行鉴权,接口和OSS图片服务的调用接口一致。
- 图片处理除了能够处理已经存在的图片内容,还能够截取出视频中的指定位置产生图片,完成视频截帧。
参数
操作分类:video
操作名称:snapshot
参数 | 描述 | 取值范围 |
---|---|---|
t | 截图时间 | 单位ms,[0,视频时长] |
w | 截图宽度,如果指定为0则自动计算 | 像素值:[0,视频宽度] |
h | 截图高度,如果指定为0则自动计算,如果w和h都为0则输出为原视频宽高 | 像素值:[0,视频高度] |
m | 截图模式,不指定则为默认模式,根据时间精确截图,如果指定为fast则截取该时间点之前的最近的一个关键帧 | 枚举值:fast |
f | 输出图片格式 | 枚举值:jpg、png |
示例
- 找到视频7s处的内容,输出为jpg。
- 找到视频50s处的内容,输出为jpg,精确为对应的时间。
控制图片输出大小
视频截帧功能支持选择输出图片的大小,使用w参数指定宽度,h指定长度。
- 不指定w和h参数,或者w和h都指定为0,输出的图片大小为视频的真实长宽。
- 单独指定w或者h参数,输出的图片大小指定的数值,另外一个没有指定的数值通过视频原始比例自动计算出来。
- 同时指定w和h参数,输出图片大小为指定的数值,如果长宽比例和原始视频比不相等则强制拉伸。
比如下面这个url就是将输出的图片大小指定为800宽度。
关键帧
关键帧,也称I帧,是视频编码中的一个关键概念,指的是不依赖于前后参考帧就能独立解码的一种视频帧,在h264格式中常见的关键帧间隔为3-10秒。解码关键帧只需要读取关键帧对应的数据,而解码非关键帧需要顺序读取上一个关键帧到当前帧所有的数据才能完成。因此在OSS视频截帧功能中提供了控制功能,可以选择是否只读取关键帧信息,即m参数。
当m指定为fast的时候,OSS读取到指定时间点之前最接近的一个关键帧就解码返回;如果没有指定该参数则会持续解码到精确的时间点对应的视频帧再返回。对于没有特殊需求的用户来说,OSS强烈建议指定m_fast参数,这样可以大大提升截帧的请求响应速度。
输出格式
OSS输出的视频格式支持jpg和png两种格式,可以通过f参数来切换,默认输出的是jpg格式,对于没有特殊需求的用户无需指定该参数。下面这个url就是将输出格式切换为png: