音视频常见概念:软解硬解、IBP帧、GOP、YUV编码

软解与硬解

视频解码分为软解硬解
所谓“软解”就是通过软件让 CPU 进行视频解码处理;而“硬解”是指不依赖于 CPU,通过专用的设备(子卡)
单独完成视频解码,比如曾经的 VCD/DVD 解压卡、视频压缩卡都被冠以“硬解”的称号。现在实现高清硬解不需
要额外的子卡,也不需要额外的投入,因为硬解码模块被整合在了 GPU 内部,而目前主流的显卡(包括整合显卡)都能支持硬解码。
“硬解”其实更需要软件的支持,只是基本不需要 CPU 参与运算,从而为系统节约了很多资源开销。通过降低 CPU
占用率,可以给用户带来很多实惠。

GPU 硬解码高清视频的优势

  • 不需要太好的 CPU,单核足矣,CPU 方面节约不少资金;
  • 硬解码基本相当于免费附送,不到 500 元的整合主板都能完美支持;
  • 硬解码让 CPU 占用率超低,系统有能力在看 HDTV 的同时进行多任务操作;
  • CPU 需要倾尽全力才能解码 HDTV,而 GPU 只需动用 0.1 亿晶体管的解码模块就能完成任务,功耗控制更好

GPU 硬解码高清视频的劣势

  • 起步较晚,软件支持度无法与软解相提并论;
  • 面对杂乱无章的视频编码、封装格式,硬解码无法做到全面兼容;
  • 软解拥有大量画面输出补偿及画质增强技术,而硬解这方面做得还远远不够;
  • 硬解码软件设置较为复杂,很多朋友根本不知道该如何正确使用 GPU 硬件解码。

IBP帧

帧——就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。而在实际压缩时,会采取各种算法减少数据的容量,其中 IPB 就是最常见的。

I frame :帧内编码帧,又称 intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I 帧可以看成是一个图像经过压缩后的产物。

P frame: 前向预测编码帧,又称 predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;

B frame: 双向预测内插编码帧 又称 bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

I、B、P 的特点

I 帧特点:
它是一个全帧压缩编码帧。它将全帧图像信息进行 JPEG 压缩编码及传输;解码时仅用 I 帧的数据就可重构完整图像;

  • I 帧描述了图像背景和运动主体的详情;
  • I 帧不需要参考其他画面而生成;
  • I 帧是 P 帧和 B 帧的参考帧(其质量直接影响到同组中以后各帧的质量);
  • I 帧是帧组 GOP 的基础帧(第一帧),在一组中只有一个 I 帧;
  • I 帧不需要考虑运动矢量;
  • I 帧所占数据的信息量比较大。

P 帧:前向预测编码帧。
P 帧的预测与重构:P 帧是以 I 帧为参考帧,在 I 帧中找出 P 帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从 I 帧中找出 P 帧“某点”的预测值并与差值相加以得到 P 帧“某点”样值,从而可得到完整的 P 帧。
P 帧特点:

  • P 帧是 I 帧后面相隔 1~2 帧的编码帧;
  • P 帧采用运动补偿的方法传送它与前面的 I 或 P 帧的差值及运动矢量(预测误差);
  • 解码时必须将 I 帧中的预测值与预测误差求和后才能重构完整的 P 帧图像;
  • P 帧属于前向预测的帧间编码。它只参考前面最靠近它的 I 帧或 P 帧;
  • P 帧可以是其后面 P 帧的参考帧,也可以是其前后的 B 帧的参考帧;
  • 由于 P 帧是参考帧,它可能造成解码错误的扩散;
  • 由于是差值传送,P 帧的压缩比较高。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mgc199u4-1684983737716)(image/视频基础/1684982316208.png)]

B 帧:双向预测内插编码帧。
B 帧的预测与重构
B 帧以前面的 I 或 P 帧和后面的 P 帧为参考帧,“找出”B 帧“某点”的预测值和两个运动矢
量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测
值并与差值求和,得到 B 帧“某点”样值,从而可得到完整的 B 帧。
B 帧特点

  • B 帧是由前面的 I 或 P 帧和后面的 P 帧来进行预测的;
  • B 帧传送的是它与前面的 I 或 P 帧和后面的 P 帧之间的预测误差及运动矢量;
  • B 帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
  • B 帧不是参考帧,不会造成解码错误的扩散。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CuIcNqpv-1684983737718)(image/视频基础/1684982580607.png)]

从上面的解释看,我们知道 I 和 P 的解码算法比较简单,资源占用也比较少,I 只要自己完成就行了,P 呢,也
只需要解码器把前一个画面缓存一下,遇到 P 时就使用之前缓存的画面就好了,如果视频流只有 I 和 P,解码器可
以不管后面的数据,边读边解码,线性前进,大家很舒服。

但网络上的电影很多都采用了 B 帧,因为 B 帧记录的是前后帧的差别,比 P 帧能节约更多的空间,但这样一来,
文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个 I 或者 P 的画面(也就是
说要预读预解码),而且,B 帧不能简单地丢掉,因为 B 帧其实也包含了画面信息,如果简单丢掉,并用之前的画面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的 B 帧,

B 帧用的多,对不支持 B 帧的播放器就造成更大的困扰,画面也就越卡。

一般平均来说,I 的压缩率是 7(跟 JPG 差不多),P 是 20,B 可以达到 50,可见使用 B 帧能节省大量空间,节
省出来的空间可以用来保存多一些 I 帧,这样在相同码率下,可以提供更好的画质。

GOP

GOP:Group of Pictures 画面组
GOP(Group of Pictures)策略影响编码质量:所谓 GOP,意思是画面组,一个 GOP 就是一组连续的画面。MPEG编码将画面(即帧)分为 I、P、B 三种,I 是内部编码帧,P 是前向预测帧,B 是双向内插帧。简单地讲,I 帧是一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化。没有 I 帧,P 帧和 B 帧就无法解码,这就是MPEG 格式难以精确剪辑的原因,也是我们之所以要微调头和尾的原因。
在这里插入图片描述

GOP总是以I 帧为起始点,后面有若干P 帧,其它是B 帧,下一个I 帧为新的GOP的起始点,如下图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lVmUgJ5Y-1684983737719)(image/视频基础/1684983167808.png)]

YUV编码

一文读懂 YUV 的采样与格式 - 知乎 (zhihu.com)

RGB 色彩空间更适合图像采集和显示, YUV 空间用于编码和存储则比较好。 在存储和编码之前,RGB 图像要转换为 YUV 图像,而 YUV 图像在 显示之前通常有必要转换回 RGB。

Y 代表 亮度,U代表色调,V代表色饱和度。

色调是由光波的峰值定义的,描述的是光的颜色。色饱和度是由光波的谱宽定义的,描述的是光的纯度。

RGB与YUV相互转换

RGB 转 YUV 的过程实际上就是 把 RGB 3分量里面的亮度信息 提取出来,放到 Y 分量。再把 RGB 3分量里面的 色调 ,色饱和度 信息提取出来放到 U跟 V分量。

有如下公式进行转换:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5XCSe8CN-1684983823387)(image/视频基础/1684339219170.png)]

YUV 图像的主流采样方式有如下三种:

  • YUV 4:4:4 采样
  • YUV 4:2:2 采样
  • YUV 4:2:0 采样

YUV 4:2:0 采样的图像比 RGB 模型图像节省了一半的存储空间,因此它也是比较主流的采样方式。

参考资料

《ffmpeg基础库编程开发》
一文读懂 YUV 的采样与格式 - 知乎 (zhihu.com)

猜你喜欢

转载自blog.csdn.net/m0_61737429/article/details/130862994