当前位置: 首页 > ai >正文

【音视频】VP8 与 VP9 技术详解及与 H.264 H.265 的对比

参考文章:https://blog.csdn.net/www_dong/article/details/147030466?ops_request_misc=&request_id=&biz_id=102&utm_term=VP8%E5%92%8CVP9&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-147030466.142v102pc_search_result_base6&spm=1018.2226.3001.4187

VP8 与 VP9 技术详解及与 H.264/H.265 的对比

在这里插入图片描述

第一部分:VP8 技术详解

VP8 是由原 On2 Technologies 开发、后被 Google 收购并开源的视频压缩标准,核心定位是免费替代 H.264,在 Web 实时通信和开源视频生态中应用广泛。

一、VP8 基础信息

项目说明
全称Video Processing 8
发布者On2 Technologies(2010 年被 Google 收购,后续由 Google 维护)
定位开源免费视频压缩标准,主打中低码率场景,直接竞争对手为 H.264(Baseline Profile)
核心应用场景1. WebRTC 实时视频通信(如 Zoom、浏览器视频通话);
2. HTML5 <video> 标签(封装为 WebM 格式);
3. FFmpeg、SRS 等开源流媒体框架;
4. YouTube 早期视频编码
开源实现libvpx(Google 官方维护,是 VP8/VP9/AV1 的核心编解码库)

二、VP8 编解码核心流程

VP8 采用 “基于块的混合视频编码框架”,与 H.264 思路相似,核心是通过 “预测 - 变换 - 量化 - 熵编码” 消除视频冗余,

具体步骤如下

  1. 帧分块:将每帧划分为固定大小的16x16 宏块(Macroblock),宏块可进一步拆分为 4x4、8x8 子块;

  2. 预测模式选择:对每个块选择 “帧内预测” 或 “帧间预测”:

    • 帧内预测(Intra):利用当前帧已解码的邻近像素(如水平、垂直方向)预测当前块值,支持 DC 预测、水平预测等基础模式;
    • 帧间预测(Inter):利用前一帧(Last 帧)、参考帧(Golden/AltRef 帧,最多 3 个参考帧)的块进行预测,支持1/4 像素精度的运动估计;
  3. 残差计算与变换:计算 “预测值” 与 “原始值” 的差值(残差),对残差使用4x4 或 16x16 DCT(离散余弦变换) 转换为频域系数;

  4. 量化:对频域系数进行量化(降低精度),通过调整量化参数(QP)平衡 “码率” 与 “画质”(QP 越大,压缩越强、画质越差);

  5. 熵编码:使用轻量级 Bool 编码器(Boolean Arithmetic Coding) 对量化后的系数和预测模式等语法元素进行压缩,输出最终比特流。

三、VP8 帧结构

VP8 的每一帧(Frame)由 “帧头” 和 “帧数据” 两部分组成,帧头区分 “关键帧” 和 “非关键帧”,结构如下:

1. 共通帧头(Frame Tag,3 字节)
0 1 2 3 4 5 6 7   8 9 10 11 12 13 14 15   16 17 18 19 20 21 22 23
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|I|P|  Version  |     Partition 0 Length (19 bits)   |
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+

所有帧(关键帧 / 非关键帧)的起始部分,包含解码器必需的控制信息:

比特位分配含义
I(1bit)关键帧标志:0 = 关键帧(I 帧,可独立解码),1 = 非关键帧(P 帧,需参考前帧)
P(1bit)显示允许标志:0 = 允许显示,1 = 不显示(极少使用,主要用于临时参考帧)
Version(3bit)编码器版本号(固定为 0,后续未更新)
Partition 0 Length(19bit)第一个分区(Partition 0)的长度(分区是帧数据的拆分单元)
2. 关键帧附加头(7 字节,仅关键帧有)

关键帧需携带完整图像元信息,在 3 字节共通帧头后追加7字节:

0x9D 0x01 0x2A  // Start code (固定标志)
2 字节: 宽度 + flags
2 字节: 高度 + flags
  • 固定起始码(3 字节):0x9D 0x01 0x2A(用于解码器识别关键帧);
  • 宽度 + 标志(2 字节):存储图像宽度(需按 16 像素对齐)及颜色空间标志;
  • 高度 + 标志(2 字节):存储图像高度(需按 16 像素对齐)及颜色空间标志。
3. 帧数据(Frame Partitions)

帧数据拆分为多个分区(Partition 0~N),分工明确:

[ Partition 0 ] [ Partition 1 ] [ Partition 2 ] ... [ Partition N ]
  • Partition 0:存储控制信息(预测模式、宏块类型、参考帧索引等),需完整接收才能解码后续分区;
  • Partition 1~N:存储宏块残差的频域系数(实际视频数据),可并行解码。
VP8 帧结构简化图示
VP8 Frame:
├── Frame Tag (3 bytes)
│   ├── Key Frame? (I bit)
│   └── Partition 0 Length
├── [If Key Frame]
│   ├── Start Code (0x9D012A)
│   ├── Width, Height
├── Partition 0 (mode, control info)
├── Partition 1+ (macroblock residuals)

四、VP8 核心技术特点

  1. 宏块与分块:固定 16x16 宏块,支持 4x4/8x8 子块,每个宏块最多 4 个运动矢量;
  2. 参考帧:最多支持 3 个参考帧(Last:最近帧、Golden:高质量参考帧、AltRef:备用参考帧);
  3. 熵编码:采用轻量级 Bool 编码,比 H.264 的 CAVLC 更高效,但复杂度低于 CABAC;
  4. 去块滤波:内置环路去块滤波器,消除宏块边界伪影(Blocking Artifacts);
  5. 局限性:不支持 B 帧、不支持可伸缩编码(SVC)、仅支持 8-bit YUV 4:2:0 色深(无法满足 HDR 需求)。
1. 编码命令(vpxenc)

将 Y4M 格式视频编码为 VP8(WebM 封装):

# 基础编码:比特率1000kbps,4线程
vpxenc input.y4m --codec=vp8 --output=output.webm --threads=4 --target-bitrate=1000
# 高质量编码:启用2遍编码(RDO优化)
vpxenc input.y4m --codec=vp8 --passes=2 --pass=1 --target-bitrate=1500 --output=/dev/null
vpxenc input.y4m --codec=vp8 --passes=2 --pass=2 --target-bitrate=1500 --output=high_quality.webm
2. 解码命令(vpxdec)

解码 VP8 视频并输出 Y4M 原始格式:

vpxdec output.webm --output-decoded=decoded.y4m

第二部分:VP9 技术详解

VP9 是 Google 在 2013 年发布的 VP8 升级版,核心定位是开源替代 H.265(HEVC),在压缩效率、功能扩展性上全面超越 VP8,成为 YouTube、浏览器等场景的主流编码格式

一、VP9 基础信息

项目说明
发布者Google(2013 年开源,基于 VP8 演进)
定位高效开源视频压缩标准,主打中高码率场景,竞争对手为 H.265(Main Profile)
核心应用场景1. YouTube 主流编码(超过 70% 的视频采用 VP9);
2. Chrome/Firefox/Edge/Android 原生支持;
3. WebRTC 高清视频(4K/8K 场景);
4. 开源 HDR 视频(封装为 WebM/Matroska)
核心优势比 VP8 压缩效率提升 30%-50%,比 H.264 提升 50% 以上,且完全开源免费

二、VP9 与 VP8 的核心特性对比

VP9 在 VP8 基础上进行了全方位升级,关键差异如下:

特性VP8VP9
宏块 / 超级块固定 16x16 宏块64x64 超级块(可递归划分为 4x4 子块)
参考帧数量最多 3 帧(Last/Golden/AltRef)最多 8 帧(支持双向预测)
运动估计精度1/4 像素1/8 像素(提升运动预测准确性)
分块模式仅对称分块(4x4/8x8/16x16)支持 10 种模式(含非对称分块,如 32x16)
变换类型仅 DCT(4x4/16x16)DCT+ADST(适应纹理细节,4x4/8x8/16x16/32x32/64x64)
色深支持仅 8-bit YUV 4:2:08/10/12-bit,支持 BT.2020(HDR)
并行解码有限支持(基于宏块)Tile-based 并行(按列分割,多线程友好)
可伸缩编码(SVC)不支持支持(空间 / 时间 / 质量伸缩)
熵编码轻量级 Bool 编码上下文自适应算术编码(类似 H.265 的 CABAC)

三、VP9 帧结构

VP9 帧结构相比 VP8 更灵活,分为 “非压缩帧头”“压缩帧头”“Tile 数据” 三部分,支持关键帧(I 帧)、非关键帧(P 帧 / B 帧):

1. 非压缩帧头(Uncompressed Header)

不经过熵编码,解码器可直接解析,包含全局控制信息:

核心字段含义
Frame Marker(2bit)固定为0b10(VP9 帧的标识,避免与其他格式混淆)
Profile(2bit)编码配置等级:0=8-bit 4:2:0;1=8-bit 4:2:2/4:4:4;2=10/12-bit 4:2:0;3=10/12-bit 4:2:2/4:4:4
Frame Type(1bit)0 = 关键帧(I 帧),1 = 非关键帧(P/B 帧)
宽高信息(32bit×2)编码宽高 + 显示宽高(支持 “编码宽高≠显示宽高”,适应不同屏幕)
Tile InfoTile 划分信息(行数 / 列数,如 “2 行 4 列” 表示 8 个 Tile)
滤波 / 量化参数环路滤波强度、量化参数(QP)、分段控制(Segmentation)参数
2. 压缩帧头(Compressed Header)

经过熵编码,包含块级控制信息:

  • 预测模式(帧内 / 帧间);
  • 块划分方式(64x64→4x4 的递归分块);
  • 运动矢量参考索引、运动矢量预测(MVP);
  • 变换大小(如 4x4/8x8)与变换类型(DCT/ADST)。
3. Tile 数据(Tile Data)

VP9 的核心创新之一,将图像按列分割为多个Tile(瓦片),是实际经过编码的视频图像像素信息,每个 Tile 可独立解码(多线程并行),包含:

  • 宏块残差的频域系数;
  • 熵编码的 Token(语法元素);
  • 上下文概率表更新信息。
VP9 帧结构简化图示
VP9 Frame
├─ 非压缩帧头(Uncompressed Header)
│  ├─ Frame Marker(0b10)、Profile、Frame Type
│  ├─ 宽高/显示宽高、Tile划分
│  └─ 滤波/量化/分段参数
├─ 压缩帧头(Compressed Header,熵编码)
│  ├─ 预测模式、块划分方式
│  └─ 运动矢量、变换配置
└─ Tile数据(Tile Data)├─ Tile 0:独立解码单元(含残差+Token)├─ Tile 1:...└─ Tile N:...

四、VP9 核心技术创新

1. 超级块与灵活分块
  • 超级块(Superblock):固定 64x64 像素,替代 VP8 的 16x16 宏块,减少块边界数量;
  • 递归分块:超级块可递归划分为 32x32、16x16、8x8、4x4,支持非对称分块(如 32x16、16x32),对 “纹理复杂区域(小块)” 和 “平滑背景(大块)” 自适应优化。
2. 增强型预测
  • 帧内预测:支持 10 种模式(DC、水平、垂直、6 种方向模式),覆盖更多纹理方向;
  • 帧间预测:支持 8 个参考帧、双向预测(B 帧)、全局运动建模(如镜头平移场景),1/8 像素精度运动估计(比 VP8 更细腻)。
3. 自适应变换与量化
  • 混合变换:4x4/8x8 块支持 DCT(平滑区域)和 ADST(纹理边缘区域),32x32/64x64 块仅用 DCT;
  • 分段量化(Segmentation):将图像划分为多个 “分段(Segment)”,每个分段可设置独立 QP(如人脸区域用低 QP 保画质,背景用高 QP 降码率)。
4. Tile-based 并行处理
  • 将图像按列分割为 Tile(如 1920x1080 图像分为 “2 行 4 列” 8 个 Tile);
  • 每个 Tile 的编码 / 解码完全独立,支持多线程并行(如 8 核 CPU 可同时处理 8 个 Tile),大幅提升实时编码 / 解码速度。
5. HDR 支持
  • 支持 10/12-bit 色深、BT.2020 色域(VP8 仅 8-bit BT.601);
  • 配合 PQ(感知量化)或 HLG(混合对数伽马)传输函数,可编码 HDR 视频(如 YouTube 的 4K HDR 内容)。

五、VP9 实用工具(基于 libvpx)

1. 编码命令(vpxenc)

编码 4K HDR 视频为 VP9(WebM 封装):

# 4K HDR编码:10-bit,BT.2020,比特率8000kbps
vpxenc input_4k_10bit.y4m --codec=vp9 --profile=2 --bit-depth=10 --color-space=bt2020 --target-bitrate=8000 --threads=8 --output=4k_hdr.webm
# 可伸缩编码(SVC):2层(720p基础层+1080p增强层)
vpxenc input.y4m --codec=vp9 --svc-temporal-layers=1 --svc-spatial-layers=2 --spatial-layer-config=0:720p:3000,1:1080p:6000 --output=svc_stream.webm
2. 解码命令(vpxdec)

解码 VP9 HDR 视频并输出 10-bit Y4M:

vpxdec 4k_hdr.webm --output-decoded=decoded_10bit.y4m --bit-depth=10

第三部分:VP8/VP9 与 H.264/H.265 的全面对比

VP8/VP9 与 H.264/H.265(HEVC)是当前主流视频编码标准,核心差异集中在授权模式、压缩效率、复杂度、硬件支持四大维度,以下从关键指标展开对比:

一、核心指标对比表

对比维度VP8VP9H.264(AVC)H.265(HEVC)
授权模式开源免费(无专利费)开源免费(Google 承诺永久免费)专利池授权(MPEG LA 等,需支付 royalties)专利池授权(多联盟,费用更高、复杂度高)
压缩效率低(比 H.264 低 10%-20%)高(比 H.264 高 50%,比 H.265 低 10%-20%)中(基准线,广泛用于低码率场景)极高(比 H.264 高 60%+,4K/8K 首选)
编码复杂度低(适合移动端 / 嵌入式)中高(比 H.264 高 3-5 倍,比 H.265 低)低 - 中(Baseline 复杂度低,High 复杂度高)高(比 H.264 高 5-10 倍,硬件依赖强)
解码复杂度低(可软件实时解码)中(Tile 并行降低复杂度,软件可解 1080p)低(硬件支持全覆盖,软件可解 4K)中高(需硬件加速,软件解 4K 较吃力)
硬件支持一般(中高端芯片支持,低端依赖软件)中(2018 年后芯片支持,如骁龙 845、天玑 1000+)全覆盖(2010 年后芯片均支持)中高(2015 年后中高端芯片支持,低端缺失)
参考帧数量3 帧8 帧16 帧(High Profile)32 帧(Main 10 Profile)
分块灵活性低(16x16 宏块 + 对称子块)中(64x64 超级块 + 递归分块)中(16x16 宏块 + PU 分块)高(64x64 CTU+CU/PU/TU 灵活分块)
色深 / 色域8-bit BT.601 4:2:08/10/12-bit BT.601/BT.2020 4:2:0/4:2:2/4:4:48-bit BT.601/BT.709 4:2:0/4:2:2/4:4:48/10/12/14-bit BT.709/BT.2020 全采样
可伸缩编码(SVC)不支持支持(空间 / 时间 / 质量)支持(需扩展 Profile,如 SVC Profile)支持(原生支持,如 SHVC)
HDR 支持不支持支持(10/12-bit+BT.2020+PQ/HLG)不支持(需扩展,如 H.264 HDR,极少用)支持(原生支持,Main 10 Profile)
主流应用场景WebRTC 低码率通话、低端设备视频YouTube、WebRTC 高清通话、开源 HDR 视频直播(RTMP)、安防监控、移动端视频4K/8K 电视、蓝光、专业视频制作、HDR 视频

二、关键差异深度解析

1. 授权模式:开源免费 vs 专利收费
  • VP8/VP9:Google 通过收购 On2 Technologies 获得核心专利,并承诺 “永久开源免费”,无任何专利使用费,适合中小企业、开源项目(如 FFmpeg、WebRTC);
  • H.264/H.265:由 MPEG LA、HEVC Advance 等多个专利联盟管理,需按 “设备数量” 或 “视频流量” 支付 royalties(如 H.265 每台设备约 0.2 美元,年营收超 1000 万美元企业需额外缴费),大型企业(如苹果、三星)可承受,但中小企业和开源项目成本较高。
2. 压缩效率:H.265 > VP9 > H.264 > VP8
  • 相同画质下,码率对比(以 1080p 30fps 为例):
    • H.265:1500-3000 kbps;
    • VP9:1800-3500 kbps;
    • H.264:3000-6000 kbps;
    • VP8:3500-7000 kbps;
  • 结论:H.265 压缩效率最高(适合带宽受限场景,如 4K 流媒体),VP9 次之(开源场景最优),H.264 兼容性最好(低码率场景仍不可替代),VP8 逐渐被 VP9 淘汰。
3. 硬件支持:H.264 > H.265 > VP9 > VP8
  • H.264:硬件支持 “全覆盖”,从低端物联网设备(如 ESP32-CAM)到高端服务器均支持,软件解码也可轻松处理 4K;
  • H.265:中高端设备支持(如 2015 年后的电视、2018 年后的手机),低端设备(如老年机、廉价摄像头)仍不支持,需依赖软件解码(复杂度高);
  • VP9:2018 年后的中高端芯片支持(如骁龙 845、苹果 A12、华为麒麟 980),低端设备需软件解码(1080p 可实时,4K 较吃力);
  • VP8:仅中高端设备硬件支持,低端设备软件解码(720p 可实时,1080p 较卡顿),逐渐被 VP9 替代。
4. 应用场景选择建议
  • 选 H.264:需兼容低端设备(如安防监控、老年机)、直播场景(RTMP 协议主流编码)、低复杂度场景(嵌入式设备);
  • 选 H.265:4K/8K 视频(如电视、蓝光)、HDR 内容、带宽受限场景(如 5G 移动流媒体),且企业可承担专利费;
  • 选 VP9:开源项目(如 FFmpeg、WebRTC)、YouTube 等免费平台、需避免专利费的中小企业、HDR 视频(开源场景最优);
  • 选 VP8:仅用于旧设备兼容(如 2015 年前的 WebRTC 设备),新项目优先 VP9。

三、未来趋势

  • VP9 的延续:Google 已推出 VP9 的升级版 AV1(2018 年发布),压缩效率比 VP9 高 30%,比 H.265 高 10%,且开源免费,未来将逐步替代 VP9;
  • H.265 的挑战:面临 AV1 的竞争,专利费复杂问题导致中小企业转向开源编码,但其硬件支持仍领先,短期内仍将在专业视频领域占据主导;
  • H.264 的生命力:兼容性极强,短期内不会被淘汰,仍将是低码率、低端设备的主流选择。
http://www.xdnf.cn/news/19562.html

相关文章:

  • 扩散模型驱动的智能设计与制造:下一场工业革命?
  • idea创建类时自动添加文档注释
  • 【技术教程】如何将文档编辑器集成至基于Node.js的网页应用程序中
  • ESLint 相关
  • 单北斗GNSS位移监测技术解析
  • 网络通信IP细节
  • 企业级架构师综合能力项目案例二(项目性能优化方案JVM+数据库+缓存+代码JUC+消息中间件架构+服务熔断降级)
  • 想找Gamma的平替?这几款AI PPT工具值得试试
  • 设计模式:命令模式(Command Pattern)
  • 从 “容器保姆” 到 “云原生王者”:K8s 全方位指南
  • 并发编程——13 线程池ThreadPoolExecutor实战及其原理分析
  • 顶级科学家的AI使用指南:从工具到合作伙伴
  • 华清远见25072班I/O学习day3
  • Redis分层缓存
  • DELPHI 利用OpenSSL实现加解密,证书(X.509)等功能
  • 犀牛派A1上使用Faster Whisper完成音频转文字
  • 哈尔滨云前沿服务器托管与租用服务
  • 科普:为什么在开发板上运行 Qt 程序时需要在命令后加 -platform linuxfb
  • Linux文本处理工具完全指南:cut、sort、uniq、tr、sed与awk详解
  • odps链接表并预测出现程序阻塞导致任务未完成问题排查
  • 信创服务器总死机原因及解决办法
  • WPF曲线自定义控件 - CurveHelper
  • Java-Spring入门指南(二)利用IDEA手把手教你如何创建第一个Spring系统
  • ChatDOC工具测评:AI驱动PDF/Word文档处理,支持敏感内容隐私保护与表格提取分析
  • Memento:基于记忆无需微调即可让大语言模型智能体持续学习的框架
  • keycloak中对接oidc协议时设置prompt=login
  • lesson52:CSS进阶指南:雪碧图与边框技术的创新应用
  • 公司电脑监控软件应该怎么选择?五款超实用的公司电脑监控软件推荐
  • 高性能多线程 PHP 图像处理库 PHP-VIPS:颠覆你对图像处理的认知
  • 从零开始学习C#上位机开发学习进阶路线,窥探工业自动化和物联网应用