更新时间: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 |
是 | 输出的目标格式,支持 mp4、flv、m3u8 (HLS)、mpd (DASH) 等。 |
r |
否 | 视频帧率,单位为帧每秒 (fps)。常用取值为 24、25、30。注意:不支持动态采集帧率。 |
ab |
否 | 音频码率,单位为比特每秒 (bit/s)。常见值:64k、128k、192k、256k、320k。 |
vb |
否 | 视频码率,单位为比特每秒 (bit/s)。支持动态码率。常见取值:128k、1.25m、5m。 |
vbRatio |
否 | 视频比特率的系数形式:以输入视频码率为基数乘以该系数值作为输出视频比特率的设置,取值范围 (0, 15],支持小数形式。 备注:取值为0或大于15则返回报错。当 vbRatio 计算得出视频比特率值超过 50Mbps 时,判断为异常情况,此时参数不生效。若 vbRatio 与 vb 同时配置,则以 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高度模式:设置确切的宽和高。如果同时给出宽度和高度,转码器将使用这两个精确的数值。注意:若设置的分辨率高宽比和原视频分辨率高宽比不一致,可能会出现画面拉伸或压缩变形的情况(除非配合 autoscale 或 autofill 使用)。宽度或高度模式:如果只提供其中一项 (如 1280x 或 x720),转码器会在保持原始高宽比的前提下,自动计算另一边的值。例如,一个 1920x1080 的视频,若指定为 1280x,则输出分辨率为 1280x720。 |
autoscale |
否 | 与 s 参数配合使用,控制高宽比的处理方式:• 0 (默认):严格按照 s 参数指定的分辨率尺寸进行处理,即使这会导致画面拉伸。• 1:在 s 参数指定的尺寸范围内,保持原始高宽比进行缩放,输出视频不会超出 s 指定的宽高。 |
autofill |
否 | 与 s 参数配合使用,用于控制视频输出尺寸及填充:• 1:当目标高宽比与源视频不一致时,在保持源视频高宽比缩放到适应 s 参数指定尺寸的同时,使用黑边(上下或左右)填充空白区域,以达到 s 参数设定的最终分辨率。 |
GOPInterval |
否 | 设置关键帧 (I帧) 之间的时间间隔,单位为毫秒 (ms)。 注意:此参数与定义关键帧间帧数的 g 参数存在冲突,不能共用。 |
rotate |
否 | 指定顺时针旋转角度:可设为 90、180、270,或 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),一种质量控制模式。设置后,输出码率会根据画面复杂度动态调整:简单画面码率较低,复杂画面码率较高,以试图维持恒定的视觉质量。取值范围通常为 0 到 51 (H.264/H.265),数值越小,画质越好,文件越大;数值越大,画质越差,文件越小。建议取值范围 [18, 28]。 |
level |
否 | 设置 H.264/H.265 编码的 Level。Level 定义了解码器需要支持的一系列参数约束(如最大分辨率、帧率、码率等)。取值范围例如 10 到 51 (对应 Level 1.0 到 5.1)。此参数仅当视频编码器为 libx264 时有效。 |
pix_fmt |
否 | 设置像素格式,例如 yuv420p、yuv422p 或 yuv444p。yuv420p 是网络视频流中最常用的 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 (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,保持原始高宽比 |
注:预设集中的分辨率可能会根据源视频特性有所调整,以保持高宽比。
此示例将对象存储空间 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>"
此示例将对象存储空间 vod-wcs-test001 中名为 test.mp4 的视频转码为 HLS 格式 (生成 .m3u8 文件及对应的 .ts 切片)。使用预设集 video_16x9_150k,该预设集通常包含如下参数:
转码后的主 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>"