视频截帧

本文介绍了如何利用智能媒体管理(IMM)中的媒体转码接口来实现将视频截帧保存为静态图片的功能。

功能简介

视频截帧是指从视频中提取特定帧图像的过程,其目的是将视频中某一特定时刻的画面保存为静态图片。

image

使用场景

  • 快照:将视频中的特定时刻保存为静态图像,以此制作海报。

  • 分析:提取关键帧以便进行后续分析,例如人脸识别、物体检测等。

  • 封面制作:为视频创建缩略图或封面图。

  • 播放总结:从视频中筛选多个关键时刻,以生成简洁的总结或预览。

  • 截图分享与记录:用户在观看视频时,如果遇到喜欢的画面希望进行保存或分享,可以通过截取该时刻的视频帧来实现。

支持音视频格式列表

分类

格式

音频

AAC、MP3、WAV、FLAC、WMA、AC3、OPUS等所有主流格式。

视频

MP4、MPEG-TS、MKV、MOV、AVI、FLV、M3U8、WebM、WMV、RM、VOB等所有主流格式。

如何使用

前提条件

步骤一:上传文件

请使用OSS管理控制台将媒体文件上传至IMM项目所在地域的Bucket。

image

步骤二:使用IMM视频截帧

调用CreateMediaConvertTask - 创建媒体转码任务接口创建视频截帧任务。

参数说明

以下示例使用IMM项目的test-project,针对视频文件oss://test-bucket/video-demo/酿酒.mov进行视频截帧处理。更多有关媒体处理各功能介绍和使用,请参见媒体转码

说明
  • 您可以通过OpenAPI 门户使用媒体转码接口对视频文件进行处理,具体可参考SDK代码。

  • 视频截帧请勿设置Target.URITarget.Container参数。

  • TargetsURI文件名建议使用变量设置为snapshot-{index}.{autoext}格式,截帧保存后将生成snapshot-1.pngsnapshot-2.png这种文件名,相关变量请参见TargetURI模板

截取一帧用于视频封面

截取一帧以作为视频封面,确保该图片的分辨率与视频保持一致。

image

  • 截帧图片格式: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

image

  • 截帧图片格式: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格式图片。

image

  • 截帧图片格式: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 类型请求

    根据成功的请求次数计算请求费用。

    低频访问数据取回容量

    如果取回的数据是低频访问数据,会产生低频访问数据取回容量的费用,按数据取回量计费。

    归档直读数据取回容量

    如果读取的是归档的ObjectBucket开启了归档直读,会产生归档直读数据取回容量费用,根据取回的数据容量大小计费。

    传输加速

    如果开启了传输加速功能且使用传输加速域名访问您的Bucket会产生传输加速费用,根据数据容量大小计费。

    PutObject

    PUT类型请求

    根据成功的请求次数计算请求费用。

    存储费用

    根据Object的存储类型、大小和时长收取存储费用。

    HeadObject

    GET 类型请求

    根据成功的请求次数计算请求费用。

  • IMM 侧: 详细定价请参见IMM计费项

    重要

    自北京时间 2025 年 7 月 28 日 11:00 起,IMM 视频截帧服务价格将会进行调整。更多信息,请参见IMM计费调整公告

    API

    计费项

    说明

    CreateMediaConvertTask

    VideoFraming

    根据成功的截帧数量计算视频截帧的费用。

缩放方式

缩放方式

缩放效果

stretch

拉伸以填满。在按照固定宽高进行强制缩放时,若宽高与原图的宽高比例不一致,将导致图片出现变形现象。

image

crop

缩放与裁剪。进行等比缩放时,缩略图为扩展至指定宽度和高度的矩形框外的最小图像,随后按照固定的宽度和高度进行裁剪。

image

fill

缩放并保留黑边。进行等比缩放,缩略图应限制在指定宽度和高度的矩形内,以最大程度地展示图片,随后再按照固定宽高进行黑色填充。

image

fit

缩放过程不会保留黑边。在等比缩放中,缩略图会限制在指定宽度和高度的矩形内显示最大图片。如果缩放后的宽高与原图的宽高比例不同,将会导致图片的宽高与指定的宽高不一致。

image