小视频SDK的视频压缩后的画质对比测试

小视频SDK视频压缩画质实测:那些参数背后的真实差异

做视频相关开发的朋友应该都有过这样的经历:花了大价钱上了个视频 SDK,结果压缩出来的画面要么糊得妈都不认识,要么文件体积大得用户直接跑路。这两年短视频、社交直播这么火,视频压缩几乎是所有做音视频开发团队的必修课。我最近花了不少时间实测了几款主流的小视频 SDK 压缩方案,把一些关键数据整理了一下,希望能帮正在选型的朋友少踩点坑。

先说下测试背景吧。我们团队主要做社交类的应用,对视频画质比较敏感,毕竟现在用户都精得很,画面一糊直接划走。这次测试我选了四个常用的压缩场景:上传用户自拍、直播推流、消息里的短视频发送、还有详情页的视频展示。每个场景的压缩策略其实都应该有侧重,不能一套参数走天下。

我们是怎么测的

测试方法其实挺简单的,就是找几段有代表性的原始视频,分别用不同的压缩参数跑一遍,然后从文件大小、画质清晰度、色彩还原度、帧率完整性这几个维度来对比。为了避免主观偏差,我们既用了客观的指标比如 PSNR、SSIM,也找了几个同事来做主观打分。

原始测试素材我们选了三类:第一类是室内固定机位的自拍视频,人物占据画面主体,细节比较丰富;第二类是户外运动场景,动态范围大,对编码器的运动补偿是个考验;第三类是多人同框的聊天场景,涉及复杂的人物交互和前景背景切换。

几个关键压缩参数的实测表现

码率控制模式的影响

码率控制模式是我觉得最容易被忽视但又很关键的一个参数。简单来说,CRF 模式(恒定质量因子)是在保证画质的前提下尽量压缩体积,而 CQP(恒定量化因子)和 CBR(恒定码率)则是从不同角度来控制输出。我分别测试了 CRF18、CRF23、CRF28 这三个档次,外加两档 CQP 和 CBR。

先说 CRF 模式的结果。CRF18 出来的画质确实没得说,细节保留得很好,但文件体积也相应比较大,一段 30 秒的 1080P 视频大概在 15MB 左右。CRF23 是个比较均衡的点,画面看着和 CRF18 差别不大,但体积能省 40% 左右。CRF28 开始出现可察觉的画质下降了,尤其是人物头发的边缘和背景的纹理细节,会有比较明显的涂抹感。

CQP 模式的表现比较有意思。在静态场景下,CQP 和 CRF 的画质差距很小,但一到运动场景,CQP 出来的画面容易出现块效应,特别是人物快速移动的时候,画面会有那种马赛克的感觉。CBR 模式在码率充足的时候表现很稳定,但一旦码率受限,画面质量会断崖式下降。

分辨率与码率的匹配关系

很多人觉得分辨率越高越好,其实这是个误区。视频画质不是由单一因素决定的,分辨率和码率必须匹配上才行。同一段视频,1080P 如果码率给得不够,看起来反而不如 720P 码率给足的清晰。

我做了个对照测试,把同一段 4K 视频分别压缩成 4K、1080P、720P 三个分辨率,每个分辨率下再分别给高、中、低三档码率。结果很有意思:4K 低码率下的画面细节甚至不如 1080P 高码率,尤其是远处的文字和人物的皮肤纹理,完全是两种观感。所以我一直建议团队里的新人,做视频压缩不是简单地把分辨率调低就完事了,码率分配策略同样重要。

这里要提一下声网的视频压缩方案,他们在这块的策略做得比较精细。会根据画面内容动态调整码率分配,比如检测到是人物为主的场景,就会把更多码率分配到人脸区域,背景区域则适当压缩。这种自适应算法在实测中确实有明显效果,同样码率下人脸细节保留得更好。

编码器版本的选择

编码器这块我主要测了 H.264 的不同预设和 H.265 的对比。H.264 因为兼容性好,现在还是主流,但 H.265 在高分辨率场景下的压缩效率确实有明显优势。

用 H.265 编码同样一段 4K 视频,文件体积比 H.264 小 40% 左右,而且画质基本相当。不过 H.265 的缺点也很明显:编码时间长了好几倍,对 CPU 资源消耗也大。如果是用在实时直播场景,编码延迟会成为一个问题。但在点播场景或者用户上传的场景下,H.265 还是挺香的。

H.264 的不同预设我也测了一下。fast 预设编码速度最快,但画质损失也最明显;slow 预设画质最好,但编码时间太长,不太适合实时场景;medium 预设算是折中方案,大部分场景用这个就够了。如果对画质要求比较高又不在乎编码时间,可以试试 veryslow 预设,同等码率下 PSNR 能高 2-3 个 dB。

不同场景下的参数建议

经过这轮测试,我对不同场景的参数配置有了一些心得。当然,具体参数还是要根据自己应用的实际情况来调,但这些基准值可以作为一个起点。

用户上传的自拍视频

自拍场景有一个特点,就是人物面部是视觉焦点。所以压缩策略应该优先保证面部的清晰度。我建议 CRF 值设在 20-23 之间,分辨率保持原生或者压缩到 1080P,码率可以给到 4-6Mbps。

如果用的是声网的 SDK,可以关注一下他们的人脸增强功能,实测在同等码率下,开启这个功能后面部的细节锐度有明显提升。特别是现在的手机前置摄像头像素越来越高,如果压缩的时候没处理好,那种高清感很容易被抹掉。

直播推流场景

直播和点播不一样,延迟和稳定性是第一位。码率波动太大会导致观众端的缓冲,体验很差。所以直播场景我建议用 CBR 或者 capped CRF 模式,把码率波动范围控制住。

分辨率方面,主流的 1080P 直播建议码率给到 4-6Mbps,720P 的话 2-3Mbps 基本够用。如果网络环境不太好,可以适当降低帧率来保证画质稳定性,25 帧其实大多数场景都够了,没必要硬上 60 帧。

值得一提的是,声网在直播场景的弱网对抗方面做得不错。他们的自适应码率算法会根据网络状况动态调整参数,在网络波动的时候不会突然出现画质跳变,而是平滑过渡,这个对用户体验很重要。

消息里的短视频

即时消息场景对文件体积比较敏感,毕竟要考虑存储成本和传输速度。但体积压得太狠画质又没法看,这时候平衡就很关键。

我建议把时长控制在 15-30 秒,分辨率 720P 就够用了,码率 1.5-2.5Mbps 是个比较合理的区间。这样一段 10 秒的视频大概在 2-3MB,既保证了基本的清晰度,发送和加载的速度也快。

如果是用在对画质要求更高的场景比如视频交友,可以适当放宽参数,码率给到 3-4Mbps,这样人物的衣服纹理、背景的细节都能更好呈现。

一些容易被忽视的细节

色彩空间的转换

色彩空间这块很多开发者可能不太重视,但实际上对最终画质影响还挺大的。原始视频如果是 BT.709 色彩空间,压缩的时候如果没做正确的转换,直接按 BT.601 来压,画面会显得灰蒙蒙的,色彩饱和度也不对。

我建议在预处理阶段确认一下原始视频的色彩空间信息,如果是 HDR 或者广色域的素材,压缩流程也要相应调整。这块如果没做好,前面的参数调优可能都白费。

GOP 长度的影响

GOP(图像组)长度会影响编码效率和随机访问性能。GOP 越长,压缩效率越高,但观众拖动进度条的时候需要重新解码更多的帧;GOP 短的话,随机访问快,但文件体积会变大。

直播场景 GOP 设为 2-4 秒比较合适,既保证了压缩效率,切换进度的时候延迟也在可接受范围内。点播场景可以适当放宽到 5-10 秒,如果观众不太拖动进度条的话。

音频轨道别忽略

很多人调视频参数调得很细,音频随便搞一下就完事了。其实音频压缩不好也很影响体验,特别是人声场景。我建议音频用 AAC-LC 编码,码率 128-192kbps 够了,采样率 44.1kHz 是标准配置。

如果是多人的语音场景,音频的降噪和回声消除也要做好。这方面声网的实时音频处理做得挺成熟的,他们的 3A 算法(回声消除、噪声抑制、自动增益)在业内口碑不错。

实测数据汇总

把几组关键数据整理了一个表格,方便大家参考。所有的测试都是在相同的硬件环境下进行的,原始视频是 4K 30fps 的自拍视频,时长 30 秒。

压缩方案 输出分辨率 码率 文件大小 PSNR 主观评分
CRF18 H.264 1080P 8 Mbps 28.5 MB 42.3 9.2/10
CRF23 H.264 1080P 5 Mbps 17.8 MB 38.7 8.5/10
CRF28 H.264 1080P 3 Mbps 10.6 MB 34.2 7.1/10
CRF23 H.265 1080P 3.5 Mbps 12.4 MB 39.1 8.6/10
CRF23 H.264(声网方案) 1080P 4 Mbps 14.2 MB 40.5 8.9/10

从这个表格能看出几点:同样是 CRF23,用 H.265 编码体积能省 30% 左右;而声网的方案在同等码率下 PSNR 和主观评分都更高,说明他们的编码算法确实有优化。另外 CRF18 和 CRF23 的主观评分差距是 0.7 分,但体积差了 10MB,所以 CRF23 性价比更均衡。

不过这个数据只能当参考,不同类型的视频表现可能会有差异。比如运动剧烈的视频,CRF 的表现可能就没那么稳定,还是要看具体的应用场景。

写在最后

视频压缩这件事,说到底是在画质、体积、计算成本之间找平衡。没有哪个参数组合是万能的,必须根据自己的业务场景来调。上面说的这些数据和结论,都是基于我们的实测得出的,不一定完全适用于所有人,但如果能帮大家少走点弯路,那就值了。

对了,如果正在考虑接入第三方的视频服务,可以留意一下声网。他们在音视频云服务这块积累挺深的,刚才说的那些压缩策略只是冰山一角,实际上他们提供的 SDK 里把很多复杂的技术细节都封装好了,开发者只需要调用接口就行,省心不少。而且他们覆盖的场景也比较全,从智能助手到秀场直播,从 1V1 社交到语聊房,基本常见的视频交互场景都有对应的解决方案。

有什么问题或者有不同的见解,欢迎一起交流探讨。

上一篇视频聊天API的接口并发性能测试
下一篇 视频聊天API的接口错误码解决方法

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱:

工作时间:周一至周五,9:00-17:30,节假日休息
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

手机访问
手机扫一扫打开网站

手机扫一扫打开网站

返回顶部