h264转av1后大小相差多少

author author     2023-04-09     677

关键词:

来源:H系列有MPEG和VCEG推出 ,VPX系列由谷歌推出,H.265有更高的图像质量,而AV1对于流媒体来说更加可靠且完全免费。H.265更大的预测模型实现了边缘可视化,而VP9实施更严格的编码规则,似乎可以让流媒体更加连贯和可靠。其中,H.265其压缩效率比H.264提升50%,VP9略逊于H.265,H.266编码性能最高,AV1比VP9同等质量下减少30%比特率。

目录:

压缩性能比较

0.码流结构

1.头信息

2.编解码框架差异

3.块划分结构

4.帧内预测

5.帧间预测

6.变换

7.熵编码

8.滤波

9.加速技术

10.其他技术

0.码流结构:

H.264:

NAL层(Network Abstraction Layer):网络抽象层,主要用于网络传输。按照一定格式,对视频编码层输出的数据进行打包和封装,并提供包头(header)等信息,以在不同速率的网络上传输或进行存储

VCL层(Video Coding Layer):视频编码层,主要用于数据编码, NAL提供围绕VCL的一层保护。在H.265/HEVC中,NAL单元根据是否装载视频编码数据被分为VCLU(Video Coding Layer NAL Unit)和non-VCLU

1.头信息

H265一个图像序列的组成:VPS+SPS+PPS+SEI+一个I帧+若干个P帧。VPS、SPS、PPS、SEI、一个I帧、一个P帧都可以称
为一个NALU。转自 H265_程序员阿周的博客-CSDN博客_h265 sei

2..编解码框架差异

H.265仍然采用混合编解码,编解码结构与H.264基本一致

H.265经典框架:

HEVC Encoder

3.块划分结构:

H.264是16x16(子块的大小可以是 8X16、 16X8、 8X8、 4X8、 8X4、 4X4非常的灵活)的宏块,

VP9可以以64×32或4×8的块来采样,支持使用 64×64 ,支持将帧分割为具有特定相似性的区域;相比H.265, VP9 支持水平或垂直细分

H.265是采用CU (CodingUnit)、PU(PredictionUnit)和TU(TransformUnit)的递归结构,四叉树划分(预测块亮度64x64-8x8,色度32X32-4X4,变换块32x32->4x4),同时H.265增加了非对称划分模式;具体的分割过程通过两个变量来标记:分割深度(Depth)和分割标记符(Split_flag),H.265/HEVC标准突破了之前标准对预测块、变换块大小关系的限制。由于其PU和TU直接由CU划分得到,因此二者大小没有确定的关系。一个PU可能包含多个TU,一个TU也可能跨越多个PU.

H.266在此基础上除了四叉树划分,增加了三叉树和二叉树划分。

思考:是否可以不规则形划分呢?比如三角形、圆形、椭圆、六边形等等。

4.帧内预测:

H.264中4×4和8×8块包含9种预测模式,16×16块包含4种预测模式;

VP9有10种帧内预测模式;

H.265有33种帧内角度预测模式+DC(上、左取平均)+planer;与H.264/AVC相比,H.265/HEVC增加使用了左下方块的边界像素作为当前块的参考;

H.266有65种帧内亮度角度预测模式,实际上有65+10+10=85种,根据宽高比再选;增加ISP(对块的进一步划分技术);PDPC技术,结合了未滤波的参考像素和滤波后的参考像素,增加MIP模式;CCLM模式;

注:Planar 模式适用于像素值缓慢变化的区域,它使用水平和垂直方向的两个线性滤波器,并将二者 的平均值作为当前块像素的预测值。DC 模式适用于大面积平坦区域,当前块预测值可由其左侧和上方 参考像素的平均值得到。角度模式主要用于视频内容中不同方向的纹理。

5.帧间预测:

帧类型结构:H.265用了HIERACLE-B结构

mv精度:H.265是 \frac14 像素精度(色度\frac18),并使用了更多的临近像素点进行亚像素精度插值。预测模式:SKIP,DIRECT,MERGE(5个候选MV),AMVP(2个候选MV)。

H.266提高到\frac116的像素精度;

VP9 帧间预测使用 ⅛ 像素进行运动补偿,有作为参考帧的不可显示帧,不可显示帧上有平均得来的双向预测。

参考列表:

H.265用两个参考列表,每一个都拥有16个参照项,但是唯一图片的最大数量是8。

H.266中merger模式有6个candidate,相对于H.265增加了TMVP , HMVP改变,

6.变换

H.264整数DCT 4X4 8X8;哈达玛变换

VP9 和HEVC都支持4x4-32x32的变换块大小。 DCT 在帧内编码宏块中,垂直和水平变换路径中的一者或两者会是 DST

HEVC 4X4 DST; Transform_skip模式:transform_skip_flag,该模式对文本桌面视频有较好效果; RQT 技术基于四叉树的自适应变换技术;没有哈达玛变换

HEVC 内部比特深度增加:为了保证中间预测、变换以及量化过程中的内部比特精度,以达到更好的压缩性能

HEVC仅采纳了4点DST7用于帧内预测残差的变换,对于其它尺寸和帧间预测残差仍然采用DCT2;

H.266有不可分离的二次变换lfnst;对预测残差采用多候选变换的方案MTS(Multiple Transform Selection)能够更好地适应预测残差动态变化的统计特性,并且显著地进一步提高变换增益。针对帧间变换技术,子块变换技术(Sub-block Transform,SBT)

7.熵编码:

H.264采用整数离散余弦变换(DCT),CABAC压缩(无损,CABAC也是给高频数据短码,给低频数据长码。同时还会根据上下文相关性进行压缩),两个I帧之间是一个图像序列GOP。

VP9 支持四种变换大小:32x32、16x16、8x8 和 4x4。这些变换与其他大多数编码一样,是 DCT 的近似整数。在帧内编码宏块中,垂直和水平变换路径中的一者或两者会是 DST(离散正弦变换)。

HEVC的熵编码使用了两种算术编码:CABAC和CAVLC。CAVLC主要用于编码SEI、参数集、片头等,剩下的所有数据和语法元素均使用CABAC来编码。

H.265:zigzag扫描:ACS 技术,垂直扫描,水平扫描,对角扫描。

Z扫描

8.滤波:

H.265增加了SAO

H.266中增加了ALF, 亮度7x7,色度5x5

VP9 每块可以选择三种不同的子像素插值滤波器:

正常的第 8 像素/平滑的第 8 像素,可以进行平滑或模糊预测/锐利的第 8 像素, 可以进行锐利预测

9.加速技术

H.265增加了Tile以及WPP等并行工具集以提高编码速度

Tile将图像分割为矩形区域 一个Tile块为基本的并行单元,可以同时存在某些Slice中包含多个Tile和某些Tile中包含多个Slice的情况。

WPP: 全称为wavefront parallel process,以LCU行为基本的编码单位。

以一行LCU块为基本的并行单元,每一行LCU为一个子码流

10.其他

VP9对运动矢量的第 8 像素精度、三种可切换的子像素插值滤波器、参考运动矢量、熵编码、环路滤波、ADST、DCT 等进行优化

H.264 Level:对视频的描述,Level越高,视频的码率、分辨率、fps越高

H.266:色度联合编码JCCR

HEVC IBDI 技术
参考技术A 将h264转换为av1后,文件大小大概会减少20-30%,这是因为AV1编码器能够在保持视频质量的情况下更有效地管理空间,从而实现更好的压缩效果。 参考技术B 你知道FFmpeg吗?了解过h364/h365/vp8/vp9编解码库吗?

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

H264(AVC)
最常用的视频编码。

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

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

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

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

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

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

这也是为什么音视频开发工程师默认会使用VLC播放器来测试音视频的原因,不仅仅是因为VLC强大,还因为VLC播放器就是事实上的h364/h365音视频编码的标准实现,如果VLC都播放不了你的视频,那肯定是你的视频有问题。
H265(HEVC)
x265
业界最好的h365(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解码,并不提供编码。

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

你知道FFmpeg吗?了解过h264/h265/vp8/vp9编解码库吗?我们日常生活中使用最广泛的五种视频编码:H264(AVC)、H265(HEVC)、vp8、vp9、av1都分别是什么?由哪些组织/公司实现的?编解码库的授权协议都是什么?他们又分别有什么优点?今... 查看详情

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

你知道FFmpeg吗?了解过h264/h265/vp8/vp9编解码库吗?我们日常生活中使用最广泛的五种视频编码:H264(AVC)、H265(HEVC)、vp8、vp9、av1都分别是什么?由哪些组织/公司实现的?编解码库的授权协议都是什么?他们... 查看详情

ffmpeg视频转码(代码片段)

...的文件类型。因此,当你在文件系统中使用这些文件时,大小写是有区别的。在某些操作系统中,如Windows,文件扩展名是不区分大小写的。在这种情况下,.MP4和.mp4被视为相同的文件类型。但是,在其他操作系统中, 查看详情

js怎么计算出两个日期之间相差多少月比如:

js怎么计算出两个日期之间相差多少月比如:“2011-05”到“2012-07”相差多少月并且能得到201105201106201107................这样的数据传入后端同时得到2011年5月2011年6月2011年7月.......................这样的数据传入后端用js怎么处理这个时... 查看详情

mysql查询两个日期之间相差多少天?(代码片段)

需求描述:  在mysql中,查看两个日期之间相差多少天操作过程:1.通过datediff函数,查看两个日期之间相差多少天mysql>selectdatediff(‘2018-06-26‘,‘2018-06-25‘),datediff(‘2018-06-20‘,‘2018-06-26‘);+-------------------------------------+------------- 查看详情

h264协议(转)

原文转自https://blog.csdn.net/chenhande1990chenhan/article/details/78744344 查看详情

视频编码原理

...在VP9、AV1中称之为超级块,其实概念是一样的。宏块大小一般是16x16(H264、VP8),32x32(H265、VP9),64x64(H265、VP9、AV1),128x128(AV1)这几种。这里提到的H264、H265、VP8、VP9和AV1都是... 查看详情

java实现两个日期之间相差多少天(代码片段)

Java实现两个日期之间相差多少天importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;/***@authorzfy*@version1.0*@date2022/12/2218:43*@Description:*/publicclassDateUtil 查看详情

java计算两个时间相差多少分钟(代码包括相差天数和时分秒)(代码片段)

代码如下:publicstaticStringgetDatePoor(DateendDate,DatenowDate)longnd=1000*24*60*60;longnh=1000*60*60;longnm=1000*60;//longns=1000;//获得两个时间的毫秒时间差异longdiff=endDate.getTime()-now 查看详情

java计算两个时间相差多少分钟(代码包括相差天数和时分秒)(代码片段)

代码如下:publicstaticStringgetDatePoor(DateendDate,DatenowDate)longnd=1000*24*60*60;longnh=1000*60*60;longnm=1000*60;//longns=1000;//获得两个时间的毫秒时间差异longdiff=endDate.getTime()-nowD 查看详情

计算两个时间之间相差了多少时间

Date的话如下intminutes=(int)((date2.getTime()-date.getTime())/(1000*60)); 其他单位改改算法就行了如果是时间戳的话,直接减就行了…… 查看详情

如何计算文件 H264 的 GOP 大小

】如何计算文件H264的GOP大小【英文标题】:HowtocalculateGOPsizeofafileH264【发布时间】:2014-07-2312:51:10【问题描述】:我有一个使用SVC软件从YUV格式中提取的h264文件。现在,我想计算h264文件中每个GOP的大小。我们知道GOP的大小是两... 查看详情

easynvr更新h265转h264模块内存增长且显示占用高如何解决?

...用户采用H265编码格式播放视频,然而在一些需要用到H264格式的项目中,更新H265转H264模块后,EasyN 查看详情

两个时间之间相差多少分

selectround((a.process_endtime-a.process_starttime)*24,2)hours,      round((a.process_endtime-a.process_starttime)*24*60,2)min,      case&nb 查看详情

求出2008年8月27日和2008-08-24相差多少天?

题目10:2008年8月27日和2008-08-24相差多少天?(视频下载) (全部书籍) importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.*;publicclassTest   publicstaticvoidmain(String[ 查看详情

js比较两个时间相差多少分钟(笔记)

<scripttype="text/javascript"language="javascript">functionTimeDifference()//定义两个变量time1,time2分别保存开始和结束时间vartime1="2009-12-0212:25";vartime2="2009-12- 查看详情

计算两个时间相差多少年月日的sql算法(代码片段)

1/******Object:StoredProcedure[dbo].[GetDateDiff]ScriptDate:11/12/201916:14:05******/2SETANSI_NULLSON3GO4SETQUOTED_IDENTIFIERON5GO6--计算两个时间相差多少年月日的sql算法,用于新生儿年龄计算7ALTERPROCEDURE[dbo].[GetDateDiff]8@fr 查看详情

两个时间相差多少.net中的timespan应用

原文发布时间为:2008-10-31——来源于本人的百度文章[由搬家工具导入]usingSystem;usingSystem.Data;usingSystem.Configuration;usingSystem.Collections;usingSystem.Web;usingSystem.Web.Security;usingSystem.Web.UI;usingSystem.Web.UI.Web 查看详情