智能多媒体服务

  • 普通音视频转码

    最近更新时间:2019-06-26 17:24:29

    普通音视频转码接口方便用户对音频、视频资源进行编码和格式转换。

    接口规格

    注意:接口规格不含任何空格与换行符,下列内容经过格式化以便阅读。

    avthumb/<Format>
           /stream/<Stream>
           /ab/<BitRate>
           /aq/<AudioQuality>
           /ar/<SamplingRate>
           /ac/<ChannelNum>
           /r/<FrameRate>
           /hr/<HighFrameRate>
           /vb/<VideoBitRate>
           /maxrate/<Maxrate>
           /vcodec/<VideoCodec>
           /acodec/<AudioCodec>
           /scodec/<SubtitleCodec>
           /subtitle/<SubtitleURL>
           /ss/<SeekStart>
           /t/<Duration>
           /aspect/<Aspect>
           /s/<Resolution>
           /stripmeta/<StripMeta>
           /h264Crf/<H264Crf>
           /h264Profile/<H264Profile>
           /h264Level/<H264Level>
           /refine/<Refine>
           /rotate/<Degree>
           /keyFramePosition/<KeyFramePosition>
           /audioProfile/<profile>
           /wmImage/<EncodedRemoteImageUrl>
           /wmGravity/<Gravity>
           /wmScale/<Scale>
           /wmScaleType/<ScaleType>
           /wmOffsetX/<offsetX>
           /wmOffsetY/<offsetY>
           /writeXing/<0|1>
           /compressLevel/<level>
           /wmText/<EncodedText>
           /wmGravityText/<GravityText>
           /wmFont/<font>
           /wmFontColor/<fontcolor>
           /wmFontSize/<fontsize>
           /wmConstant/<Constant>
           /amix/<AmixURL>
           /amixOffset/<AmixOffset>
           /amixStart/<AmixStart>
           /amixDuration/<AmixDuration>
           /multiArep/<MultiAudioReplaceURL>
           /multiArepOffset/<MultiAudioReplaceOffset>
           /multiArepStart/<MultiAudioReplaceStart>
           /multiArepDuration/<MultiAudioReplaceDuration>
           /loudnorm/<LoudNorm>
           /loudnormI/<LoudNormI>
           /loudnormLRA/<LoudNormLRA>
           /loudnormTP/<LoudNormTP>
           /speex/<Speex>
           /an/<AudioNo>
           /vn/<VideoNo> 
           /sn/<SubtitleNo> 
           /autoscale/<Autoscale>
           /gop/<GroupOfPictures>
           /flip/<flip>
    
    参数名称 类别 必填 说明
    <Format> A/V Y 封装格式,具体细节请参考支持转换的封装格式
    /stream/<Stream> A/V N 从输入源中选择要保留的或者要去除的媒体流,假设输入源有 n 个流(编号从 0 开始,n > 2),则保留媒体流的合法参数有 0、(n-1)、0..2、0..0、0,1,2 等,去除媒体流的合法参数有 -0、-(n-1)、-0..(n-2)、-1..1、-1,2 等,其中形如 a..b 表示保留编号为 [a,b] 流,a,b,c 表示保留编号为 a、b 和 c 的流,-a..b 表示去除编号为 [a,b] 流,-a,b,c 表示去除编号为 a、b 或 c 的流。流的编号可以通过 avinfo 来查看。
    /ab/<BitRate> A N 音频码率,单位:比特每秒(bit/s),常用码率:64k,128k,192k,256k,320k等。在不改变音频编码格式时,若指定码率大于原音频码率,则使用原音频码率进行转码。
    /ac/<ChannelNum> A N 音频声道数量,单位:整数值,目前只支持多种声道转为单声道,即为1,其他数值不合法。
    /aq/<AudioQuality> A N 音频质量,取值范围为0-9(mp3),10-500(aac),仅支持mp3和aac,值越小越高。不能与上述码率参数共用。
    /ar/<SamplingRate> A N 音频采样频率,单位:赫兹(Hz),常用音频采样频率有 8000, 11025、12000、16000、22050、24000、32000、44056、44100、47250、48000、50000、64000、88200、96000 等。其它特定限制请参考注意项。
    /r/<FrameRate> V N 视频帧率,每秒显示的帧数,单位:赫兹(Hz),常用帧率:24,25,30等,一般用默认值。当HighFrameRate=0 时取值范围为[1, 30],超出范围取25;当 HighFrameRate=1 时取值范围为[1, 60],当大于60时取60,当小于1时取25
    /hr/<HighFrameRate> V N 视频高帧率,与FrameRate配合使用,默认为HighFrameRate=0,即常规帧率;HighFrameRate=1表示保留高帧率。
    /vb/<VideoBitRate> V N 视频码率,单位:比特每秒(bit/s),常用视频码率:128k,1.25m,5m等。在不改变视频编码格式时,若指定码率大于原视频码率,则使用原视频码率进行转码。
    /maxrate/<Maxrate> V N 该参数必须在使用 /refine/1 时使用,以限制输出视频流的峰值码率。当不使用 /vb/<VideoBitRate> 时,该值不可低于输入视频码率;当使用 /vb/<VideoBitRate> 时,该值不可低于由 /vb/<VideoBitRate>指定的视频码率。
    /vcodec/<VideoCodec> V N 视频编码格式,具体细节请参考支持转换的视频编码格式
    /acodec/<AudioCodec> A N 音频编码格式,具体细节请参考支持转换的音频编码格式
    /audioProfile/<profile> A N 设置音频的profile等级,支持:aac_he。注:需配合 libfdk_aac 编码方案使用,如 avthumb/m4a/acodec/libfdk_aac/audioProfile/aac_he
    /scodec/<SubtitleCodec> V N 字幕编码方案,支持方案:mov_text。该参数仅用于修改带字幕视频的字幕编码。
    /subtitle/<SubtitleURL> S N 添加字幕,支持:srt格式字幕(uft-8编码和和utf-8 BOM编码)、带有字幕的mkv文件、embed(将原视频的字幕流嵌入目标视频)。基于base64编码。
    /ss/<SeekStart> A/V N 指定音视频截取的开始时间,单位:秒,支持精确到毫秒,例如3.345s。用于视频截取,从一段视频中截取一段视频。
    /t/<Duration> A/V N 指定音视频截取的长度,单位:秒,支持精确到毫秒,例如1.500s。用于视频截取,从一段视频中截取一段视频。
    /aspect/<Aspect> V N 该参数为视频在播放器中显示的宽高比,格式为<width>:<height>。例如:取值3:4表示视频在播放器中播放是宽:高=3:4(注:此处取值仅为体现演示效果)。
    /s/<Resolution> V N 指定视频分辨率,格式为<width>x<height>或者预定义值,width 取值范围 [20,3840],height 取值范围 [20,2160]。
    /autoscale/<Autoscale> V N 配合参数/s/使用,指定为1时,把视频按原始比例缩放到/s/指定的矩形框内,0或者不指定会强制缩放到对应分辨率,可能造成视频变形。
    /stripmeta/<StripMeta> A/V N 是否清除文件的metadata,1为清除,0为保留。
    /h264Crf/<H264Crf> V N 设置h264的crf值,整数,取值范围[18,28],值越小,画质更清晰。注意:不可与vb共用
    /h264Profile/<H264Profile> V N 设置 h264 的 profile等级,支持 baseline、main、high。
    /h264Level/<H264Level> V N 设置 h264 的 level 值,合法的值有 3.0、3.1、4.0、4.1、4.2。
    /rotate/<Degree> V N 指定顺时针旋转的度数,可取值为90180270auto,默认为不旋转。
    /refine/<Refine> V N 选择高效转码或者高质量转码,可选值为 0 或 1。默认为 0,即高效转码,当选择值 1 时,即为高质量转码。
    /keyFramePosition/<KeyFramePosition> V N 设置多个关键帧出现的时间点,以.分隔,个数范围[1,5],单位:秒,时间范围[1,10],且时间采用增长趋势,例如:keyFramePosition/1.3.5.8.10
    /audioProfile/<profile> A N 设置audio的profile等级,支持aac_he(需使用libfdk_aac编码)
    /wmImage/<EncodedRemoteImageUrl> V N 水印图片的源路径,目前仅支持远程路径,需要经过urlsafe_base64_encode。水印具体介绍见视频水印
    /wmGravity/<Gravity> V N 视频图片水印位置,存在/wmImage/时生效。
    /wmScale/<Scale> V N 指定水印图片的短边、长边、宽、高与输入视频之间的比例,取值为(0,1],默认值时不进行自适应缩放水印图。
    /wmScaleType/<ScaleType> V N 选择水印图片自适应缩放的方式,取值0、1、2、3分别表示为自适应原图的短边、长边、宽、高,默认值为0。
    /wmOffsetX/<offsetX> V N 设置水印位置的相对横向偏移量,正数则向右偏移,反之向左。
    /wmOffsetY/<offsetY> V N 设置水印位置的相对纵向偏移量,正数则向下偏移,反之向上。
    /writeXing/<Xing> A N 转码成mp3时是否写入xing header,默认1写入,写入会导致 fileafinfo 等命令识别出错误的码率。好处是在需要音频时长、帧数的时候只需要获取header。 值为 0 表示不写入 xing header。
    /compressLevel/<level> V N 视频编码时压缩的等级,选项为1,1.5,2,4,等级越高压缩效果越好,更耗CPU。
    /wmText/<EncodedText> V N 水印文本内容,需要经过urlsafe_base64_encode
    /wmGravityText/<GravityText> V N 文本位置(默认NorthEast)
    /wmFont/<Font> V N 文本字体,需要经过urlsafe_base64_encode,默认为黑体,注意:中文水印必须指定中文字体。
    /wmFontColor/<FontColor> V N 水印文字颜色,需要经过urlsafe_base64_encode,RGB格式,可以是颜色名称(例如红色)或十六进制(例如#FF0000),参考RGB颜色编码表,默认为黑色。
    /wmFontSize<FontSize> V N 水印文字大小,单位: 缇,等于1/20磅,默认值0(默认大小)
    /wmConstant/<Constant> V N 用于设置水印图片是否随源视频 DAR(display aspect ratio)变化而产生形变。为 0 时,水印图片会随源视频 DAR 变化而产生形变;为 1 时,水印图片保持原有宽高比。该参数仅对 wmImage 有效,默认值为 0。
    /amix/<AmixURL> A N 期望混音的音视频文件,单音轨,channel数与源音视频音轨一致,url要经过 {{urlsafe_base64_encode}}。源音视频、混音输入音视频都仅支持单音轨;混音的两个音频的channel数必须一致。
    /amixOffset/<AmixOffset> A N 混音效果起始位置,相对于混音后视频起始位置计算,单位为秒,精确到毫秒,默认取0,即混音后音视频从起始位置起有混音效果
    /amixStart/<AmixStart> A N 目标混音文件截取的开始时间,单位为秒,精确到毫秒,默认取0,即目标混音文件从起始开始混入源音视频
    /amixDuration/<AmixDuration> A N 目标混音文件截取的时长,单位为秒,精确到毫秒,默认为目标混音文件音轨原始长度,即全部混入源音视频
    /multiArep/<MultiAudioReplaceURL> A N 用于替换原视频中音频的目标音频文件 URL经过 urlsafe_base64_encode,多个文件以英文逗号分隔
    /multiArepOffset/<MultiAudioReplaceOffset> A N 目标音频相对于原视频的起始位置,相对于原视频视频起始位置计算,单位为秒,精确到毫秒,默认取0,从结果视频的起始位置起有指定音频,多个文件以参数指定使用英文逗号分隔,且必须与multiArep文件顺序对应
    /multiArepStart/<MultiAudioReplaceStart> A N 目标音频文件截取的开始时间,单位为秒,精确到毫秒,默认取0,即目标音频文件从起始开始添加到原视频中,多个文件以参数指定使用英文逗号分隔,且必须与multiArep文件顺序对应
    /multiArepDuration /<MultiAudioReplaceDuration> A N 目标音频文件截取的时长,单位为秒,精确到毫秒,默认为目标音频文件音轨原始长度,即全部目标音频替换原视频音频,多个文件以参数指定使用英文逗号分隔,且必须与multiArep文件顺序对应
    /loudnorm/<LoudNorm> A N 是否使用音频响度标准化调整,0为不使用,1为使用。默认值为0
    /loudnormI/<LoudNormI> A N 音频整体响度值,当 loudnorm 为1时有效,取值范围 [-70.0, -5.0], 默认为 -24.0
    /loudnormLRA/<LoudNormLRA> A N 音频响度范围,当 loudnorm 为1时有效, 取值范围 [1.0, 20.0], 默认为 7.0
    /loudnormTP/<LoudNormTP> A N 音频最高峰值,当 loudnorm 为1时有效, 取值范围 [-9.0, 0.0], 默认为 -2.0
    /speex/<Speex> A N 取值为1时,把源音频文件作为微信版speex处理,版本为1.2rc1,其他类别音视频文件处理均会失败。默认取值为0。
    /an/<AudioNo> A N 是否去除音频流,0为保留,1为去除。
    默认值为0。
    /vn/<VideoNo> V N 是否去除视频流,0为保留,1为去除。
    默认值为0。
    /subtitle/<SubtitleURL> V N 添加字幕,支持:srt 格式字幕(uft-8 编码和和 utf-8 BOM 编码)、带有字幕的 mkv 文件、embed(将原视频的字幕流嵌入目标视频)。基于 base64 编码。
    /sn/<SubtitleNo> V N 是否去除字幕,0为保留,1为去除。默认值为0。
    /gop/<GroupOfPictures> V N GOP参数,即视频流关键帧间的间隔帧数,取值[0,3000]的整数,默认为0表示采用指定视频编码格式的默认GOP值,例如libx264格式默认GOP值为250。GOP取值过小会影响视频编码压缩率,码率变大,过大会使图像群组的时长跨度过大,影响播放随机性,故一般建议采用默认值。
    /flip/<Flip> V N 视频翻转, 水平翻转 horizontal, 垂直翻转 vertical

    注意:

    • 转码操作若未指定音视频码率,转码结果的码率会小于等于原音视频码率,若指定码率大于原音视频码率,转码操作会使用原视频码率进行转码。
    • avthumb转码的结果会保存在原文件的空间中,但是文件名按照默认规则生成,为了方便获取转码后资源链接,建议自定义处理结果资源的名称,请参考处理结果另存 (saveas)
    • <VideoCodec><AudioCodec>值同时为copy,即不进行音视频编解码操作时以音视频转封装计费。
    • 视频转码时,当视频实际处理帧率在(30, 60]时,按视频高帧率转码计费。
    • 我们为一些预设集设置了默认参数,如果用户觉得某些参数不适合自己的业务场景可以在后面加参数覆盖。如: avthumb/mp3/ab/64k 会把默认码率128k调整为64k。
    • 不同格式的默认转码参数列表:
    格式 视频编码器 视频码率 音频编码器 音频码率 音频采样率
    flash flv 512k libmp3lame 64k 44100
    webm libvpx 700k libvorbis 128k 48k
    mp3 - - libmp3lame 128k 44100
    amr - - amr_nb 12.20k 8000
    • <Format> 为 mp4 且 <AudioCodec> 为 libmp3lame 时,<SamplingRate> 的值不可小于 16000;另外,特定音频编码方案 <AudioCodec> 可使用的音频采样频率 <SamplingRate> 如下表所示:
    音频编码方案 <AudioCodec> 可使用的音频采样频率 <SamplingRate>
    libfdk_aac 96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000
    libmp3lame 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025
    libspeex 32000, 16000, 8000
    libopencore_amrnb 8000

    加密参数
    对视频内容进行私有加密,只能通过七牛云播放器解码播放。关于输出视频解密以及播放的要求可参考 qplayer 说明

    • 视频私有加密单独计费。如果只希望对视频加密而不进行转码操作,则需要将<VideoCodec><AudioCodec>值同时指定为copy
    • <VideoCodec>值不为copy<AudioCodec> 值不同时为copy且指定了加密参数时,服务价格 = 视频转码价格 + 视频加密价格
    • <VideoCodec><AudioCodec>值同时为copy 并且指定了加密参数时,服务价格 = 视频加密价格
    • 视频加密服务计费方式为按时(分钟)计费。服务价格为:0.018 元/分钟。
    参数名称 类别 必填 说明
    /drmComKey/<DrmCompanyKey> V N QPlayer 中使用的用于区别用户的秘钥,由长度为[1,8]的字符串表示,需要经过urlsafe_base64_encode,需要与 DrmFileKey同时使用。目前仅支持输出为 mp4。
    /drmFileKey/<DrmFileKey> V N QPlayer 中使用的进行视频文件加密的秘钥,由长度为[1,8]的字符串表示,需要经过urlsafe_base64_encode,需要与 DrmCompanyKey 同时使用。目前支持输出格式 mp4。

    参数设置举例

      {
          "scope":                "qiniu-ts-demo:sample.wav",
          "deadline":             1390528576,
          "persistentOps":        "avthumb/mp3",
          "persistentNotifyUrl":  "http://fake.com/qiniu/notify"
      }
    
    • 以预转持久化形式,将wav音频转换为mp3格式,比特率为192k:
      {
          "scope":                "qiniu-ts-demo:sample.wav",
          "deadline":             1390528576,
          "persistentOps":        "avthumb/mp3/ab/192k",
          "persistentNotifyUrl":  "http://fake.com/qiniu/notify"
      }
    
    • 以预转持久化形式,将mp4视频转换为flv格式,帧率为24,使用x264进行视频编码:
      {
          "scope":                "qiniu-ts-demo:thinking-in-go.mp4",
          "deadline":             1390528576,
          "persistentOps":        "avthumb/flv/r/24/vcodec/libx264",
          "persistentNotifyUrl":  "http://fake.com/qiniu/notify"
      }
    
    • 以预转持久化]形式,将mp4视频转换为avi格式,使用mp3进行音频编码,且音频比特率为64k:
      {
          "scope":                "qiniu-ts-demo:thinking-in-go.mp4",
          "deadline":             1390528576,
          "persistentOps":        "avthumb/avi/ab/64k/acodec/libmp3lame",
          "persistentNotifyUrl":  "http://fake.com/qiniu/notify"
      }
    
    • 以持久化数据处理(即触发持久化)形式,将wav音频转换为mp3格式,VBR参数为3,采样频率为44100:
      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.wav&fops=avthumb%2Fmp3%2Far%2F44100%2Faq%2F3&notifyURL=http%3A%2F%2Ffake.com%2Fqiniu%2Fnotify
    
    • 以持久化数据处理(即触发持久化)形式,将mp4视频转换为flv格式,帧率为30,视频比特率为256k,使用x264进行视频编码,音频采样频率为22050,音频比特率为64k,使用mp3进行音频编码:
      POST /pfop/ HTTP/1.1
      Host: api.qiniu.com  
      Content-Type: application/x-www-form-urlencoded  
      Authorization: QBox <AccessToken>  
    
      bucket=qiniu-ts-demo
      &key=thinking-in-go.mp4
      &fops=avthumb%2Fflv%2Fr%2F30%2Fvb%2F256k%2Fvcodec%2Flibx264%2Far%2F22050%2Fab%2F64k%2Facodec%2Flibmp3lame
      &notifyURL=http%3A%2F%2Ffake.com%2Fqiniu%2Fnotify
    
    • 以持久化数据处理(即触发持久化)形式,将mp4视频转换为ogv格式,帧率为30,视频比特率为1800k,使用libtheora进行视频编码,音频采样频率为44100,音频比特率为128k,使用libvorbis进行音频编码:
      POST /pfop/ HTTP/1.1
      Host: api.qiniu.com  
      Content-Type: application/x-www-form-urlencoded  
      Authorization: QBox <AccessToken>  
    
      bucket=qiniu-ts-demo
      &key=thinking-in-go.mp4
      &fops=avthumb%2Fogv%2Fr%2F30%2Fvb%2F1800k%2Fvcodec%2Flibtheora%2Far%2F44100%2Fab%2F128k%2Facodec%2Flibvorbis
      &notifyURL=http%3A%2F%2Ffake.com%2Fqiniu%2Fnotify
    

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

    示例

    触发持久化

    以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 = 'avthumb/mp4/s/640x360/vb/1.25m'
    
    # 可以对转码后的文件进行使用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 = 'avthumb/mp4/vcodec/libx264'
    
    # 通过添加'|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)
    
    以上内容是否对您有帮助?
  • Icon free helper
    Close