视频编码技术
参考文章
默认 提示块标签
default 提示块标签
primary 提示块标签
success 提示块标签
info 提示块标签
warning 提示块标签
danger 提示块标签
视频编码技术
所谓视频编码方式就是指通过压缩技术,将原始视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo、微软公司的WMV以及Apple公司的QuickTime等。
为什么会有视频编解码技术
通常视频文件都非常庞大,如果直接存储或者传输,那么对内存大小和传输速度的要求将会变的非常高,进而降低用户的体验,也不利于整个生态的发展。
因此为了解决上述问题,才有了视频编解码技术,其通过一些技巧,对视频大小进行压缩,例如删除重复信息、利用相似图片等,将视频数据压缩成更小的体积。
如果我不使用任何视频编码技术,我现在想存储1080p 60fps的一帧画面,我需要多大的存储空间:
$分辨率为1080p,即1920 \times 1080像素。$
$每帧的像素数为: 1920 \times 1080 = 2,073,600 \text{ 像素}$
$通常每个像素使用24位色深,即每个像素占用3字节(24位 = 3字节)。$
$\text{存储空间} = \text{像素数} \times \text{每个像素的字节数}$
$\text{存储空间} = 2,073,600 \times 3 , \text{字节} = 6,220,800 , \text{字节}$
$将字节转换为MB(1MB = 1024 × 1024字节):$
$\text{存储空间} = \frac{6,220,800}{1024 \times 1024} \approx 5.94 , \text{MB}$
$\text{一秒的视频} = 5.94 , \text{MB} \times 60 = 356.4 , \text{MB} $
压缩什么
压缩之所以可能,是因为存在冗余数据。视频序列帧图像的冗余数据主要有:
- 空间冗余:同一个物体表面上采样点的颜色,存在空间连续性,是相同或相近的。
- 时间冗余:连续画面之间存在相关性,例如两人在房间里聊天,背景没有变化,人也只有位置和动作的变化。
- 结构冗余:某些结构是简单图像模式的重复,如蜂窝,方格地板。
- 知识冗余:某些图像的理解,跟知识有相关性。如人脸有固定的结构,包含眼、鼻子、嘴巴,按一定位置排列。可以对具备固定结构的图像元素,构造模型,结合图像库,只需要几个参数就可以表征。
- 视觉冗余:人眼对图像场的敏感性是非均匀和非线性的。对色度相对不敏感,对亮度更敏感。在高亮度区,人眼对亮度变化敏感度下降。对物体边缘敏感,对内部区域不敏感。可以根据这些视觉特性,对图像信息进行取舍。
码率
播放一段视频每秒所需的数据量就是它的 Bit rate 比特率(即常说的 码率);
- 恒定码率(CBR)
- 可变码率(VBR)
![]https://image.aruoshui.fun/i/2025/01/02/p3sn21-0.webp - 固定质量模式(CRF)
![]https://image.aruoshui.fun/i/2025/01/02/p5bnha-0.webp
在没有码率限制的情况下首选 - 平均码率(ABR)
相当于码率波动更小的VBR
H.264
H.264是由ITU-T Video Coding Experts Group(视频编码专家组)和ISO/IEC Moving Picture Experts Group(运动图像专家组)联合制定的标准,属于视频压缩领域的经典编码标准。自2003年推出以来,H.264已经成为广泛使用的视频压缩标准,特别是在视频会议、流媒体、蓝光光盘、YouTube和直播等领域。
核心算法
H264采用的核心算法是帧内压缩和帧间压缩.
-
帧内(Intraframe)压缩也称为空间压缩(Spatialcompression)。
当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图像压缩类似。帧内一般采用有损压缩算法,由于帧内压缩是编码一个完整的图像,所以可以独立的解码、显示。帧内压缩一般达不到很高的压缩,跟编码jpeg差不多。
-
帧间(Interframe)压缩的原理是:相邻几帧的数据有很大的相关性,或者说前后两帧信息变化很小的特点。也即连续的视频其相邻帧之间具有冗余信息,根据这一特性,压缩相邻帧之间的冗余量就可以进一步提高压缩量,减小压缩比。
帧间压缩也称为时间压缩(Temporalcompression),它通过比较时间轴上不同帧之间的数据进行压缩。帧间压缩一般是无损的。帧差值(Framedifferencing)算法是一种典型的时间压缩法,它通过比较本帧与相邻帧之间的差异,仅记录本帧与其相邻帧的差值,这样可以大大减少数据量。
具体解释
在H.264中,帧内压缩是生成I帧的算法,帧间压缩是生成B帧和P帧的算法。
- I帧
I 帧:即Intra-coded picture(帧内编码图像帧),I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)。
- 它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
- 解码时仅用I帧的数据就可重构完整图像;
- I帧描述了图像背景和运动主体的详情;
- I帧不需要参考其他画面而生成;
- I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
- I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
- I帧不需要考虑运动矢量;
- I帧所占数据的信息量比较大。
-
P帧
P帧:即Predictive-coded Picture(前向预测编码图像帧)。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量 (MV) 一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。
把编码时候记录变化,解码时再预测回去
解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;
由于是差值传送,P帧的压缩比较高。
P帧是参考帧,它可能造成解码错误的扩散; -
B帧
B帧:即Bidirectionally predicted picture(双向预测编码图像帧)。
B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。B帧是由前面的I或P帧和后面的P帧来进行预测的;
B帧传送的是它与前面的I帧或P帧和后面的P帧之间的预测误差及运动矢量;
B帧是双向预测编码帧;
B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
B帧不是参考帧,不会造成解码错误的扩散为什么需要B帧
I和P的解码算法比较简单,资源占用也比较少,I只要自己完成就行了,P呢,也只需要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了,如果视频流只有I和P,解码器可以不管后面的数据,边读边解码,线性前进,大家很舒服。那么为什么还要引入B帧?网络上的电影很多都采用了B帧,因为B帧记录的是前后帧的差别,比P帧能节约更多的空间,但这样一来,文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码),而且,B帧不能简单地丢掉,因为B帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持B帧的播放器就造成更大的困扰,画面也就越卡。
-
帧间关系
GOP
GOP即每一组IPB帧的序列包含了多少帧,换句话说就是一个I帧之后多少帧才会出现下一个I帧
GOP越大,B和P帧越多,视频质量越高,压缩率上去了,更多的闲置码率去提升质量
H.265
是为了应对更高分辨率视频(如4K、8K)的需求而开发的。它的主要优势在于其更高的压缩效率,相比H.264,它能够在保持相同视频质量的情况下,将视频数据量减少大约30% - 50%。- 例如,一个原本大小为 1GB 的 H.264 编码的 1080P 视频,若采用 H.265 进行编码,其文件大小可能会缩减至 500MB - 700MB 左右。这种高效的压缩能力使得 H.265 在高清和超高清视频的存储与传输方面展现出了巨大的优势,特别是在网络带宽资源紧张或者存储空间有限的云桌面应用场景中。- 再比如,在云桌面远程办公场景中,用户需要访问存储在云端的高清视频资料,H.265 编码可以让视频更快地加载和播放,减少等待时间,提高工作效率。
相同的视频H265编码的文件会比H264编码的文件小很多,一些时候甚至接近50%。
所以理论上,在相同带宽的前提下,H265的在线视频、直播流会拥有更高的画质,相同画质的情况下,H265也能更节省带宽/流量。
但这是建立在编码、解码计算量为代价的,也就是说,播放H265视频,会比H264视频更消耗性能。
这是H264、H265最大的区别,H265比H264拥有压缩率更高的压缩算法。但同时,也损耗更多的性能,H264、H265的选择,更多是根据实际场景下,容量、带宽对比用户、服务器性能,哪个更为重要的考量。
参考文献
历史上的今天- 1475年:意大利文艺复兴时期的雕塑家米开朗基罗[1]米开朗基罗参考资料诞生。他是文艺复兴时期最重要的艺术家之一,作品包括《大卫像》和《圣母玛利亚》等。
- 1899年:美国发明家、电影制片人威廉·赛勒斯·福克斯[2]电影制片人威廉·赛勒斯·福克斯参考资料诞生。他是电影行业的先驱,创立了20世纪福克斯影业公司。
- 1974年:计算机科学家维特·柏恩斯·李发表了有关万维网[3]万维网的提案参考资料的提案,奠定了互联网发展的基础。
- 1998年:谷歌公司成立,创始人拉里·佩奇和谢尔盖·布林将互联网搜索引擎[4]谷歌搜索引擎的历史参考资料带入新的高度,成为全球最大的搜索引擎之一。
- 2007年:苹果公司推出首款iPhone[5]首款iPhone手机参考资料,引领了智能手机革命,改变了人们的通讯和生活方式。
- [1]徐瑶.基于H.264的视频压缩技术及其在视频监控系统中的应用[D].安徽大学,2014.