本文介绍了如何利用智能媒体管理(IMM)中的媒体转码接口来实现将视频截帧保存为静态图片的功能。
功能简介
视频截帧是指从视频中提取特定帧图像的过程,其目的是将视频中某一特定时刻的画面保存为静态图片。
使用场景
快照:将视频中的特定时刻保存为静态图像,以此制作海报。
分析:提取关键帧以便进行后续分析,例如人脸识别、物体检测等。
封面制作:为视频创建缩略图或封面图。
播放总结:从视频中筛选多个关键时刻,以生成简洁的总结或预览。
截图分享与记录:用户在观看视频时,如果遇到喜欢的画面希望进行保存或分享,可以通过截取该时刻的视频帧来实现。
支持音视频格式列表
分类 | 格式 |
音频 | AAC、MP3、WAV、FLAC、WMA、AC3、OPUS等所有主流格式。 |
视频 | MP4、MPEG-TS、MKV、MOV、AVI、FLV、M3U8、WebM、WMV、RM、VOB等所有主流格式。 |
如何使用
前提条件
已创建并获取AccessKey。具体操作,请参见创建AccessKey。
已开通OSS服务、创建存储空间。具体操作,请参见创建存储空间。
已开通智能媒体管理服务。具体操作,请参见开通产品。
已通过智能媒体管理控制台创建项目。具体操作,请参见创建项目。
说明您也可以调用API接口创建项目。具体操作,请参见CreateProject - 创建项目。
您可以调用ListProjects - 列出所有项目信息的列表接口列出指定地域下已创建的所有项目信息。
步骤一:上传文件
请使用OSS管理控制台将媒体文件上传至IMM项目所在地域的Bucket。
步骤二:使用IMM视频截帧
调用CreateMediaConvertTask - 创建媒体转码任务接口创建视频截帧任务。
参数说明
以下示例使用IMM项目的test-project,针对视频文件oss://test-bucket/video-demo/酿酒.mov
进行视频截帧处理。更多有关媒体处理各功能介绍和使用,请参见媒体转码。
您可以通过OpenAPI 门户使用媒体转码接口对视频文件进行处理,具体可参考SDK代码。
视频截帧请勿设置
Target.URI
和Target.Container
参数。Targets中URI文件名建议使用变量设置为
snapshot-{index}.{autoext}
格式,截帧保存后将生成snapshot-1.png
、snapshot-2.png
这种文件名,相关变量请参见TargetURI模板。
截取一帧用于视频封面
截取一帧以作为视频封面,确保该图片的分辨率与视频保持一致。
截帧图片格式:jpg
截帧起始时间:5秒
截帧数量:1
截帧图片保存路径:oss://test-bucket/video-demo/cover.jpg
截帧完成消息通知:发送MNS消息到MNS主题“test-mns-topic”
SDK示例请参见OpenAPI门户,已为您自动填充示例参数,请根据实际需求进行修改后再进行调试。
请求参数代码示例如下:
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/酿酒.mov"
}
],
"Targets": [
{
"Image": {
"Snapshots": [
{
"Format": "jpg",
"StartTime": 5,
"Number": 1,
"URI": "oss://test-bucket/video-demo/cover.jpg"
}
]
}
}
]
}
每10秒截1帧图片用于AI模型训练或推理
每10秒截取一帧图像,用于AI模型的训练或推理,输出图像的分辨率限制为512x512
。
截帧图片格式:jpg
截帧间隔:10秒
缩放方式:缩放并裁剪,缩放方式说明请参见缩放方式。
输出图片宽度:512px
输出图片高度:512px
截帧图片保存路径:oss://test-bucket/video-demo/snapshot-%d.png
截帧完成消息通知:发送MNS消息到MNS主题“test-mns-topic”
SDK示例请参见OpenAPI门户,已为您自动填充示例参数,请根据实际需求进行修改后再进行调试。
请求参数代码示例如下:
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/酿酒.mov"
}
],
"Targets": [
{
"Image": {
"Snapshots": [
{
"Format": "jpg",
"Interval": 10,
"ScaleType": "crop",
"URI": "oss://test-bucket/video-demo/snapshot-{index}.{autoext}",
"Width": 512,
"Height": 512
}
]
}
}
]
}
每隔4秒截1帧,共截5帧用于分析视频片段
从第11秒开始,每隔4秒截取1帧,共截取5帧用于分析视频片段。输出的图片宽高为视频分辨率的1/2,并保存为PNG格式图片。
截帧图片格式:png
截帧起始时间:第11秒
截帧间隔:4秒
截帧数量:5
缩放方式:缩放并裁剪,缩放方式说明请参见缩放方式
输出图片宽度:原视频分辨率宽度的1/2
输出图片高度:原视频分辨率高度的1/2
截帧图片保存路径:oss://test-bucket/video-demo/snapshot-%d.png
截帧完成消息通知:发送MNS消息到MNS主题“test-mns-topic”
SDK示例请参见OpenAPI门户,已为您自动填充示例参数,请根据实际需求进行修改后再进行调试。
请求参数代码示例如下:
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/酿酒.mov"
}
],
"Targets": [
{
"Image": {
"Snapshots": [
{
"Format": "png",
"StartTime": 11,
"Interval": 4,
"Number": 5,
"ScaleType": "crop",
"URI": "oss://test-bucket/video-demo/snapshot-{index}.{autoext}",
"Width": 0.5,
"Height": 0.5
}
]
}
}
]
}
截取视频中的事件关键帧
通过dhash分析视频帧的内容相似性,并配合阈值提取图像内容变化较大的帧作为事件关键帧。
阈值(Threshold)需根据具体业务场景进行调整。
输出图片格式:jpg
截帧间隔:1秒
截帧模式:dhash
阈值:15
截帧图片保存路径:oss://test-bucket/video-demo/snapshot-%d.png
截帧完成消息通知:发送MNS消息到MNS主题“test-mns-topic”
SDK示例请参见OpenAPI门户,已为您自动填充示例参数,请根据实际需求进行修改后再进行调试。
请求参数代码示例如下:
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/酿酒.mov"
}
],
"Targets": [
{
"Image": {
"Snapshots": [
{
"Format": "jpg",
"Interval": 1,
"Mode": "dhash",
"Threshold": 15,
"URI": "oss://test-bucket/video-demo/snapshot-{index}.{autoext}"
}
]
}
}
]
}
截取视频中最具代表性的5个事件关键帧,用于推理
通过dhash分析视频帧的内容相似性,并截取图像内容变化最大的5帧。
输出图片格式:jpg
截帧间隔:1秒
截帧模式:dhash
截帧数量:5
截帧图片保存路径:oss://test-bucket/video-demo/snapshot-%d.png
截帧完成消息通知:发送MNS消息到MNS主题“test-mns-topic”
SDK示例请参见OpenAPI门户,已为您自动填充示例参数,请根据实际需求进行修改后再进行调试。
请求参数代码示例如下:
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/酿酒.mov"
}
],
"Targets": [
{
"Image": {
"Snapshots": [
{
"Format": "jpg",
"Interval": 1,
"Mode": "dhash",
"Number": 5,
"URI": "oss://test-bucket/video-demo/snapshot-{index}.{autoext}"
}
]
}
}
]
}
截取视频中的所有IDR帧
输出图片格式:jpg
截帧模式:keyframe
截帧图片保存路径:oss://test-bucket/video-demo/snapshot-%d.png
截帧完成消息通知:发送MNS消息到MNS主题“test-mns-topic”
SDK示例请参见OpenAPI门户,已为您自动填充示例参数,请根据实际需求进行修改后再进行调试。
请求参数代码示例如下:
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/酿酒.mov"
}
],
"Targets": [
{
"Image": {
"Snapshots": [
{
"Format": "jpg",
"Mode": "keyframe",
"URI": "oss://test-bucket/video-demo/snapshot-{index}.{autoext}"
}
]
}
}
]
}
以均匀时间间隔截取10帧
输出图片格式:jpg
截帧模式:average
截帧数量:10
截帧图片保存路径:oss://test-bucket/video-demo/snapshot-%d.png
截帧完成消息通知:发送MNS消息到MNS主题“test-mns-topic”
SDK示例请参见OpenAPI门户,已为您自动填充示例参数,请根据实际需求进行修改后再进行调试。
请求参数代码示例如下:
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/酿酒.mov"
}
],
"Targets": [
{
"Image": {
"Snapshots": [
{
"Format": "jpg",
"Mode": "average",
"Number": 10,
"URI": "oss://test-bucket/video-demo/snapshot-{index}.{autoext}"
}
]
}
}
]
}
截取音频封面
输出图片格式:jpg
截帧数量:1
输出图片保存路径:oss://test-bucket/video-demo/cover.jpg
截帧完成消息通知:发送MNS消息到MNS主题“test-mns-topic”
SDK示例请参见OpenAPI门户,已为您自动填充示例参数,请根据实际需求进行修改后再进行调试。
请求参数代码示例如下:
{
"ProjectName": "test-project",
"Notification": {
"MNS": {
"TopicName": "test-mns-topic"
}
},
"Sources": [
{
"URI": "oss://test-bucket/video-demo/test.mp3"
}
],
"Targets": [
{
"Image": {
"Snapshots": [
{
"Format": "jpg",
"Number": 1,
"URI": "oss://test-bucket/video-demo/cover.jpg"
}
]
}
}
]
}
计费说明
在视频截帧过程中, OSS 和 IMM 两侧会产生以下计费项:
OSS 侧: 详细定价请参见OSS产品定价。
API
计费项
说明
GetObject
GET 类型请求
根据成功的请求次数计算请求费用。
低频访问数据取回容量
如果取回的数据是低频访问数据,会产生低频访问数据取回容量的费用,按数据取回量计费。
归档直读数据取回容量
如果读取的是归档的Object且Bucket开启了归档直读,会产生归档直读数据取回容量费用,根据取回的数据容量大小计费。
传输加速
如果开启了传输加速功能且使用传输加速域名访问您的Bucket会产生传输加速费用,根据数据容量大小计费。
PutObject
PUT类型请求
根据成功的请求次数计算请求费用。
存储费用
根据Object的存储类型、大小和时长收取存储费用。
HeadObject
GET 类型请求
根据成功的请求次数计算请求费用。
IMM 侧: 详细定价请参见IMM计费项。
重要自北京时间 2025 年 7 月 28 日 11:00 起,IMM 视频截帧服务价格将会进行调整。更多信息,请参见IMM计费调整公告。
API
计费项
说明
CreateMediaConvertTask
VideoFraming
根据成功的截帧数量计算视频截帧的费用。
缩放方式
缩放方式 | 缩放效果 |
stretch 拉伸以填满。在按照固定宽高进行强制缩放时,若宽高与原图的宽高比例不一致,将导致图片出现变形现象。 | |
crop 缩放与裁剪。进行等比缩放时,缩略图为扩展至指定宽度和高度的矩形框外的最小图像,随后按照固定的宽度和高度进行裁剪。 | |
fill 缩放并保留黑边。进行等比缩放,缩略图应限制在指定宽度和高度的矩形内,以最大程度地展示图片,随后再按照固定宽高进行黑色填充。 | |
fit 缩放过程不会保留黑边。在等比缩放中,缩略图会限制在指定宽度和高度的矩形内显示最大图片。如果缩放后的宽高与原图的宽高比例不同,将会导致图片的宽高与指定的宽高不一致。 |