聊聊视频中的编解码器,你所不知道的h264h265vp8vp9和av1编解码库

eguid_1 eguid_1     2023-02-23     748

关键词:

你知道FFmpeg吗?了解过h264/h265/vp8/vp9编解码库吗?

我们日常生活中使用最广泛的五种视频编码:H264(AVC)、H265(HEVC)、vp8、vp9、av1都分别是什么?由哪些组织/公司实现的?编解码库的授权协议都是什么?他们又分别有什么优点?
今天就让博主带领诸位小伙伴们一起来简单了解一下,视频中的这几种常用的编解码器。

H264(AVC)

最常用的视频编码。

H.264在1997年ITU的视频编码专家组提出时被称为H.26L,在ITU与ISO合作研究后被称为MPEG4 Part10或H.264。

虽然上述两个组织提出了H264编码规范,但是并没有具体实现。

openh264

所以我们日常使用的视频编码大多由思科(cisco)开源的openh264编解码库:
http://www.openh264.org/。

x264

目前性能最好最完善的h264编解码库。

由大名鼎鼎的VLC播放器的维护机构,法国videolan开源组织维护的libx264编解码库:http://www.videolan.org/developers/x264.html。

videolan开源组织的前身是法国巴黎中央理工学院的一个学生项目。


这也是为什么音视频开发工程师默认会使用VLC播放器来测试音视频的原因,不仅仅是因为VLC强大,还因为VLC播放器就是事实上的h264/h265音视频编码的标准实现,如果VLC都播放不了你的视频,那肯定是你的视频有问题。

H265(HEVC)

x265

业界最好的h265(hevc)编解码库。
同样由大名鼎鼎的
VLC
播放器的维护组织法国videolan组织开源的libx265编解码库:
https://www.videolan.org/developers/x265.html

使用x264,x265编码的小伙伴们需要注意这两款编解码库使用GPL v2授权协议,商业软件使用需要遵守GPL v2协议。

ffmpeg内置openhevc编解码库

FFmpeg维护的**H265(HEVC)**的编解码库,能用。
http://openhevc.github.io/openHEVC/

kvazaar

FFmpeg项目引用的另一款开源的H265(HEVC)解码库,注意kvazaar解码库只提供H265解码,并不提供编码。
https://github.com/ultravideo/kvazaar

VP8

VP8google定义并开源的视频编解码标准和编解码库实现。

Google 收购了On2 Technologies,之后Google开放了其拥有的VP8视频编码技术源代码并免费提供给所有开发者使用,发布
WebM 开放网络媒体项目

VP8号称比H264编码性能更好,实际上没那么夸张,差不多相当于ffmpeg内置默认的openh264编解码库。VP8的压缩实现与H264有点区别就是VP8没有B帧,而H264有B帧。

VP8的优点是开源,没有H264/H265的专利版权风险,可以随便用,除了IE9以下版本的浏览器外,现代浏览器都支持VP8视频编码,当然也支持webm视频格式。

libvpx

libvpxWebM项目的子库,可以同时支持VP8VP9视频编码:
https://www.linuxfromscratch.org/blfs/view/svn/multimedia/libvpx.html

webP图片格式的图像编码就是使用的VP8编码进行压缩的。
WebM视频的视频编码也是采用VP8/VP9编码。

VP9

VP9也是google开源的用与比拼H265(HEVC)的编解码器,可以看出google真的很努力的在开源,这种开源的视频编码应该多一些,百花齐放才能促进音视频技术升级。
兼容性方面,除了IE9以下版本的浏览器外,现代浏览器都支持VP9视频编码,当然也支持webm视频格式。

libvpx

libvpx上面讲过了,稍微提一下。是WebM项目的子库,可以同时支持VP8和VP9视频编码:
https://www.linuxfromscratch.org/blfs/view/svn/multimedia/libvpx.html

AV1

重磅压轴,google最新推出的针对VP9编码有多项优化后的新的编解码器:AV1

AV1是Google VP10、Mozilla Daala以及Cisco Thor三款开源编码项目共同研发成果。AV1打破了之前编码标准中传统的二维运动矢量模型的限制,第一次引入了仿射变换运动模型,不仅可以描述平移运动,同时可以更好的表述如旋转、缩放等更加复杂的运动,有效的提升了视频编码效率

在实际测试中,AV1H265(HEVC)压缩率提升约27%,可以说是力压H265。是目前为止,世界上压缩性能最好的视频编解码器。再借用游戏界的话术来讲,那AV1就是“次世代”编解码器。

得益于AV1的开源和相比于H265更节省带宽的缘故,目前AV1有超过h265编码的趋势,更多视频平台和直播平台选择使用AV1编码,而不是H265。

目前使用AV1编码的主流流媒体平台有这几家:“奈飞、YouTube、BBC、爱奇艺”

尽管业界已经喊了4K喊了十多年,但是实际上4K普及率依然并不高,这些年主流的还是H264编码,尤其是在直播领域,h265编码基本上没什么应用。4K的普及不仅需要视频编解码技术的升级,还需要用户带宽和其他硬件配置的升级换代。在带宽费用如此高昂的时代,各大视频平台和直播平台厂商升级意愿都不高,但是因为有了AV1编码,各大视频平台和直播平台厂商能够使用AV1编码带来更少的带宽消耗,相信AV1编解码器的未来会更好。

这里只介绍FFmpeg内置的两个av1编解码器:dav1dlibrav1e

dav1d

FFmpeg和法国videolan开源组织共同维护的dav1d编解码库:https://www.videolan.org/projects/dav1d.html。

跟其他videolan维护项目不同的是,dav1d编解码库不受专利版权限制。

librav1e

号称最快的av1解码器。实际上dav1d和librav1e编解码器性能差不多,差别不大。
https://github.com/xiph/rav1e

如果觉得博主写得还不错,欢迎“关注、点赞、收藏”一键三连。

你所不知道的c#中的细节(代码片段)

...好好利用这些东西,那么今天我细数一下这些藏在编译器中的细节。不是只有Task和ValueTask才能await在C#中编写异步代码的时候,我们经常会选择将异步代码包含在一个Task或者ValueTask中,这样调用者就能用 查看详情

在 JavaScript 中检测视频的编解码器

】在JavaScript中检测视频的编解码器【英文标题】:Detectingavideo\'scodecinJavaScript【发布时间】:2016-09-2411:18:26【问题描述】:我正在开发基于Electron的桌面应用程序(即Node.js和Chrome浏览器外壳),其中一项功能包括从本地文件系统... 查看详情

你所不知道的shadowppt

                                 查看详情

你所不知道的,华为项目管理之道!

...的有效沟通是怎么做的,以及在项目之余,华为日常工作中的高效沟通方法。希望对你有帮助~一、缺乏有效沟通对项目是灾难性的在华为创立初期,曾一度出现工作结果和预期目标不相符的问题,让公司多次陷入危机。那时候... 查看详情

你所不知道的单例模式和多线程并发在单例模式中的影响

单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了... 查看详情

javascript你所不知道的困惑

困惑一:先看一个样例:functiontest(){ message="hi";}test();alert(message);会输出字符串“hi"在函数内部使用var定义的变量是局部变量,省略var操作符的变量是全局变量。困惑二:alert(undefined==null)结果是”true"我们知道在js中分为基本类型... 查看详情

js你所不知道的一面

你真的知道JavaScript吗    JavaScript是一门奇怪的语言,要真正掌握并不容易。废话不多说,来一个快速测试,5道题目,看看你对JavaScript是否真正掌握。准备好了吗?开始咯??题目No.1if(!("a"inwindow)){vara=1;}console.log(a);No... 查看详情

你所不知道的ptheartbeat

pt-heartbeat原理研究一、简介MysqlSeconds_Behind_Master参数对于主从延迟测量并不准确,因为他的统计基于 slaveSQLthread 和I/Othread的时间差,如果i/othread受到网络影响,这个估值就非常不正确。一般采用更精确的主从延迟检测pt-he... 查看详情

你所不知道的良心网站第二弹

前言传送门:你所不知道的良心网站第一弹にいはお哈哈,很高兴能再次的碰到大家(嘛,感觉有用的网站又多起来了),其实有很多的网站都是我在b站瞎逛的,有很多up主都会介绍一些好玩的网址,不过有很多的网址我个人感... 查看详情

你所不知道的chaosblade那些事(代码片段)

你所不知道的ChaosBlade那些事作者简介:肖长军,阿里巴巴技术专家,花名穹谷,多年应用性能监控研发和分布式系统高可用架构经验,现专注于混沌工程领域,具备多年混沌工程研发和实践经验。开源项目ChaosBlade的负责人,阿... 查看详情

唐卡定制之你所不知道的秘密

唐卡定制之你所不知道的秘密唐卡定制的目的涉及到了他独特的艺术特色,蕴藏着藏族艺术的神秘色彩,历史底蕴肥厚,是很多重大历史事件和政治事件的有力史据。最近流行的唐卡收藏热又将唐卡定制推到了一个巅峰,唐卡的... 查看详情

你所不知道的linq

问题的提出昨天在qq群问了一个linq的问题被人鄙视了。题目大概类似于 varreuslt=fromsinnewList<string>()selects;问from...in...select...中in后面如果接的不是集合,而是一个delegate,会怎么样??之后就被人鄙视了,一些人嘲笑我工作... 查看详情

你所不知道的css负值技巧与细节

写本文的起因是,一天在群里有同学说误打误撞下,使用负的 outline-offset 实现了加号。嗯?好奇的我马上也动手尝试了下,到底是如何使用负的outline-offset实现加号呢?使用负值outline-offset实现加号假设我们有这样一个简... 查看详情

你所不知道的http协议

HTTP协议1.简介HTTP协议(HyperTextTransferProtocol,超文本传输协议),是用于从万维网(WWW:WorldWideWeb)服务器传输超文本到本地浏览器的传送协议。HTTP基于TCP/IP通信协议来传递数据。HTTP基于客户端/服务端(C/S)架构模型,通过一个... 查看详情

你所不知道的java编程思想

读thinkinginjava这本书的时候,有这么一句话“在编译单元的内部,可以有一个公共(public)类,它必须拥有与文件相同的名字”有以下疑问:在一个类中说可以有一个public类,那是不是也就是说可以没有呢?抱着这个问题... 查看详情

你所不知道nmap(代码片段)

一、Nmap基础1.1、Nmap的简介Nmap是由GordonLyon设计并实现,在1997年开始发布并开源的一个安全扫描软件,GordonLyon最初设计Nmap的目的只是打造一个端口扫描工具。但随着时间的推移,Nmap的功能越来越全面,在2009年Nmap发布了标致未... 查看详情

你所不知道的java之hashcode

之所以写HashCode,是因为平时我们总听到它。但你真的了解hashcode吗?它会在哪里使用?它应该怎样写?相信阅读完本文,能让你看到不一样的hashcode。使用hashcode的目的在于:使用一个对象查找另一个对象。对于使用散列的数据... 查看详情

你所不知道的良心网站第一弹

前言hi,大家好,本次给大家带了的是非常实用并且好玩的东西,大家都知道自己是可以建站的,并且还可以根据自己的喜好来吧网站给改造成自己所喜闻乐见的模样,同时也可以给同样有着相同爱好的伙伴给予快乐,何乐而不为... 查看详情