帧间预测(Inter-frame Prediction)是视频编解码器利用相邻时间帧相似性的机制:当前块不直接保存完整像素,而是引用已经解码的参考帧中相似区域,再保存位移和残差。
它是 H.264(AVC)、H.265(HEVC) 等现代视频编码标准获得高压缩率的核心原因之一。
核心问题
视频中相邻帧往往变化很小。一个人从画面左侧移动到右侧时,物体纹理本身没有完全变,只是位置变了。如果每帧都完整保存,会重复存储大量信息。帧间预测把“这块像素像参考帧的哪一块”写入码流,再只保存预测不准的部分。
核心对象
| 对象 | 作用 |
|---|---|
| current block | 当前要编码或解码的图像块 |
| reference frame | 已解码、可被引用的过去或未来帧 |
| motion vector | 从当前块位置指向参考帧相似区域的位移 |
| prediction block | 按 motion vector 从参考帧取出的预测块 |
| residual block | 当前块和预测块之间的差值 |
| reference list | 编码标准维护的一组可引用帧 |
核心机制
最小模型可以写成:
prediction(x, y) = reference_frame(x + dx, y + dy)
residual(x, y) = current_frame(x, y) - prediction(x, y)(x, y)是当前块内某个像素位置。(dx, dy)是 motion vector,表示到参考帧中相似位置的位移。reference_frame(...)是参考帧中被取样的位置;实际标准可能允许半像素、四分之一像素插值,不一定正好落在整数像素上。prediction(...)是预测像素。residual(...)是预测误差,后续会被变换、量化和熵编码。
编码端通常要搜索参考帧,找出码率和误差综合最优的 motion vector。解码端不搜索,它只读取码流里已经保存的 motion vector 和残差,再按规则重建画面。
工程用途
- 大幅降低码率,尤其是摄像机固定、背景稳定或运动连续的视频。
- 通过 P 帧、B 帧和参考帧列表平衡压缩率、延迟和随机访问能力。
- 让监控、直播、视频会议和流媒体在有限带宽下可用。
边界与常见坑
- 帧间预测不是光流估计:它服务于压缩,motion vector 不一定等于真实物体运动。
- 解码端不做运动搜索:运动搜索是编码端高成本步骤;解码端执行的是码流指定的运动补偿。
- 参考链会传播错误:参考帧损坏、丢包或解码失败时,后续依赖它的帧也可能花屏。
- B 帧会增加延迟:引用未来帧可以提高压缩率,但会增加重排序和缓冲。
- 随机访问依赖关键帧:从任意 P/B 帧开始通常无法独立解码,需要前面的参考帧。