1. 常用的编码格式

编码格式:一个视频文件本身,通常由音频和视频两部分组成。例如视频文件,就是由avc视频编码+AAC音频编码组成的,常见的视频编码格式有Xvid,AVC/H.264,MPEG1,MPEG2 等,常见的音频编码有MP3、AAC等。

编解码格式:是数据按那种方式编码压缩,便于网络传输和降低带宽的需要;

文件格式:是将内容按具体的编码格式压缩后,以该文件所规定的格式进行封装的结果,即容器的概念

视频格式即容器:就是把编码器生成的多媒体内容(视频,音频,字幕,章节信息等)混合封装在一起的标准。容器使得不同多媒体内容同步播放变得很简单,而容器的另一个作用就是为多媒体内容提供索引,也就是说如果没有容器存在的话一部影片你只能从一开始看到最后,不能拖动进度条(当然这种情况下有的播放器会话比较长的时间临时创建索引),而且如果你不自己去手动另外载入音频就没有声音。

视频的编码格式有h.263,h.264,mpeg-4等,视频的文件格式有AVI,MPEG,MOV等格式,h.263,h.264,mpeg-4是3种不同的编解码器。
 

2. 参数

2.1 视频码率

是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高,这样表现出来的的效果就是:视频画面更清晰画质更高。

2.2 视频帧率

通常说一个视频的25帧,指的就是这个视频帧率,即1秒中会显示25帧;视频帧率影响的是画面流畅感,也就是说视频帧率超高,表现出来的效果就是:画面越显得流畅。你也可以这样理解,假设1秒只显1帧,那么一段视频看起来,就是有很明显的卡顿感,不流畅不连惯。当然视频帧率越高,意味着画面越多,也就相应的,这个视频文件的大小也会随之增加,占用存储空间也就增大了。

2.3 视频分辨率

分辨率就是我们常说的600x400分辨率、1920x1080分辨率,分辨率影响视频图像的大小,与视频图像大小成正比:视频分辨率越高,图像越大,对应的视频文件本身大小也会越大。

2.4 IPB帧概念

2.4.1 I 帧

帧内编码帧,帧表示为关键帧,可以理解为这一帧画面的完整保留,解码时只需要本帧数据就可以完成。(包含完整画面)

I 帧的特点

一般而言,打印机Dpi最高可达300。而手机厂商一般会指定Dpi,如下:

  • 它是一个全帧压缩编码帧,它将全帧图像信息进行JPEG压缩编码及传输
  • 解码时仅用 I 帧的数据就可重构完整图像
  • I 帧描述了图像背景和运动主体的详情
  • I 帧不需要参考其他画面而生成
  • I 帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量)
  • I 帧不需要考虑运动矢量
  • I 帧所占数据的信息量比较大

2.4.2 P帧

前后预测编码帧,P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要之前缓存的画面叠加上本帧定义的差别,生成最终画面。

(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

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

P 帧的特点

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

2.4.3 B帧

双向预测内插编码帧。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况,但我这样说简单些),换言之,要解码B帧。不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。

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

B帧的特点:

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

2.5 GOP

在视频编码序列中,GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。

所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,画面细节更多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。

需要说明的是,通过提高GOP值来提高图像质量是有限度的,在遇到场景切换的情况时,H.264编码器会自动强制插入一个I帧,此时实际的GOP值被缩短了。另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得以恢复,所以GOP值也不宜设置过大。

同时,由于P、B帧的复杂度大于I帧,所以过多的P、B帧会影响编码效率,使编码效率降低。另外,过长的GOP还会影响Seek操作(找I帧)的响应速度,由于P、B帧是由前面的I或P帧预测得到的,所以Seek操作需要直接定位,解码某一个P或B帧时,需要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越长,需要解码的预测帧就越多,seek响应的时间也越长。

2.6 比特率

通常决定视频和音频文件的大小和质量:比特率越高,质量越好,文件大小也越大。

码率影响视频文件的大小,码率越大,视频文件越大;码率越小,视频文件越小。动态编码方式,把较高的采样率用于复杂的动态画面,而把较低的采样率用于静态画面,合理利用资源,达到画质与文件大小可兼得的效果。

码率 (kbps) = 文件大小 (MB) / 时间 (秒)

视频比特率以多种方式影响视频质量。首先,它是衡量任何视频文件大小的关键指标。其次,高视频比特率导致高视频质量,而低比特率导致差的视频质量。但是,使用极高的比特率只是浪费带宽。

帧率与画面的流畅度成正比。帧率越大,画面越流畅;帧率越小,画面有卡顿感。可变码率编码中,帧率也会影响文件的大小,帧率越高,每秒钟采集的画面越多,需要的码率越高,体积也越大。画面的帧率高于 16 时,人眼就会认为是连贯的,当帧率达到一定数值后,再增长的话,人眼也不容易察觉到有明显的流畅度提升了。


如果限定码率,那么帧率越高,编码器就必须加大对单帧画面的压缩比,就是通过降低画质来承载足够多的帧数。一般 fps = 20 就已经可以达到很好的用户体验了。

视频文件大小就是由码率决定的,而且是成正比。 码率的单位是kbps,也就是kb/s

简单来说,码率越高越清晰(不考虑其他条件的情况下)

3 封装

平常我们所看的视频文件后缀都有诸如mp4、rmvb、mkv、avi等等 (各种类型的具体差异这里就不阐述了),这些是文件的扩展名,其实这背后也意味着文件的封装格式

封装相当于一种储存视频信息的容器,我们所看的视频包含音频和视频两个部分(有时还包括字幕),H.264就是视频编码,aaC、mp3等是音频编码,我们把用H.264视频编码和MP3音频编码按照mkv的封装标准封装起来,这样我们看到的就是mkv格式的视频文件。

封装格式并不影响画质,它只负责把内部的视频轨和音频轨集成在一起,并不对内容造成影响。
 

4. 像素格式

4.1 RGB

4.2 YUB

YUV,是一种颜色编码方法。常使用在各个影像处理组件中。 YUV在对照片或影片编码时,考虑到人类的感知能力,允许降低色度的带宽。

三个分量:

  • Y表示明亮度(Luminance或Luma),也就是灰度值
  • U(Cb)表示色度(Chrominance)
  • V(Cr)表示浓度(Chroma)

UV一起描述影像色彩和饱和度,用于指定像素的颜色

对于 YUV 图像来说,并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应自己的 UV 分量,也可以几个 Y 分量共用 UV 分量

YUV采样格式

YUV 4:4:4 采样,意味着 Y、U、V 三个分量的采样比例相同,因此在生成的图像里,每个像素的三个分量信息完整,都是 8 bit,也就是一个字节。

 YUV4:4:4  完全抽样,每一个Y对应一组UV分量,对于w*h的一幅图像,存储需要w*h*3*8bit= 3*w*h 字节

YUV4:2:2 表示2:1水平抽样,垂直2:1抽样,每两个Y共用一组UV分量,对于w*h的一幅图像,存储需要w*h*1*8+w*h*1*8/2bit +w*h*1*8/2bit=2*w*h 字节

YUV4:2:0 表示2:1的水平抽样,垂直2:1抽样,每四个Y共用一组UV分量对于w*h的一幅图像,存储需要w*h*8bit+w*h**8bit/4+w*h**8bit/4=3/2*w*h 字节

YUV4:1:1 表示4:1水平抽样,垂直完全抽样,每四个Y共用一组UV分量对于w*h的一幅图像,存储需要w*h**8bit+w*h**8bit/4+w*h**8bit/4=3/2*w*h 字节

(YUV420并不是说有一个分量不存在,而是对uv分量交错取样)
————————————————
版权声明:本文为CSDN博主「ELIO WONG」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45196915/article/details/120954709


参考链接:

(15条消息) 视频编码格式、视频码率、视频帧率、分辨率的概念_视频码率和帧率_Wanderer001的博客-CSDN博客

https://blog.csdn.net/chengyq116/article/details/103602792

https://blog.csdn.net/qq_40733911/article/details/89949339

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐