视频转码

更新时间:2025-05-26 18:21:23

视频转码功能旨在将存储于对象存储服务中的视频文件从其原始格式转换为多种目标格式。这项服务支持对视频的码率、分辨率和编码方式进行灵活调整,以确保您的视频内容能够在各种设备上兼容播放,从而为所有用户提供最佳的观看体验。

核心功能

  • 格式多样性:支持多种主流及专业视频、音频格式和编码。
  • 参数可定制:允许用户自定义输出视频的码率、分辨率、帧率等关键参数。
  • 兼容性提升:确保转码后的视频能在不同终端和播放器上流畅播放。
  • 集成便捷:可与对象存储无缝集成,方便管理和处理视频资源。

支持的格式与编码

CDNetworks 视频转码服务支持以下文件格式和编码标准:

分类 支持项
视频格式 MP4, FLV, HLS (m3u8), DASH (mpd), TS, MKV, MOV, WMV, AVI, VP8, VP9, RealVideo, Windows Media Video
音频格式 AAC, AC-3, MP1, MP2, MP3, PCM, RealAudio, Windows Media Audio (WMA), OGG
编码格式 H.266 (VVC), H.265 (HEVC), H.264 (AVC), H.263, MPEG

转码使用场景

您可以在以下几种场景中执行视频转码操作:

  • 上传时转码:在视频文件上传到对象存储的同时自动或手动触发转码任务。
  • 存量视频转码:针对已存储在对象存储中的现有视频文件进行转码处理。
  • 媒体处理流:作为复杂媒体处理工作流(例如,视频截图、水印添加等)的一部分。

使用方法

请求结构

视频转码操作通过在请求中设置 fops (文件处理操作) 参数来定义。fops 参数的基本结构如下,其中包含一系列指令和子参数,通过 / 分隔。


<op>/<Format>
    /r/<value>
    /ab/<value>
    /vb/<value>
    /vcodec/<value>
    /acodec/<value>
    /s/<value>
    /autoscale/<value>
    /autofill/<value>
    /GOPInterval/<value>
    /rotate/<value>
    /an/<value>
    /vn/<value>
    /moovToFront/<value>
    /sar/<value>
    /preset/<value>
|saveas/<Urlsafe_Base64_Encode(bucket:savedfilename)>


关键点

  • op:操作类型,对于视频转码,固定为 avthumb
  • Format:输出的目标视频格式。
  • |saveas/...:此部分为必需,用于指定转码后文件的存储位置和名称。

参数详解

下表详细列出了视频转码支持的参数及其说明:

参数 必填 描述
op 操作类型。对于视频转码,请选择 avthumb
format 输出的目标格式,支持 mp4flvm3u8 (HLS)、mpd (DASH) 等。
r 视频帧率,单位为帧每秒 (fps)。常用取值为 242530
注意:不支持动态采集帧率。
ab 音频码率,单位为比特每秒 (bit/s)。常见值:64k128k192k256k320k
vb 视频码率,单位为比特每秒 (bit/s)。支持动态码率。常见取值:128k1.25m5m
vbRatio 视频比特率的系数形式:以输入视频码率为基数乘以该系数值作为输出视频比特率的设置,取值范围 (0, 15],支持小数形式。
备注:取值为0或大于15则返回报错。当 vbRatio 计算得出视频比特率值超过 50Mbps 时,判断为异常情况,此时参数不生效。若 vbRatiovb 同时配置,则以 vbRatio 配置为准。
vcodec 视频编码方案。未指定时,尽可能保留原始编码方案。
可选项:
libx264 - H.264
libvpx - VP8 和 VP9 (Google 编解码器)
libxvid - MPEG-4
libws265 - H.265
vvc - H.266
acodec 音频编码方案。未指定时,尽可能保留原始编码方案。支持 MP3, AAC, OGG 等。
s 指定视频输出分辨率,格式为 宽度x高度 (例如 1920x1080),或使用预设值。

宽度x高度模式:设置确切的宽和高。如果同时给出宽度和高度,转码器将使用这两个精确的数值。注意:若设置的分辨率高宽比和原视频分辨率高宽比不一致,可能会出现画面拉伸或压缩变形的情况(除非配合 autoscaleautofill 使用)。

宽度或高度模式:如果只提供其中一项 (如 1280xx720),转码器会在保持原始高宽比的前提下,自动计算另一边的值。例如,一个 1920x1080 的视频,若指定为 1280x,则输出分辨率为 1280x720
autoscale s 参数配合使用,控制高宽比的处理方式:
0 (默认):严格按照 s 参数指定的分辨率尺寸进行处理,即使这会导致画面拉伸。
1:在 s 参数指定的尺寸范围内,保持原始高宽比进行缩放,输出视频不会超出 s 指定的宽高。
autofill s 参数配合使用,用于控制视频输出尺寸及填充:
1:当目标高宽比与源视频不一致时,在保持源视频高宽比缩放到适应 s 参数指定尺寸的同时,使用黑边(上下或左右)填充空白区域,以达到 s 参数设定的最终分辨率。
GOPInterval 设置关键帧 (I帧) 之间的时间间隔,单位为毫秒 (ms)。
注意:此参数与定义关键帧间帧数的 g 参数存在冲突,不能共用。
rotate 指定顺时针旋转角度:可设为 90180270,或 auto (自动检测视频元数据中的旋转信息并校正)。默认不旋转。
an 是否去除音频流:
0 (默认):保留音频流。
1:移除音频流,输出视频将不包含音频。
vn 是否去除视频流:
0 (默认):保留视频流。
1:移除视频流,输出文件将只包含音频(如果音频流存在)。
moovToFront 用于控制 MP4 文件中 moov 原子 (元数据) 的位置:
0 (默认):保持元数据在文件末尾。
1:将元数据移到文件开头。这通常能加快视频流式播放的启动速度,因为播放器可以更快地获取初始化信息。
sar 像素高宽比 (Sample Aspect Ratio)。设置特定的像素高宽比 (如 1:1, 1:2)。此参数会影响最终显示的画面比例,其优先级通常高于 -s 分辨率参数中的高宽比。例如,当分辨率为 720x720 且 SAR 为 1:2 时,显示时像素在垂直方向上会被拉伸,最终实际显示的视频分辨率(或感知分辨率)将为 720x1440 的效果。
/crf/<value> 恒定速率因子 (Constant Rate Factor),一种质量控制模式。设置后,输出码率会根据画面复杂度动态调整:简单画面码率较低,复杂画面码率较高,以试图维持恒定的视觉质量。取值范围通常为 051 (H.264/H.265),数值越小,画质越好,文件越大;数值越大,画质越差,文件越小。建议取值范围 [18, 28]
level 设置 H.264/H.265 编码的 Level。Level 定义了解码器需要支持的一系列参数约束(如最大分辨率、帧率、码率等)。取值范围例如 1051 (对应 Level 1.0 到 5.1)。此参数仅当视频编码器为 libx264 时有效。
pix_fmt 设置像素格式,例如 yuv420pyuv422pyuv444pyuv420p 是网络视频流中最常用的 YUV 4:2:0 格式,具有较好的兼容性和压缩率。
vprofile 设置视频编码的 Profile (配置文件),如 baseline, main, high, high10, high422, high444 (主要针对 H.264/H.265)。Profile 定义了编码工具集,影响压缩效率和兼容性。
maxrate 动态码率下的最大码率限制,单位 kbit/s 或 Mbit/s (例如 1000k, 8M,M 必须大写)。
注意:使用此参数时,必须同时指定 bufsize 参数。
bufsize 编码器缓冲区大小,与 maxrate 一起使用,单位 kbit/s 或 Mbit/s (例如 1000k, 8M,M 必须大写)。它定义了解码器验证视频流所需的缓冲区大小。
seiKeep 转码时是否保留 SEI (Supplemental Enhancement Information) 信息。
0 (默认):不保留。
1:保留。
特别地,当仅进行转封装处理(不改变编码)时,SEI 信息默认会被保留。
preset (主要用于 HLS)预设集 (Preset) 名称。预设集是一组预先配置好的转码参数,使用一个预设集名称即可代表一组参数。您也可以在请求中添加特定参数来覆盖预设集中的部分配置。详情请参阅下方的 “HLS 预设集”。
saveas 定义转码后文件的存储位置和文件名。采用 URL 安全的 Base64 编码格式,格式为:Urlsafe_Base64_Encode(bucket:savedfilename)

注意

  • 参数名称和值对大小写敏感。
  • 当某些参数组合使用时,可能存在依赖关系或互斥情况,请参考具体参数的说明。

HLS 预设集

为了简化 HLS (m3u8) 转码配置,提供了一系列预设集。每个预设集代表一组优化过的参数组合。

类型 预设集名称 描述
音频 audio_32k 音频码率:32kbps
音频 audio_48k 音频码率:48kbps
音频 audio_64k 音频码率:64kbps
视频 video_16x9_150k 码率:150kbps,高宽比:16:9,分辨率:约 400x224
视频 video_16x9_240k 码率:240kbps,高宽比:16:9,分辨率:约 400x224
视频 video_16x9_440k 码率:440kbps,高宽比:16:9,分辨率:约 400x224
视频 video_16x9_640k 码率:640kbps,高宽比:16:9,分辨率:约 400x224
视频 video_4x3_150k 码率:150kbps,高宽比:4:3,分辨率:约 400x300
视频 video_4x3_240k 码率:240kbps,高宽比:4:3,分辨率:约 400x300
视频 video_4x3_440k 码率:440kbps,高宽比:4:3,分辨率:约 400x300
视频 video_4x3_640k 码率:640kbps,高宽比:4:3,分辨率:约 400x300
视频 video_150k 码率:150kbps,保持原始高宽比,宽度基准可能为400px
视频 video_240k 码率:240kbps,保持原始高宽比,宽度基准可能为400px
视频 video_440k 码率:440kbps,保持原始高宽比,宽度基准可能为400px
视频 video_640k 码率:640kbps,保持原始高宽比,宽度基准可能为400px
视频 video_1000k 码率:1000kbps,保持原始高宽比
视频 video_1500k 码率:1500kbps,保持原始高宽比

注:预设集中的分辨率可能会根据源视频特性有所调整,以保持高宽比。

示例

示例 1:MP4 转 FLV

此示例将对象存储空间 vod-wcs-test001 中名为 test.mp4 的视频转码为 FLV 格式,并设置视频码率为 128k。转码后的文件名为 test_file.flv,保存在同一空间下。

参数组合 (fops)
avthumb/flv/vb/128k|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:test_file.flv)

伪代码请求 (curl)

curl -v -X POST \
  --data "bucket=Urlsafe_Base64_Encode(vod-wcs-test001)&key=Urlsafe_Base64_Encode(test.mp4)&fops=Urlsafe_Base64_Encode(avthumb/flv/vb/128k|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:test_file.flv))&force=1&separate=1" \
  --header "Authorization: AccessKey:EncodeSign" \
  --url "<http://mgrDomain/fops>"

实际请求 (Base64 编码后)

curl -v -X POST \
  -d "bucket=dm9kLXdjcy10ZXN0MDAx&key=dGVzdC5tcDQ=&fops=YXZ0aHVtYi9mbHYvdmIvMTI4a3xzYXZlYXMvZG05a0xYZGpjeTEwWlhOME1EQXhPblJsYzNSZlptbHNaUzVtYkhZPQ==&force=1&separate=1" \
  -H "Authorization: AccessKey:EncodeSign" \
  --url "<http://mgrDomain/fops>"

示例 2:MP4 转 HLS (使用预设集)

此示例将对象存储空间 vod-wcs-test001 中名为 test.mp4 的视频转码为 HLS 格式 (生成 .m3u8 文件及对应的 .ts 切片)。使用预设集 video_16x9_150k,该预设集通常包含如下参数:

  • 码率: 150kbps
  • 高宽比: 16:9
  • 分辨率: 约 400x224 (或根据源自适应)

转码后的主 m3u8 文件名为 test.m3u8,保存在同一空间下。

参数组合 (fops)
avthumb/m3u8/preset/video_16x9_150k|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:test.m3u8)

伪代码请求 (curl)

curl -v -X POST \
  --data "bucket=Urlsafe_Base64_Encode(vod-wcs-test001)&key=Urlsafe_Base64_Encode(test.mp4)&fops=Urlsafe_Base64_Encode(avthumb/m3u8/preset/video_16x9_150k|saveas/Urlsafe_Base64_Encode(vod-wcs-test001:test.m3u8))&force=1&separate=1" \
  --header "Authorization: AccessKey:EncodeSign" \
  --url "<http://mgrDomain/fops>"

实际请求 (Base64 编码后)

curl -v -X POST \
  -d "bucket=dm9kLXdjcy10ZXN0MDAx&key=dGVzdC5tcDQ=&fops=YXZ0aHVtYi9tM3U4L3ByZXNldC92aWRlb18xNng5XzE1MGt8c2F2ZWFzL2RtOWtMWGRqY3kxMFpYTjBNREF4T25SbGMzUXViVE4xT0E9PQ==&force=1&separate=1" \
  -H "Authorization: AccessKey:EncodeSign" \
  --url "<http://mgrDomain/fops>"
本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!