5.1 帧间预测概述

作者:chai51
出处:https://www.cnblogs.com/chai51
版权:本文版权归作者和博客园共有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任

引言

帧间预测(Inter Prediction)是AV1视频解码中的核心预测技术,通过利用已解码的参考帧来预测当前块的像素值。与帧内预测不同,帧间预测利用时间相关性,能够更有效地压缩视频序列中的冗余信息。

源码说明: 本文档基于作者自己编写的AV1解码器Python实现,所有代码示例和实现细节均来自实际可运行的源码。源码仓库:GitHub - av1_learning


帧间预测概述

功能说明

帧间预测通过分析参考帧中对应位置的像素,利用运动向量(Motion Vector)来预测当前块的像素值。AV1支持多种帧间预测模式,包括单参考预测、复合预测、以及各种运动补偿模式。

应用场景

  1. 非关键帧(INTER_FRAME)

    • 大部分块使用帧间预测
    • is_inter = 1
  2. Skip模式

    • 块的运动向量和残差都为零
    • 直接使用参考帧预测
  3. 复合预测

    • 使用两个参考帧进行加权组合
    • 提高预测精度

预测模式类型

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的帧间预测是一个复杂的多模式预测系统,包括多种参考模式、运动模式、复合类型和高质量插值技术。


参考资源:

下一篇: 参考帧解码

posted @ 2026-01-10 07:51  chai51  阅读(0)  评论(0)    收藏  举报