音视频常见概念:软解硬解、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)

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为了满足广大Android开发爱好者与从业者的学习需求,我们精心整理并上传了一份全面而实用的Android项目资源包。这份资源包内容丰富,涵盖了从基础知识到实战应用的全方位内容,旨在为开发者们提供一个便捷、高效的学习平台。 一、文件手册 资源包中的文件手册部分,详细记录了Android开发的核心知识点和常用技术。无论是初学者还是有一定经验的开发者,都能从中找到所需的学习资料。手册采用了简洁明了的排版方式,使得查阅更加方便快捷。同时,手册内容深入浅出,既适合新手入门,也能为老手提供有价值的参考。 二、项目实战与练习 为了让学习者能够将理论知识与实践相结合,我们特别准备了项目实战与练习部分。这部分内容包含了多个精心设计的Android项目案例,从需求分析、设计思路到实现过程,都有详细的讲解和代码示例。学习者可以通过实际操作,深入了解Android开发的整个流程,提升自己的实战能力。 此外,我们还提供了一系列练习题,旨在巩固所学知识,检验学习成果。这些练习题既有基础题,也有难度较高的挑战题,适合不同层次的学习者进行练习。 三、Android开发工具集 在Android开发过程中,选择合适的工具能够大大提高开发效率。因此,我们整理了常用的Android开发工具集,包括开发工具、测试工具、性能优化工具等。这些工具都是经过我们精心筛选和测试的,能够帮助开发者们更加高效地进行Android开发工作。 总的来说,这份Android项目资源包是一份不可多得的学习资料,无论你是初学者还是有一定经验的开发者,都能从中受益匪浅。我们希望通过这份资源包,为广大Android开发爱好者与从业者提供一个更加便捷、高效的学习平台,共同推动Android开发领域的发展。
FFmpeg的软解硬解是两种不同的解码方式。软解是指使用CPU计算进行解码的过程,而硬解则是利用GPU进行解码和渲染的过程。 对于FFmpeg的软解,可以通过编译的库里面含有videotoolbox模块来实现硬解,例如在iOS平台上。软解的流程一般是先进行解码,然后将解码出来的数据进行格式转换,再通过件来渲染显示出来。软解的优点是可以在多种平台上运行,但是当需要同时解码多个视频或者处理复杂的视频时,CPU资源的占用会增加,可能导致卡顿现象。 而FFmpeg的硬解,则是利用件加速进行解码和渲染。例如,可以调用ffmpeg的dxva2硬解H264/H265图像,输入为一264/265数据,输出为YUV数据,264解码输出为YUV420P,265解码输出为NV12格式。硬解的优点是可以减轻CPU的负担,提高解码和渲染的效率,特别是在处理大量视频或者高分辨率视频时,能够更好地利用GPU的计算能力。 综上所述,FFmpeg的软解硬解是两种不同的解码方式,软解使用CPU进行解码和渲染,硬解则利用GPU进行解码和渲染,具体选择哪种方式取决于实际需求和平台支持。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [FFmpeg的软解硬解](https://blog.csdn.net/yinshipin007/article/details/131616862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [ffmpeg+dxva2硬解](https://download.csdn.net/download/lishi_1991/13012092)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [FFmpeg的硬解码方式梳理](https://blog.csdn.net/T__zxt/article/details/125008548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ssq不是上上签

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值