视频编码基础回顾:YUV色彩空间、H.264/H.265编码原理、码率控制、GOP结构

做Camera编码这行,有些基础绕不过去。今天咱们就把视频编码的几个核心概念掰开揉碎聊一聊。YUV是什么、H.264和H.265怎么工作的、码率怎么控、GOP怎么设——这些搞明白了,后面讲高通平台编码器调优你才能听得进去。

YUV色彩空间:为什么Camera不用RGB?

很多人刚接触Camera时都会问:为什么不用RGB?显示器用RGB,摄像头传感器采集的也是RGB,怎么到了编码环节就变成YUV了?

说白了,人眼对亮度敏感,对色彩没那么敏感。YUV就是把亮度和颜色分开——Y存亮度,U和V存颜色差异。这样编码时可以对颜色信息做更多压缩,人眼还看不出来。

YUV采样格式对比

格式 亮度采样 色度采样 数据量 常见场景
YUV 4:4:4 全采样 全采样 最大 专业调色、屏幕录制
YUV 4:2:2 全采样 水平1/2 中等 广播级视频、高端Camera
YUV 4:2:0 全采样 水平1/2、垂直1/2 最小 H.264/H.265编码、网络视频

我在项目中遇到过一件事:有个同事把Camera输出的YUV 4:2:0数据直接当RGB处理,结果颜色全乱了。嗯,这里要注意——高通平台的ISP输出通常是NV12格式(YUV 4:2:0的一种变体),编码器输入前一定要确认格式对齐。

个人经验:调试Camera编码时,我习惯先抓一帧原始YUV数据,用工具打开看看。如果图像正常但颜色不对,八成是YUV格式搞错了。别问我怎么知道的——踩过坑的人自然懂。

H.264/H.265编码原理:从帧内到帧间

视频编码的核心思想就四个字:去除冗余。空间冗余、时间冗余、统计冗余、视觉冗余——全给它去掉。

帧内预测:空间冗余的克星

H.264支持9种帧内预测模式,H.265扩展到35种。什么意思?就是拿周围已经编码的像素,预测当前块的内容。预测得越准,残差越小,码率就越低。

我刚开始做编码优化时,总觉得帧内预测没什么好调的。直到有一次在低码率场景下,画面出现明显的块效应——后来发现是帧内预测模式选择不够精细。H.265的35种模式不是摆设,该用就得用。

帧间预测:时间冗余的杀手

视频相邻帧之间变化很小。帧间预测就是找参考帧里的匹配块,只记录运动矢量和残差。H.264支持1/4像素精度运动估计,H.265支持1/8像素精度——精度越高,预测越准,但计算量也越大。

避坑指南:我曾经在移动平台上把运动估计搜索范围设得太大,结果编码一帧要几十毫秒,帧率直接掉到15fps。后来改成自适应搜索范围,根据运动剧烈程度动态调整,效果好了很多。记住——高通平台的硬件编码器有固定的搜索范围限制,别盲目设大。

变换与量化:DCT和QP

残差数据做DCT变换,把空间域的像素值变成频率域的系数。高频系数量化得狠一点,反正人眼不敏感。量化参数QP控制压缩强度——QP越大,压缩越狠,画质越差。

H.264的QP范围是0-51,H.265也是0-51。但同样的QP值,H.265的压缩率比H.264高30%-50%。

码率控制:CBR、VBR、CRF怎么选?

码率控制是编码器的大脑。它决定每一帧分配多少比特。选错了,要么画面糊,要么带宽爆。

模式 特点 适用场景 我踩过的坑
CBR(恒定码率) 码率波动小,稳定 直播、视频通话 运动场景容易糊
VBR(可变码率) 码率波动大,画质好 本地录制、点播 峰值码率可能超限
CRF(恒定质量) 固定画质,码率自适应 后期处理、存档 实时编码慎用

我个人习惯在Camera实时编码场景用CBR。为什么?因为网络带宽是固定的,码率波动太大会导致卡顿。但CBR有个问题——运动剧烈时画面质量会下降。解决办法是配合场景检测,动态调整目标码率。

实战技巧:高通平台的编码器支持码率控制参数微调。我一般把初始QP设低一点(比如26),让编码器从高质量开始,再根据缓冲区状态调整。这样开头几帧画质好,用户体验更佳。

GOP结构:I帧、P帧、B帧的排列艺术

GOP就是一组连续的画面。结构怎么排,直接影响压缩效率和随机访问能力。

  • I帧:关键帧,完整编码,不依赖其他帧。体积最大。
  • P帧:前向预测,参考前面的I帧或P帧。体积中等。
  • B帧:双向预测,参考前后帧。体积最小,但延迟大。

典型的GOP结构有几种:

  • IPPP:只有I帧和P帧,延迟低,适合实时通信。
  • IBBP:插入B帧,压缩率高,适合本地录制。
  • IDR帧:特殊I帧,刷新解码器状态,用于随机访问。

GOP长度怎么设?我见过有人固定设30帧(1秒1个I帧)。但这样做有个问题——场景切换时,I帧之前的P帧质量会下降。我建议开启场景检测,检测到场景切换时自动插入IDR帧。

注意:B帧虽然压缩率高,但会引入编码延迟。做实时Camera编码时,我一般不用B帧,或者最多用1个B帧。高通平台的硬件编码器对B帧支持有限,用之前一定要查datasheet。

视频编码核心知识体系 视频编码基础 YUV色彩空间 H.264/H.265原理 码率控制 GOP结构 NV12 / NV21 / I420 4:2:0 / 4:2:2 / 4:4:4 帧内预测 / 帧间预测 DCT变换 / 量化 CBR / VBR / CRF QP / 缓冲区管理 I帧 / P帧 / B帧 GOP长度 / 场景检测 核心:去除空间冗余 + 时间冗余 + 统计冗余 + 视觉冗余 H.265相比H.264压缩率提升30%-50%,计算复杂度增加2-3倍

好了,基础部分就聊到这儿。YUV格式别搞错,编码原理要理解,码率控制选对模式,GOP结构根据场景定——这四个点吃透了,后面讲高通平台编码器配置和调优,你才能跟得上节奏。