音视频常用概念介绍

音视频常用概念介绍

分辨率,帧率和码率

视频是由连续的图像构成的。每一张图像,我们称为一帧(frame)。图像则是由像素(pixel)构成的。一张图像有多少像素,称为这个图像的分辨率。比如说1920×1080的图像,说明它是由横纵1920×1080个像素点构成。视频的分辨率就是每一帧图像的分辨率。

一个视频,每一秒由多少图像构成,称为这个视频的帧率(frame-rate)。常见的帧率有24000/1001=23.976, 30000/1001=29.970, 60000/1001=59.940, 25.000, 50.000等等。这个数字是一秒钟内闪过图像的数量。比如23.976,就是1001秒内,有24000张图像。视频的帧率是可以是恒定的(cfr, Const Frame-Rate),也可以是变化的(vfr, Variable Frame-Rate)。

码率的定义是视频文件体积除以时间,单位一般是Kbps(Kbit/s)或者Mbps(Mbit/s)。注意,1B(Byte)=8b(bit)。所以一个24分钟,900MB的视频:

体积:900MB = 900MByte = 7200Mbit
时间:24min = 1440s
码率:7200/1440  = 5000 Kbps = 5Mbps

硬解

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

  • GPU 硬解码高清视频的优势:
  1. 不需要太好的 CPU,单核足矣,CPU 方面节约不少资金;
  2. 硬解码基本相当于免费附送,不到 500 元的整合主板都能完美支持;
  3. 硬解码让 CPU 占用率超低,系统有能力在看 HDTV 的同时进行多任务操作;
  4. CPU 需要倾尽全力才能解码 HDTV,而 GPU 只需动用 0.1 亿晶体管的解码模块就能完成任务,功耗控制更好;
  • GPU 硬解码高清视频的劣势:
  1. 起步较晚,软件支持度无法与软解相提并论;
  2. 面对杂乱无章的视频编码、封装格式,硬解码无法做到全面兼容;
  3. 软解拥有大量画面输出补偿及画质增强技术,而硬解这方面做得还远远不够;
  4. 硬解码软件设置较为复杂,很多朋友根本不知道该如何正确使用 GPU 硬件解码。

IBP 帧

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

1.基本概念

I帧:即Intra-coded picture(帧内编码图像帧),I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)。又称为内部画面 (intra picture),I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。在MPEG编码的过程中,部分视频帧序列压缩成为I帧;部分压缩成P帧;还有部分压缩成B帧。I帧法是帧内压缩法,也称为“关键帧”压缩法。I帧法是基于离散余弦变换DCT(Discrete Cosine Transform)的压缩技术,这种算法与JPEG压缩算法类似。采用I帧压缩可达到1/6的压缩比而无明显的压缩痕迹。

IDR帧:IDR的全称叫做Instantaneous Decoder Refresh,是一种特殊得I帧,视频开头的I帧一定是IDR帧。比如第1000帧是IDR帧,那么这一帧相当于一个分水岭,从1001帧开始,所有的帧都不能再参照1000帧之前的帧。在closed GOP规定下,0~999帧也不允许参照这个IDR帧以及之后的帧。等于说IDR帧将视频分割成两个独立的 部分:前面的(closed GOP规定下)不能参照后面的,后面的不能参照前面的。 这个性质在播放的时候额外有用:如果我直接从第1000帧开始播放,我可以毫无问题的播放下去,因为我不需要 参照1000帧之前的内容完成解码。我从开头播放,直到999帧的时候,我都不需要参照1000帧及它后面的东西; 1000帧之后的数据都损坏了,0~999帧也能正常播放。 两个IDR帧之间的区间,从一个IDR帧开始,到下一个IDR前的帧结束,叫做IDR区间,又叫做GOP区间。closed GOP设定下,GOP区间可以看做是独立的一段视频:它里面的所有帧,都不需要参照任何区间之外的东西,只要 一个GOP区间是齐全的,区间里面所有的帧都能被解码。我们平时看的视频就是多段GOP区间连接起来的。

P帧 :即Predictive-coded Picture(前向预测编码图像帧)。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B帧:即Bidirectionally predicted picture(双向预测编码图像帧)。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

2.I、B、P 的特点

I 帧特点:
1.它是一个全帧压缩编码帧。它将全帧图像信息进行 JPEG 压缩编码及传输;
2.解码时仅用 I 帧的数据就可重构完整图像;
3.I 帧描述了图像背景和运动主体的详情;
4.I 帧不需要参考其他画面而生成;
5.I 帧是 P 帧和 B 帧的参考帧(其质量直接影响到同组中以后各帧的质量);
6.I 帧是帧组 GOP 的基础帧(第一帧),在一组中只有一个 I 帧;
7.I 帧不需要考虑运动矢量;
8.I 帧所占数据的信息量比较大。

P 帧:前向预测编码帧:
P 帧的预测与重构:P 帧是以 I 帧为参考帧,在 I 帧中找出 P 帧“某点”的预测值和运动矢量,
取预测差值和运动矢量一起传送。在接收端根据运动矢量从 I 帧中找出 P 帧“某点”的预测
值并与差值相加以得到 P 帧“某点”样值,从而可得到完整的 P 帧。
P 帧特点:
1.P 帧是 I 帧后面相隔 1~2 帧的编码帧;
2.P 帧采用运动补偿的方法传送它与前面的 I 或 P 帧的差值及运动矢量(预测误差);
3.解码时必须将 I 帧中的预测值与预测误差求和后才能重构完整的 P 帧图像;
4.P 帧属于前向预测的帧间编码。它只参考前面最靠近它的 I 帧或 P 帧;
5.P 帧可以是其后面 P 帧的参考帧,也可以是其前后的 B 帧的参考帧;
6.由于 P 帧是参考帧,它可能造成解码错误的扩散;
7.由于是差值传送,P 帧的压缩比较高。

B 帧:双向预测内插编码帧:
B 帧的预测与重构
B 帧以前面的 I 或 P 帧和后面的 P 帧为参考帧,“找出”B 帧“某点”的预测值和两个运动矢
量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测
值并与差值求和,得到 B 帧“某点”样值,从而可得到完整的 B 帧。
B 帧特点
1.B 帧是由前面的 I 或 P 帧和后面的 P 帧来进行预测的;
2.B 帧传送的是它与前面的 I 或 P 帧和后面的 P 帧之间的预测误差及运动矢量;
3.B 帧是双向预测编码帧;
4.B 帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
5.B 帧不是参考帧,不会造成解码错误的扩散。

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

3.DTS、PTS 的概念

DTS、PTS 的概念如下所述:

DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。

当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。

比如一个视频中,帧的显示顺序是:I B B P,先到来的 B 帧无法立即解码,需要等待它依赖的后面的 I、P 帧先解码完成,因此这几帧在视频流中的解码顺序可能是:I P B B,这时候就体现出每帧都有 DTS 和 PTS 的作用了。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。顺序大概如下:

在这里插入图片描述

4.GOP (画面组)

GOP(Group of Pictures)策略影响编码质量:所谓 GOP,意思是画面组,一个 GOP 就是一组连续的画面。
MPEG编码将画面(即帧)分为 I、P、B 三种,I 是内部编码帧,P 是前向预测帧,B 是双向内插帧。简单地讲,I 帧是一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化。没有 I 帧,P 帧和 B 帧就无法解码,这就是 MPEG 格式难以精确剪辑的原因,也是我们之所以要微调头和尾的原因。
MPEG-2 压缩的帧结构有两个参数,一个是 GOP(Group Of Picture)图像组的长度,一般可按编码方式从 1-15;另一个是 I 帧和 P 帧之间 B 帧的数量,一般是 1-2 个。前者在理论上记录为 N,即多少帧里面出现一次 I 帧;后者描述为多少帧里出现一次 P 帧,记录为 M。

  • 字节大小:I > P > B
  • 解码顺序:I -> P -> B

在这里插入图片描述

参考

https://www.cnblogs.com/qcssmd/p/5537610.html
https://blog.csdn.net/justloveyou_/article/details/88084171
https://www.4k123.com/thread-8194-1-1.html
https://www.jianshu.com/p/11155c7e8b09
DTS,PTS
https://xiaodongxie1024.github.io/2018/02/23/codec/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值