智能多媒体 API

  • 锐智转码

    最近更新时间:2018-12-10 11:43:15

    接口简介

    • 锐智转码接口可根据视频场景内容自适应进行转码,在不损失画质的情况下(肉眼无感知)以总体更低的码率进行转码,实现视频转码的质量更高和输出视频体积更小的兼得。对于简单场景的视频,锐智转码可以调整编码组合使得码率更低一些,用户就能够在相同码率下观看更高分辨率的视频,在带宽节省的同时观看体验更佳。对于复杂场景的视频,锐智转码在编码过程中可以更加高效地分配比特,在保持总体码率不变情况下改善编码视频的视觉质量。通过加入这种场景内容自适应技术,原有的分辨率和码率组合会更加精简,从而有效降低内容提供商的存储和分发开销。
    • 不同于基础音视频转码(avthumb),锐智转码无需用户指定输出视频的码率帧率等,而是由锐智转码依据源视频场景内容智能匹配最佳转码参数组合。

    • 注:锐智转码目前仅支持视频转码和视频音频同时转码,其他的基础音视频转码接口(avthumb)提供的功能,比如水印、转封装等,暂不支持。

    接口规格

    avsmart/<Format>/oau/<bool>             
    
    参数名称 必填 说明
    <Format> 封装格式。当前仅支持 mp4。
    /oau/<bool> 是否对音频转码, 0为不做操作,1为转码。
    /ignore-error/<bool> 忽略压缩视频体积时的错误,1为忽略,0为不忽略。如果没能压缩视频大小, 则忽略该错误并且返回原视频

    注意:

    • avsmart转码的结果会保存在原文件的空间中,但是文件名按照默认规则生成,为了方便获取转码后资源链接,建议自定义处理结果资源的名称,请参考处理结果另存 (saveas)
    • 支持的视频编码器(Codec)目前有:libx264
    • 支持的音频编码器(Codec)目前有:libfaac
    • 不支持 hls 视频。

    参数设置举例

    • 以预转持久化形式,将mp4视频做锐智转码,仅对视频转码,不对音频转码:
      {
          "scope":                "qiniu-ts-demo:thinking-in-go.mp4",
          "deadline":             1390528576,
          "persistentOps":        "avsmart/mp4/oau/0",
          "persistentNotifyUrl":  "http://fake.com/qiniu/notify"
      }
    
    • 以预转持久化]形式,将mp4视频做锐智转码,同时对视频和音频转码:
      {
          "scope":                "qiniu-ts-demo:thinking-in-go.mp4",
          "deadline":             1390528576,
          "persistentOps":        "avsmart/mp4/oau/1",
          "persistentNotifyUrl":  "http://fake.com/qiniu/notify"
      }
    
    • 以持久化数据处理(即触发持久化)形式,将mp4视频做锐智转码,同时对视频和音频转码:
      POST /pfop/ HTTP/1.1
      Host: api.qiniu.com  
      Content-Type: application/x-www-form-urlencoded  
      Authorization: QBox <AccessToken>  
    
      bucket=qiniu-ts-demo&key=sample.mp4&fops=avsmart%2Fmp4%2Foau%2F1%&notifyURL=http%3A%2F%2Ffake.com%2Fqiniu%2Fnotify
    

    注意:要在Authorization头部的<AccessToken>前添加QBox和半角空格。

    接口响应

    响应内容:
    锐智转码为异步处理,因此响应分为2步:

    1. 创建异步处理任务,如成功,返回异步处理任务 ID。示例:16864pauo1vc9nhp12;
    2. 返回异步处理结果;

    异步处理返回码:

    返回码 含义
    0 成功。
    1 等待处理
    2 正在处理
    3 处理失败
    4 处理成功但通知失败

    :
    如果,处理失败,可通过持久化处理状态查询查看具体失败原因。

    失败原因分为以下几种情况:

    1. src video too long 视频时长超出限制
    2. src info parse failed 视频源文件解析失败
    3. unsupported vcodec 视频源文件编码非 h264
    4. convert failed 转码失败
    5. parse trans result failed 转码结果解析失败
    6. can't compress this video 视频不能被缩小
    7. video had been transfered before 视频已转码

    使用限制

    当前暂不支持4K的视频进行锐智转码。
    对于其他规格的视频,为避免转码处理超时,目前对于视频时长有一些限制。不同规格的视频时长限制如下:

    规格 时长限制(s)
    480p 及以下 7200
    720p 3600
    1080p 1800
    2K 300
    4K 60

    调用示例

    触发持久化

    以Python Sdk为例,本例将空间名为bucket_name中的视频 key转码为MP4的视频文件,并且保存到目标Bucket_Name,且文件名为自定义文件key

    注意:
    其他语言 SDK 可在官方 SDK下载,可以通过查看 SDK 使用指南中触发持久化使用。

    from qiniu import Auth, PersistentFop, build_op, op_save, urlsafe_base64_encode
    
    # 对已经上传到七牛的视频发起异步转码操作
    # access_key,secret_key在个人面板的密钥管理处获得,非个人账号密码
    access_key = '...'
    secret_key = '...'
    q = Auth(access_key, secret_key)
    
    # 要转码的文件所在的空间和文件名。
    bucket_name = '...'
    key = '...'
    
    # 是使用的队列名称,不设置代表不使用私有队列,使用公有队列。
    pipeline = 'your_pipeline'
    
    # 要进行转码的转码操作。
    fops = 'avsmart/mp4/oau/0'
    
    # 可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当前空间
    saveas_key = urlsafe_base64_encode('目标Bucket_Name:自定义文件key')
    fops = fops+'|saveas/'+saveas_key
    
    pfop = PersistentFop(q, bucket_name, pipeline)
    ops = []
    ops.append(fops)
    ret, info = pfop.execute(key, ops, 1)
    print(info)
    assert ret['persistentId'] is not None
    
    

    预转持久化

    以Python Sdk为例,本例中将上传的视频转码为MP4的视频文件,保存到目标Bucket_Name,且文件名为自定义文件key,原上传视频保存到bucket_name空间,且文件名为key

    注意
    其他语言 Sdk 可在官方 Sdks 下载,可以通过查看 Sdk 使用指南中预转持久化使用。

    from qiniu import Auth, put_file, etag, urlsafe_base64_encode
    import qiniu.config
    
    # access_key,secret_key在个人面板的密钥管理处获得,非个人账号密码
    access_key = '...'
    secret_key = '...'
    
    # 初始化Auth状态
    q = Auth(access_key, secret_key)
    
    # 你要测试的空间, 并且这个key在你空间中存在
    bucket_name = '...'
    key = '...'
    
    # 是使用的队列名称,不设置代表不使用私有队列,使用公有队列。
    pipeline = 'your_pipeline'
    
    # 设置转码参数
    fops = 'avsmart/mp4/oau/1'
    
    # 通过添加'|saveas'参数,指定处理后的文件保存的bucket和key,不指定默认保存在当前空间,bucket_saved为目标bucket,bucket_saved为目标key
    saveas_key = urlsafe_base64_encode('bucket_saved:bucket_saved')
    
    fops = fops+'|saveas/'+saveas_key
    
    # 在上传策略中指定fobs和pipeline
    policy={
      'persistentOps':fops,
      'persistentPipeline':pipeline
     }
    
    token = q.upload_token(bucket_name, key, 3600, policy)
    
    # 视频所在的本地路径
    localfile = './python_video.flv'
    
    ret, info = put_file(token, key, localfile)
    print(info)
    assert ret['key'] == key
    assert ret['hash'] == etag(localfile)
    

    计费说明

    免费额度
    新用户(从未使用过锐智转码服务)可享以下免费额度:

    输出规格 免费时长(min)
    720p 及以下 1200
    1280p 300

    服务价格

    编码格式 输出规格 单价(元/分钟)
    H264 4K(3840*2160) 暂不支持
    H264 2K(2560*1440) 0.28
    H264 HD(1920*1080) 0.12
    H264 SD(1280*720)及以下 0.048
    以上内容是否对您有帮助?
  • Icon free helper
    Close