5.1 帧间预测概述
作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
引言
帧间预测(Inter Prediction)是AV1视频解码中的核心预测技术,通过利用已解码的参考帧来预测当前块的像素值。与帧内预测不同,帧间预测利用时间相关性,能够更有效地压缩视频序列中的冗余信息。
源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning
帧间预测概述
功能说明
帧间预测通过分析参考帧中对应位置的像素,利用运动向量(Motion Vector)来预测当前块的像素值。AV1支持多种帧间预测模式,包括单参考预测、复合预测、以及各种运动补偿模式。
应用场景
-
非关键帧(INTER_FRAME)
- 大部分块使用帧间预测
is_inter = 1
-
Skip模式
- 块的运动向量和残差都为零
- 直接使用参考帧预测
-
复合预测
- 使用两个参考帧进行加权组合
- 提高预测精度
预测模式类型
AV1支持以下帧间预测模式:
- 单参考预测(Single Reference):使用一个参考帧
- 复合预测(Compound Prediction):使用两个参考帧进行加权组合
- 运动模式:
- SIMPLE:简单运动补偿
- OBMC:重叠块运动补偿
- LOCALWARP:局部warp变换
- GLOBALWARP:全局warp变换
- Inter-Intra混合预测:结合帧间和帧内预测
预测流程图
帧间预测主流程
graph TD
A[帧间预测开始<br/>predict_inter] --> B[确定是否为复合预测<br/>isCompound]
B --> C[计算舍入变量]
C --> D{运动模式}
D -->|LOCALWARP| E[局部Warp估计]
D -->|其他| F[跳过Warp估计]
E --> G[初始化refList=0]
F --> G
G --> H[循环处理参考帧]
H --> I[获取参考帧索引]
I --> J{使用全局Warp?}
J -->|是| K[设置全局Warp参数]
J -->|否| L[跳过全局Warp]
K --> M[运动向量缩放]
L --> M
M --> N{使用Warp?}
N -->|是| O[块Warp预测]
N -->|否| P[块间预测]
O --> Q[存储预测]
P --> Q
Q --> R{复合预测?}
R -->|是且refList=0| H
R -->|否| S[复合预测混合]
S --> T{运动模式}
T -->|OBMC| U[重叠块运动补偿]
T -->|其他| V[帧间预测完成]
U --> V
style A fill:#e1f5ff
style N fill:#fff9c4
style R fill:#fff9c4
style V fill:#c8e6c9
关键数据结构
TileGroup中的帧间预测相关字段
class TileGroup:
# 参考帧
RefFrame: List[int] # 参考帧索引 [2]
# 运动向量
Mvs: List[List[List]] # 运动向量 [candRow][candCol][2]
PredMv: List # 预测运动向量 [2]
# 模式信息
YMode: int # Y模式
motion_mode: int # 运动模式
compound_type: int # 复合类型
# Inter-Intra
IsInterIntra: int # 是否使用Inter-Intra
interintra_mode: int # Inter-Intra模式
# 插值滤波器
interp_filter: List[int] # 插值滤波器 [2]
# MV栈
RefStackMv: List # MV栈
RefMvIdx: int # 参考MV索引
与解码流程的集成
在非关键帧中的调用
Tile解码
→ 解码块划分
→ 解码is_inter标志
→ 如果is_inter=1:
→ 解码帧间块模式信息
→ 解码参考帧
→ 构建MV栈
→ 解码Y模式
→ 分配运动向量
→ 解码运动模式
→ 解码复合类型
→ 解码插值滤波器
→ 解码变换信息
→ 残差解码
→ 变换块解码
→ 帧间预测(predict_inter)
→ 解码系数
→ 重建
总结
帧间预测是AV1压缩效率的重要来源,通过充分利用时间相关性,有效减少需要编码的残差信息。AV1的帧间预测是一个复杂的多模式预测系统,包括多种参考模式、运动模式、复合类型和高质量插值技术。
参考资源:
- AV1规范文档
- 源码实现: GitHub - av1_learning
- 预测实现:
src/reconstruction/prediction.py - Tile解码:
src/tile/tile_group.py - MV栈构建:
src/mode/find_mv_stack.py
- 预测实现:
下一篇: 参考帧解码

浙公网安备 33010602011771号