聊聊视频中的编解码器,你所不知道的h264、h265、vp8、vp9和av1编解码库
你知道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
VP8是google定义并开源的视频编解码标准和编解码库实现。
Google 收购了On2 Technologies,之后Google开放了其拥有的VP8视频编码技术源代码并免费提供给所有开发者使用,发布
WebM 开放网络媒体项目
VP8号称比H264编码性能更好,实际上没那么夸张,差不多相当于ffmpeg内置默认的openh264编解码库。VP8的压缩实现与H264有点区别就是VP8没有B帧,而H264有B帧。
VP8的优点是开源,没有H264/H265的专利版权风险,可以随便用,除了IE9以下版本的浏览器外,现代浏览器都支持VP8视频编码,当然也支持webm视频格式。
libvpx
libvpx是WebM项目的子库,可以同时支持VP8和VP9视频编码:
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打破了之前编码标准中传统的二维运动矢量模型的限制,第一次引入了仿射变换运动模型,不仅可以描述平移运动,同时可以更好的表述如旋转、缩放等更加复杂的运动,有效的提升了视频编码效率
在实际测试中,AV1比H265(HEVC)压缩率提升约27%,可以说是力压H265。是目前为止,世界上压缩性能最好的视频编解码器。再借用游戏界的话术来讲,那AV1就是“次世代”编解码器。
得益于AV1的开源和相比于H265更节省带宽的缘故,目前AV1有超过h265编码的趋势,更多视频平台和直播平台选择使用AV1编码,而不是H265。
目前使用AV1编码的主流流媒体平台有这几家:“奈飞、YouTube、BBC、爱奇艺”
尽管业界已经喊了4K喊了十多年,但是实际上4K普及率依然并不高,这些年主流的还是H264编码,尤其是在直播领域,h265编码基本上没什么应用。4K的普及不仅需要视频编解码技术的升级,还需要用户带宽和其他硬件配置的升级换代。在带宽费用如此高昂的时代,各大视频平台和直播平台厂商升级意愿都不高,但是因为有了AV1编码,各大视频平台和直播平台厂商能够使用AV1编码带来更少的带宽消耗,相信AV1编解码器的未来会更好。
这里只介绍FFmpeg内置的两个av1编解码器:dav1d和 librav1e。
dav1d
由FFmpeg和法国videolan开源组织共同维护的dav1d编解码库:https://www.videolan.org/projects/dav1d.html。
跟其他videolan维护项目不同的是,dav1d编解码库不受专利版权限制。
librav1e
号称最快的av1解码器。实际上dav1d和librav1e编解码器性能差不多,差别不大。
https://github.com/xiph/rav1e
如果觉得博主写得还不错,欢迎“关注、点赞、收藏”一键三连。
聊聊视频中的编解码器,你所不知道的h264、h265、vp8、vp9和av1编解码库的更多相关文章
- Android中Context详解 ---- 你所不知道的Context
转自:http://blog.csdn.net/qinjuning/article/details/7310620Android中Context详解 ---- 你所不知道的Context 大家好, ...
- 你所不知道的html5与html中的那些事第三篇
文章简介: 关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后,所有的工作 ...
- JavaScript中你所不知道的Object(二)--Function篇
上一篇(JavaScript中你所不知道的Object(一))说到,Object对象有大量的内部属性,而其中多数和外部属性的操作有关.最后留了个悬念,就是Boolean.Date.Number.Str ...
- Android中Context详解 ---- 你所不知道的Context(转)
Android中Context详解 ---- 你所不知道的Context(转) 本文出处 :http://b ...
- 你所不知道的html5与html中的那些事(三)
文章简介: 关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后,所有的工作 ...
- 你所不知道的html5与html中的那些事(五)——web图像
文章简介: 现在的页面,一般都离不开图像,而怎么做才能让我们的页面中的图像加载的又快又好呢?在优化页面速度的时候还有什么事是你所不知道的呢? 下面看看今天我为大家带来了哪些关于we ...
- 你所不知道的html5与html中的那些事(四)——文本标签
文章简介: 关于html5相信大家早已经耳熟能详,但是他真正的意义在具体的开发中会有什么作用呢?相对于html,他又有怎样的新的定义与新理念在里面呢?为什么一些专家认为html5完全完成后 ...
- 你所不知道的库存超限做法 服务器一般达到多少qps比较好[转] JAVA格物致知基础篇:你所不知道的返回码 深入了解EntityFramework Core 2.1延迟加载(Lazy Loading) EntityFramework 6.x和EntityFramework Core关系映射中导航属性必须是public? 藏在正则表达式里的陷阱 两道面试题,带你解析Java类加载机制
你所不知道的库存超限做法 在互联网企业中,限购的做法,多种多样,有的别出心裁,有的因循守旧,但是种种做法皆想达到的目的,无外乎几种,商品卖的完,系统抗的住,库存不超限.虽然短短数语,却有着说不完,道不 ...
- 你所不知道的 CSS 阴影技巧与细节 滚动视差?CSS 不在话下 神奇的选择器 :focus-within 当角色转换为面试官之后 NPOI 教程 - 3.2 打印相关设置 前端XSS相关整理 委托入门案例
你所不知道的 CSS 阴影技巧与细节 关于 CSS 阴影,之前已经有写过一篇,box-shadow 与 filter:drop-shadow 详解及奇技淫巧,介绍了一些关于 box-shadow ...
随机推荐
- 在Android中用纯Java代码布局
感谢大佬:https://www.jianshu.com/p/7aedea560f16 在Android中用纯Java代码布局 本文的完成了参考了一篇国外的教程,在此表示感谢. Android中的界面 ...
- jvm与dvm两种虚拟机的不同
jvm : java虚拟机 sun dvm: dalvik虚拟机 google 区别: 1.基于的架构不同,jvm 基于栈架构,栈是位于内存上的一个空间,执行指令操作,需要 ...
- ubuntu关机重启命令介绍
转载请注明来源:https://www.cnblogs.com/hookjc/ 重启命令: 1.reboot 2.shutdown -r now 立刻重启(root用户使用) 3.shut ...
- Java产生指定范围内的随机日期
要想产生指定范围内的随机日期,首先我们要指定一个范围,那么我们可以通过SImpleDateFormat格式化日期,然后再通过parse()方法设置日期,返回一个Date类型的日期对象,再转化为时间戳( ...
- KC705E增强版基于FMC接口的 Kintex-7 XC7K325T PCIeX8 接口卡
一.板卡概述 本板卡基于Xilinx公司的FPGAXC7K325T-2FFG900 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8.64bit DDR3容量 ...
- 通过 call/cc 给 Ice 实现 Coroutine
前两天给 Ice 加了 call/cc, 为此还重构了一波, 实现 call/cc 还是因为看了轮子哥的大专系列( 里边说提供 continuation 语言实现 Coroutine 起来很轻松, 后 ...
- Solution -「洛谷 P4194」矩阵
\(\mathcal{Description}\) Link. 给定一个 \(n\times m\) 的矩阵 \(A\),构造一个 \(n\times m\) 的矩阵 \(B\),s.t. \ ...
- C语言strtok_s函数
strtok_s 在C语言中的作用是分割出一个字符串中的单词 在MSDN上参数表: strtok_s strToken String containing token or tokens. strDe ...
- 北大博士生提出CAE,下游任务泛化能力优于何恺明MAE
大家好,我是对白. 何恺明时隔两年发一作论文,提出了一种视觉自监督学习新范式-- 用掩蔽自编码器MAE,为视觉大模型开路. 这一次,北大博士生提出一个新方法CAE,在其下游任务中展现的泛化能力超过了M ...
- libc++abi.dylib: terminating with uncaught exception of type NSException
这是微信sdk注册时候报的错误 解决方法 选择Build Setting,在"Other Linker Flags"中加入"-Objc -all_load"