数字视频处理
Abstract |
数字视频处理 |
Authors |
Walter Fan |
Status |
v1.0 |
Updated |
2026-03-20 |
数字视频
视频是动起来的图片。当连续的静态图像以足够快的速率播放时,人眼的视觉暂留效应会将其感知为连续的运动画面。 数字视频就是将这些图像以数字方式采样、量化和存储的技术。
视频采样
视频采样涉及三个维度:
空间采样 (分辨率): 每帧图像在水平和垂直方向上的像素数量
时间采样 (帧率): 每秒采集的帧数 (fps)
幅度量化 (位深): 每个像素分量的量化精度
常见分辨率:
名称 |
分辨率 |
像素数 |
|---|---|---|
480p (SD) |
640×480 |
307,200 |
720p (HD) |
1280×720 |
921,600 |
1080p (Full HD) |
1920×1080 |
2,073,600 |
4K (UHD) |
3840×2160 |
8,294,400 |
常见帧率:24fps (电影)、25fps (PAL)、30fps (NTSC)、60fps (高帧率)。 WebRTC 中通常使用 15~30fps,根据带宽动态调整。
色彩空间
RGB 色彩空间
RGB 使用红 (Red)、绿 (Green)、蓝 (Blue) 三个分量表示颜色, 每个分量通常用 8 bit 表示 (0~255),一个像素占 24 bit。 RGB 适合显示设备,但不适合视频压缩。
YUV 色彩空间
YUV 将亮度 (Y) 和色度 (U/V 或 Cb/Cr) 分离:
Y (Luminance): 亮度分量,携带大部分视觉信息
U/Cb (Chrominance Blue): 蓝色色差
V/Cr (Chrominance Red): 红色色差
人眼对亮度比色度更敏感,因此可以对色度进行下采样以减少数据量。
常见的 YUV 采样格式:
4:4:4: 每个像素都有完整的 Y、U、V 分量,无下采样
4:2:2: 水平方向色度减半,每两个像素共享一组 UV
4:2:0: 水平和垂直方向色度都减半,每四个像素共享一组 UV
WebRTC 内部主要使用 I420 格式 (YUV 4:2:0 planar):
I420 内存布局 (以 4x4 图像为例):
YYYY ← Y plane (4x4 = 16 bytes)
YYYY
YYYY
YYYY
UU ← U plane (2x2 = 4 bytes)
UU
VV ← V plane (2x2 = 4 bytes)
VV
总计: 16 + 4 + 4 = 24 bytes (相比 RGB 的 48 bytes 节省 50%)
RGB 与 YUV 的转换公式:
Y = 0.299 * R + 0.587 * G + 0.114 * B
Cb = -0.169 * R - 0.331 * G + 0.500 * B + 128
Cr = 0.500 * R - 0.419 * G - 0.081 * B + 128
视频压缩原理
未压缩的视频数据量巨大。以 1080p@30fps 为例:
1920 × 1080 × 1.5 (I420) × 30 × 8 = 746 Mbps
这远超网络传输能力,因此视频压缩是必不可少的。
帧内压缩 (Intra-frame)
帧内压缩只利用单帧内部的空间冗余,不依赖其他帧:
变换编码: 将空间域像素块通过 DCT 或整数变换转换到频率域
量化: 对变换系数进行量化,丢弃高频细节 (有损压缩的主要来源)
熵编码: 对量化后的系数进行 CABAC 或 CAVLC 无损压缩
帧内编码的帧称为 I 帧 (Intra Frame) 或关键帧 (Key Frame),可以独立解码。
帧间压缩 (Inter-frame)
帧间压缩利用相邻帧之间的时间冗余:
运动估计 (Motion Estimation): 在参考帧中搜索与当前块最匹配的区域
运动补偿 (Motion Compensation): 用运动向量和参考块预测当前块
残差编码: 只编码预测值与实际值的差异 (残差)
帧间编码的帧类型:
P 帧 (Predicted Frame): 参考前面的帧进行预测
B 帧 (Bi-predicted Frame): 参考前后两个方向的帧进行预测
I ← P ← P ← P ← I ← P ← P (无 B 帧, 低延迟)
I ← B → P ← B → P ← B → I (有 B 帧, 高压缩率)
在 WebRTC 实时通信中,通常 不使用 B 帧 以降低编码延迟。
WebRTC 中的视频编解码器
VP8: Google 开源,WebRTC 必须支持的编解码器
VP9: VP8 的继任者,压缩效率提升约 30%,支持 SVC
H.264/AVC: 最广泛使用的编解码器,硬件支持好
H.265/HEVC: 压缩效率比 H.264 提升约 50%,但专利问题限制了使用
AV1: 开源免专利费,压缩效率优秀,逐渐成为新标准
参考资料
Digital Video Processing - A. Murat Tekalp
WebRTC 支持的视频格式:
common_video/include/video_frame_buffer.h