锐智转码(旧版本)
接口简介
- 锐智转码接口可根据视频场景内容自适应进行转码,在不损失画质的情况下(肉眼无感知)以总体更低的码率进行转码,实现视频转码的质量更高和输出视频体积更小的兼得。对于简单场景的视频,锐智转码可以调整编码组合使得码率更低一些,用户就能够在相同码率下观看更高分辨率的视频,在带宽节省的同时观看体验更佳。对于复杂场景的视频,锐智转码在编码过程中可以更加高效地分配比特,在保持总体码率不变情况下改善编码视频的视觉质量。通过加入这种场景内容自适应技术,原有的分辨率和码率组合会更加精简,从而有效降低内容提供商的存储和分发开销。
不同于基础音视频转码(avthumb),锐智转码无需用户指定输出视频的码率帧率等,而是由锐智转码依据源视频场景内容智能匹配最佳转码参数组合。
注:锐智转码支持视频转码和视频音频同时转码,并且在转码同时可以修改分辨率和增加水印。
接口规格
avsmart/<Format>
/oau/<bool>
/ignore-error/<bool>
/s/<resolution>
/wmImage/<encodedImageURL>
/wmGravity/<wmGravity>
/wmImgResolution/<wmImgResolution>
/wmText/<encodedText>
/wmGravityText/<wmGravityText>
/wmFont/<encodedFont>
/wmFontSize/<wmFontSize>
/wmFontColor/<encodedColor>
/vb/<max_video_bitrate>
参数名称 | 类别 | 必填 | 说明 |
---|---|---|---|
<Format> |
A/V | 是 | 目前只支持视频格式mp4 |
/oau/<bool> |
V | 否 | 是否对视频中的音频转码, 0为不做操作,1为转码 |
/ignore-error/<bool> |
V | 否 | 忽略压缩视频体积时的错误,1为忽略,0为不忽略。如果没能压缩视频大小, 则忽略该错误并且返回原视频 |
/s/<resolution> |
V | 否 | 视频输出分辨率,格式:WidthxHeight,指定宽高强制缩放;Widthx,指定宽,高随宽等比缩放;xHeight,指定高,宽随高等比缩放。 限定范围:小于等于原视频分辨率(宽高同时满足小于等于) 注意:分辨率不能为奇数 |
/wmImage/<encodedImageURL> |
V | 否 | 水印源图片网址(经过URL安全的Base64编码),必须有效且返回一张图片,水印图片支持格式:jpg,png |
/wmGravity/<wmGravity> |
V | 否 | 图片水印位置,参考水印位置参数表,缺省值为NorthEast(右上角) |
/wmImgResolution/<wmImgResolution> |
V | 否 | 图片水印分辨率,格式:WidthxHeight,指定宽高强制缩放;Widthx,指定宽,高随宽等比缩放;xHeight,指定高,宽随高等比缩放。 范围:Width为[0,3840],Height为[0,2160] 注意:分辨率不能为奇数 |
/wmText/<encodedText> |
V | 否 | 水印文字内容(经过URL安全的Base64编码) |
/wmGravityText/<wmGravityText> |
V | 否 | 水印位置,参考水印位置参数表,缺省值为NorthEast(右上角) |
/wmFont/<encodedFont> |
V | 否 | 水印文字字体(经过URL安全的Base64编码),缺省为黑体,详见支持字体列表。 注意:中文水印必须指定中文字体 |
/wmFontSize/<wmFontSize> |
V | 否 | 水印文字大小,单位: 缇,1 缇为 1/20 磅,默认为 16 缇 |
/wmFontColor/<encodedColor> |
V | 否 | 水印文字颜色,为颜色名称(比如red)缺省为黑色(经过URL安全的Base64编码) |
/vb/<maxVideoBitrate> |
V | 否 | 最大平均码率, 单位:比特每秒(bit/s),常用视频比特率:128k 1.25m 5m 等。小于 1k 会默认使用 1k |
注意:
avsmart
转码的结果会保存在原文件的空间中,但是文件名按照默认规则生成,为了方便获取转码后资源链接,建议自定义处理结果资源的名称,请参考处理结果另存 (saveas)。- 支持的视频编码器(Codec)目前有:
libx264
。 - 支持的音频编码器(Codec)目前有:
libfaac
。 - 不支持
hls
视频。
使用限制
当前暂不支持4K的视频进行锐智转码。
对于其他规格的视频,为避免转码处理超时,目前对于视频时长有一些限制。不同规格的视频时长限制如下:
规格 | 时长限制(s) |
---|---|
720p | 9000 |
1080p | 5400 |
2K | 1800 |
4K | 600 |
参数设置举例
- 以预转持久化形式,将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%¬ifyURL=http%3A%2F%2Ffake.com%2Fqiniu%2Fnotify
注意:要在Authorization
头部的<AccessToken>
前添加QBox
和半角空格。
接口响应
响应内容:
锐智转码为异步处理,因此响应分为2步:
- 创建异步处理任务,如成功,返回异步处理任务 ID。示例:16864pauo1vc9nhp12;
- 返回异步处理结果;
异步处理返回码:
返回码 | 含义 |
---|---|
0 | 成功。 |
1 | 等待处理 |
2 | 正在处理 |
3 | 处理失败 |
4 | 处理成功但通知失败 |
注:
如果,处理失败,可通过持久化处理状态查询查看具体失败原因。
失败原因分为以下几种情况:
- src video too long 视频时长超出限制
- src info parse failed 视频源文件解析失败
- unsupported vcodec 视频源文件编码非 h264
- convert failed 转码失败
- parse trans result failed 转码结果解析失败
- can't compress this video 视频不能被缩小
- video had been transfered before 视频已转码
调用示例
触发持久化
以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)
计费说明
服务价格
编码格式 | 输出规格 | 单价(元/分钟) |
---|---|---|
H264 | 4K(3840*2160) | 0.64 |
H264 | 2K(2560*1440) | 0.32 |
H264 | HD(1920*1080) | 0.16 |
H264 | SD(1280*720)及以下 | 0.08 |
文档反馈
(如有产品使用问题,请 提交工单)