深入了解 VP8

article/2025/9/7 19:37:07

部分翻译:http://x264dev.multimedia.cx/?p=377

译者:delectate

  • 问题一:vp8到底怎么样?

难道他真的比x264拥有更高的压缩比率,是个优秀的编码器吗?他真的比h264优秀吗?似乎On2自己都羞于承认…拿vp7举例,On2宣称vp7比h264快15%,但事实是编码视频速度既不快,视频质量也不高。On2曾经把vp3开源,似乎想借助社区的力量debug,最终theora上当……他们花了6年时间,结果做出来的还是个鸡肋……

  • 问题二:vp8真的没有专利问题吗?

这个东西,还是google说了算……微软几年前发布VC-1,然后说没有专利问题……但是几个月后,就有众多公司认领了专利并成立了专利池(指几家公司把各自的专利放在一起,组成一个”池”。其他人如果要使用VC-1,就须向”池”的管理公司申请许可,一旦获得了许可,就可以使用”池”中的所有专利。)

  • 问题三:vp8的代码情况如何

首先你要知道:一个很好的编码器,可能是基于一个很烂的标准(divx?xvid?lol);而一个很好的标准,也可能会出现n多很烂的编码程序(h264 vs coreavc?不知道耶)。

vp8的文档真的很烂,很多细节要不就是没有文字说明,要不就是拿一大堆c代码来填补空白。真的好痛苦……

我一直认为H.264的规格写得太啰嗦,但和vp8相比,至少他是精确而详细的,至少不会杀伤我这么多脑细胞。如果只靠vp8的这份文档,我想我死也写不出来vp8的解码器……(莫非他们就是一行一行读h264的文档然后写的ffh264解码器?牛!)

不吐槽了,把视线收回来,看vp8。一般处理视频的步骤都是:

编码:预测 -> 变换+量化处理 -> 熵编码 -> 环路过滤器

解码:熵编码 -> 预测 -> 反量化处理+变幻 -> 环路过滤器

  • p帧

就是通过当前帧已有的部分预测其他区块的内容。可以是在当前帧进行,也可以通过运动补偿的方式在帧间进行。

  • 帧内预测

帧内预测是用来编码帧间不同,在空间域上进行的预测编码算法,可以除去相邻块之间的空间冗余度,取得更为有效的压缩。

vp8的帧内预测基本上都是照抄h264的。”subblock”几乎和h264一样(他们竟然用了同样的名字),还有h264的4×4模式……whole block预测也基本上一样使用16×16模式。色度预测模式也几乎没有区别,所以不可能拥有比h264更出色的效果了。但是值得一提的是,他们用TM_PRED替代了planar预测模式。在预测方式上看起来有些不同,但是实际上h264都提供了相似的实现方法。

所以我对vp8有点失望。虽然说h264的预测功能的确不错,但是这也是7年的老物了……需要改进,所以我真的希望类似real这样的公司赶紧灭亡吧,一个存在了十几年而从来没有任何改进的格式(rm,rmvb)……我希望on2能做一些更有创造性的工作,而不是照搬h264的东西,因为h264的专利问题就是一个定时。h264的帧内预测可是有专利的,真不知道on2怎么想的,我可不认为on2改个名字就能蒙混过关。

帧内预测对决:大部份照抄h264,甚至有的连名字都没改……但是效果貌似还不如h264。

  • 帧间预测:

帧内预测主要用在去除空间冗余上而帧间预测则主要用在去除时间冗余上。运动估计就是在参考帧中寻找与当前编码宏块最匹配的宏块,而运动补偿就是计算二者的差值。帧间预测主要由两个部分组成:参考帧和运动矢量。vp8支持3中参考帧:p帧,g帧(golden fream)和alt ref帧。运动矢量上,vp8支持比h264更多的可变大小区块,次像素精度上,他支持四分之一像素和6-tap插值过滤。简而言之就是:

  • vp8参考帧:3
  • h264:16
  • vp8支持区块类型:6×16, 16×8, 8×16, 8×8, 4×4
  • h264:16×16, 16×8, 8×16, 但是还有更灵活的子区块:例如 8×8 可以被分为 8×8, 8×4, 4×8, 或者 4×4
  • VP8 chroma MV derivation: 4×4 色度均值处理 (有点类似于 MPEG-4 ASP)
  • h264:直接使用,没有什么处理(没有均值处理,所以视觉效果比较好)
  • H.264 拥有b帧和加权预测,但是vp8却没有

h264拥有更为灵活的架构,所以8×8并不常用,所以vp8弃用也没有太多影响。但是色度处理上,h264因为没有均值,所以拥有比vp8更好地效果,但是理论上它需要更多的时间来编码。但是实际中差别并不是很明显。

vp8的插值过滤器似乎优秀一些,但是他是以牺牲性能为代价的。竟然还用高达6的色度,真搞清楚他们在干什么……这只是无谓的浪费。

vp8没有使用b帧是个致命的缺陷。使用b帧可以提高10-20%压缩率并加快编码速度,但是on2在他们所有的视频编码格式中都没有应用b帧,但是即使如此也有可能引起专利问题。

帧间编码对决:部分与h264相似,但是架构上不如h264,虽然使用了更为优秀的过滤器,但是没有使用b帧,所以会严重导致压缩率降低。

  • 变换与量化编码

总体来说,VP8肯定比H.264弱。一个8 × 8变换缺乏细节,特别是在高的分辨率。很多转换也不是必要的,却在进行。所以比较慢。由于专利,变换也有可能产生纠纷。一个良好的新思路是采用 分层直流转换间块。

转换:类似H.264标准。慢一点,再稍微更准确的4 × 4变换。改进直流变换亮度(但色度不是)。没有8 × 8变换。总体而言,更糟。
量化方面,核心过程基本上和所有的MPEG 视频格式一样,所以VP8也不例外。一个视频格式,如果想体现自己与众不同,那么他们主要的方式是通过改变量化尺度因子。方法有两种,主要是:基础帧的偏移量,宏块级的偏移,对于视频来说整体适合或者部分适合。 VP8主要使用前者,但是远远低于H.264灵活的自定义量化矩阵,它允许调整亮度量化直流,交流亮度,色度直流,等等。后者(宏块级量化选择)可以在理论实现“图像分割”功能,虽然很hack,但是效果嘛……
vp8的致命错误是已经不使用宏块级量化作为其核心功能。该算法利用宏块级量化的优势被称为“自适应量化”,是绝对至关重要的。x264使用 执行方差的自适应量化(算法对比: 使用前, 使用后)后效果明显,至今仍然是x264视觉质量收益提供支持。
对量化对决:在成为杀手级视频格式前,缺少综合自适应量化将是绝对错误的。总体而言,非常糟糕。
  • 熵编码
根据信息论的原理,可以找到最佳数据压缩编码的方法,数据压缩的理论极限是信息熵。如果要求编码过程中不丢失信息量,即要求保存信息熵,这种信息保持编码 叫熵编码,是根据消息出现概率的分布特性而进行的,是无损数据压缩编码。
在视频编码中,熵编码把一系列用来表示视频序列的元素符号转变为 一个用来传输或是存储的压缩码流.输入的符号可能包括量化的变换系数(像上面所说的运行级或零树),运动向量(对于每个运动补偿块的向量值x和y),标记 (在序列中用来表示重同步位的点),头(宏块头,图象头,序列的头等)以及附加信息(对于正确解码来说不重要的信息).
VP8使用的熵编码器有点类似于H.264,但有几个关键处又有所不同。首先,它忽略了范围/概率乘法表。第二,它是完全非自适应的:与H.264相比,它能够解码后的每一帧,概率值保持不变。
这种做法并不奇怪; VP5和VP6(也许是VP7)也用的非自适应算术编码器。更重要的是,我之所以对这个问题感兴趣,是因为它使自适应会增加单一的表查找来的算术解码功能 ——对性能的影响很小。

vp8这个方案的缺点是,像VP3/Theora(虽然没有那么严重),它偏向于以重新使用以前的运动矢量。这是相当危险的,因为正如开发员们最近发现,一些情况下,即选取一个运动矢量编码器是不是“真实”的运动矢量,以略去潜在的负面的视觉影响。在效率方面,我不知道是VP8比H.264的预测是否能做到更好。

还有一点要注意的是VP8文件的结构。这个有点像VP3/Theora,涉及组件的每个码流的语法元素。这个不幸的是,它是硬件加速的噩梦,需要极大提高存储效能以及带宽。
熵编码对决:它在某些方面出现好转,在某些方面恶化,实在怪异。我的直觉是,它对H.264非自适应算术编码有一些轻微的优势,但是硬件加速方面,真是杯具。
  • 环路滤波器

通常是在编码/解码帧后使用,通常是为了消除基于DCT的视频格式的方块现象。
VP8的环路滤波器与H.264依然相似,但有一些区别。首先,它有两种模式(即可以由编码器选择):快速模式和普通模式。快速模式比H.264 的简单,而正常模式较为复杂。第二,宏块之间的滤波,VP8的过滤器比h264的宏块滤波器有更广泛的作用范围,h264的则仅限于边缘。
环路滤波器对比:绝对比H.264的差,因缺乏自动适应性。虽然选择快速模式可以加快速度,但是成像结果惨不忍睹,十分模糊。
  • 附录A:

总体而言,很明显,VP8明显比H.264差。上面提到的主要弱点是缺乏适当的自适应量化,没有B帧,缺少8 × 8变换,以及非自适应性环路滤波器。其实我真的希望VP8能超越H.264,VC – 1或者H.264 Baseline Profile。当然,vp8现在性能明显优于theora和Dirac。
解码的速度我不太清楚条件,目前大约是FFmpeg的H.264解码器的16%(比自称最先进的CoreAVC慢25%-35%) 。当然,全面优化后能达到多少还难以预料,但是目前的确需要大幅优化。
最后,还是专利问题。 VP8与H.264太相似了:一个精辟的,有些不太准确的描述说VP8将是基于H.264 Baseline Profile的最好的编码器。虽然我不精通法律,但是我不相信他们能够做到这点。即使VC – 1的不同于VP8和H.264,但是VC – 1也无法从软件专利这个魔掌中逃脱。
如果google运气够好,专利之战能够胜利,也许能给theora带来一丝曙光。

对比:
VP8 (On2 VP8 rc8)(source)
H.264 (Recent x264)(source)
H.264 Baseline Profile (Recent x264)(source)
Theora (Recent ptalabvorm nightly)(source)
Dirac (Schroedinger 1.0.9)(source)
VC-1 (Microsoft VC-1 SDK)(source)
MPEG-4 ASP (Xvid 1.2.2)(source)

 

  • 附录B:

谷歌之所以选择Matroska作为封装格式,这是不足为奇的:的Matroska是目前使用最广泛使用的视频封装格式之一,也许MP4(又名ISOmedia)可能是一个更好的设计格式,但不是很灵活,而且是一个封闭格式。

另一个优点是Matroska可用于视频流:虽然不常用,它的确可以。请注意,我不是说渐进式下载(a’la YouTube)的,而是实际的流,其中编码器是实时工作的。这样做的唯一方法是用MP4通过发送视频的“片段”,非常hacky的方法。

真搞不懂为什么google非要给 Matroska 起 WebM 这么个愚蠢的名字

音频选择Vorbis格式,是明智之举,没有专利问题,而且性能优秀。而且libvorbis是最好的开源通用音频编码器。虽然AAC是在低的比特率表现较好,但是没有好的开源的AAC编码器:FAAC的FFmpeg的AAC编码器是更糟。此外,FAAC分部是不是免费软件,它包含了非免费编码器的代码。因为专利的问题,估计google也别无可选……

  • 参考资料:

http://x264dev.multimedia.cx/?p=377

http://www.ruanyifeng.com/blog/2010/05/the_first_view_of_vp8.html

http://baike.baidu.com/view/587027.htm

http://hi.baidu.com/hnu_lina/blog/item/f13a59b1fd7eb9520823023e.html

http://zh.wikipedia.org/zh/%E7%86%B5%E7%BC%96%E7%A0%81

 

原文地址:https://www.deleak.com/blog/2010/05/22/the-first-in-depth-technical-analysis-of-vp8/


http://chatgpt.dhexx.cn/article/4GdqP6vr.shtml

相关文章

VP8的前途与使命

文 / 金尹 VP8是视频压缩解决方案厂商On2推出的视频压缩格式。今年年初,Google完成了对On2的收购,随即开放了VP8视频编码技术源代码并免费提供给开发者使用。但业界对此一直褒贬不一,本文作者从多个角度进行阐述,对VP8的前途与发展…

如何使用Win10剪切板

几乎所有接触电脑的人都会使用CtrlC和CtrlV,但是每次CtrlC只能复制一次,并且会覆盖之前已经复制的内容。如果需要多次复制不同内容,那就操作多次。如果需要切换页面进行复制,特别不方便。其实,Win10有内置剪切板&#…

windows剪切板的历史记录

windows剪切板的历史记录 最近遇到一件比较坑的事情。当然可能也是我本人粗心大意了吧。但是这种事情难免要发生。比如说你要移动一个比较重要的东西,然后按了ctrlx,但是之间因为别的事情耽搁了一下,而自己的重要的东西还放在剪切板里面&…

win10如何查看剪切板内容?

cv大法我们经常用,但如果复制了新的内容但又想粘贴使用上次复制的内容怎么办? 其实复制新的内容并没有覆盖掉之前复制的内容,可以使用CtrlV快捷键打开剪切板,在剪切板里可以找到以前复制过的内容。 注意:这里的剪切板…

windows 剪贴板监控

迅雷下载或者旋风下载都有一个很有意思的剪贴板监控功能,当你打开剪贴板监控时,如果你复制了一个下载的URL,这两个程序都会弹出来下载框来让你去下载,显得很智能,昨天发现灵格斯词霸也有个剪贴板取词功能。 上个月写了…

Win10清空剪切板内容的方法介绍

剪切板是用户最经常使用的系统功能,可以对想要操作的内容进行临时缓存,但是长时间对里面的内容不清理的话,就会造成系统卡顿。下面小编就给大家介绍一下Win10清空剪切板内容的方法。 操作过程: 1、在Win10桌面空白处点击鼠标右键&…

WIN10剪切板打不开无法调用win+v无法打开

1.确认设置——>剪切板设置——>剪切板打开 2.第一步打开之后仍然无法调用尝试第二步 管理员运行cmd——>输入以下命令 DISM /Online /Add-Capability /CapabilityName:Windows.Client.ShellComponents~~~~0.0.1.0 等待安装完毕——>winv调用成功!

Windows 远程桌面剪切板失效

环境: Windows Server 2019 Windows 10 问题描述: 从本机复制文本或图片,无法粘贴到远程主机,从远程主机无法复制文本或图片到当前本地主机,远程桌面剪切板失效 解决方案: 1.在远程主机打开任务管理器,找到rdpcli…

windows如何查看剪贴板历史

改论文的时候,总是因为复制粘贴后找不到上一个复制而烦恼,每次都要alttab来回切换 甚是烦恼,无意间找到访问粘贴板的快捷键分享一下。 WinV 第一步,打开开始菜单栏点击设置 第二步、选择系统设置 第三步、下拉选择剪贴板 第四步…

windows如何修改复制粘贴与剪切快捷键?

背景介绍 在用惯了Mac OS后,发现其复制粘贴的默认快捷键确实好用windows上我们都值是ctrl c / v / x 来实现但是大家在日常使用过程中不觉得ctrl 这几个键手指头按的很费劲吗?究其根本原因还是离的有点远了而我更喜欢用简谱上类似Mac OS 的的位置 Alt …

Windows10剪贴板的使用

在windows10操作系统中,有一个非常好用的软件——剪贴板。使用快捷键(winv)可打开剪贴板。 在剪贴板中历史记录可最多存放25条,容量限制大小为每项4MB,共25个复制条目,先进先出。(2018年10月更…

如何清空windows的系统剪贴板

有的时候我们需要模拟清空系统剪贴板的场景可以如下操作: windows11系统为例子: windows菜单,选择 设置 打开设置面板 搜索 剪贴板 点击清除即可

windows 清空剪切板

清空剪切板有多重方法: 一、方法最快捷 windows徽标键r启动运行,输入cmd打开命令窗口:输入“dir | clip”(不包括引号),回车即可。 Windowsr,输入 cmd /c "echo off | clip" ,Ente…

Windows10如何查看剪切板

一、Ctrlr,输入clipbrd,回车 二、找不到clipbrd.exe 1、网上搜索下载clipbrd.exe,资源很多的。下载之后解压 2、将 clipbrd.exe 复制到 C:\Windows\System32 三、重复第一步 .

【技巧】windows剪切板

快捷键windowv打开常用剪切板

OpenCV--SVM多分类问题

物体识别中经常遇到多分类器问题,svm是比较成熟和直接的想法。一般来说使用svm作为多分类器主要有以下思路: 一对多(one-vs-all)。训练时依次将目标类别作为正样本,其余样本作为负样本,以此训练n个svm。这个在Andrew Ng的Machine…

svm多分类python代码_SVM算法的理解及其Python实现多分类和二分类

原理 SVM被提出于1964年,在二十世纪90年代后得到快速发展并衍生出一系列改进和扩展算法,在人像识别、文本分类等模式识别(pattern recognition)问题中有得到应用。 支持向量机(Support Vector Machine, SVM)是一类按监督学习(supervised learning) 方式对数据进行二元分类的广…

MATLAB实现SVM多分类(one-vs-rest),利用自带函数fitcsvm

MATLAB实现SVM多分类(one-vs-rest),利用自带函数fitcsvm SVM多分类一对一(one-vs-one)一对多(one-vs-rest)fitcsvm简单介绍代码实验结果图第一次写博客,还请大家多多包涵,欢迎指教&a…