抛砖引玉

首先我们先计算以下 1080P 60fps 的视频文件大小


通过上图可知一秒钟的视频应该是342MB,但实际我们看的视频并没有这么大,那是因为我们看的视频都是进行压缩之后的,实际大小只有1~2MB,那到底是如何实现的呢,我们后面慢慢讲解。

分辨率

就如上面所说,1080p是什么?下面这些又是什么?

HD:1280x720
FullHD:1920x1080
2k:2560x1440

上面这些我们日常生活中应该都听过或者看到过,那这些都是什么?没错,这就是分辨率。

分辨率 = 横向像素*纵向像素。

我们经常会看见或听别人说 1920x1080 ,那么 1920x1080 就是分辨率,也就是横向1920个像素*纵向1080个像素。

是不是感觉很简单,那么下面一个问题,1080p是什么?你也许会说应该是 1920x1080的缩写吧,那么 1080i又是什么?看到这里是不是已经懵逼了,其实很简单

  • p:代表逐行扫描(Progressive Scanning)
  • i:代表隔行扫描(Interlace Scanning)

逐行扫描就是一行行扫描生成图像,一帧就是一个图像。

隔行扫描会将视频按照奇数扫描前一帧,然后再按照偶数扫描后一帧,最后将其合并就是一个完整的画面了。

隔行扫描相对于逐行扫描带宽会节省一半,也就是说同样的带宽可以获得更好的清晰度。

帧率

上面所说的 60fps 是什么?没错他就是帧率。

视频格式
封装格式

什么是封装格式?

他是一种容器,它规定了视频的外在,存储视频、音频、媒体信息及字母信息等,例如我们平时看见的 mp4mkvmov 这些就是封装格式。

编码格式

什么是编码格式?h264h265这些就是编码格式。常见的编码格式

MP4:H.264,H.265, MPEG4.. WebM VP8VP9...
 AVI:MPEG-2, AC-1, H.264, DIVX,XVID... 
 RM/RMVB: RV, RM...
 MOV:MPEG-2, XVID, H.264... 
 TSIPS:MPEG-2,H.264, MPEG-4..
 WMy:WMV,AC-1.. 
 MKV:可封装所有的视频编码格式
码率

平时转码视频时经常能看见 -b:v 5000Kbps,那么它究竟是什么呢?没错它就是视频码率(bitrate),音频码率使用 -a:v表示

码率:视频每一秒包含的数据量、信息量。码率直接决定了视频的最终大小及视频的质量。

控制码率的方法

CBR:固定码率,全程码率恒定,文件大小可预期,编码压力小,直播常用;简单场景画质好,复杂场景画质差;属于空间利用率最低的一种方法。

VBR:可变码率 ,码率可变,按需分配,简单场景码率低,复杂场景码率高。

CRF: 固定质量,固定质量模式 CRF值越低,视频看起来质量越高,反之亦然,以观感画质为目标码率、文件大小不可预期。

视频压缩

最开始我们说了,如果视频不压缩那么视频的体积就会特别大,无论是存储或者传输都会特别占用空间,那么通过视频压缩就是将原视频压缩至我们可以正常观看的视频大小了。但是视频压缩也会分为帧内压缩及帧间压缩。

帧内压缩(Intraframe compression)

帧内压缩:将视频的每一帧画面都压缩成JPEG这类有损图像,原理就是尽可能保存视频亮度信息,压缩颜色信息尤其是复杂的颜色信息,通俗来讲就是记录关键帧,剩余的依靠运动轨迹来预测生成视频。可以节省90%的空间。

帧内压缩就是压缩 GOP 图像组中的 I 帧。

帧间压缩(Interframe compression)

帧间压缩(Interframe compression)也称为时间压缩(Temporal_compression),是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的;通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比。

帧内压缩就是压缩 GOP 图像组中的 B 帧与 P 帧。

GOP(Group Of Picture)

画面组,每一组IPB顺的序列包含多少顿,即一个I帧之后要经过多少帧会出现下一个帧。

同码率下,GOP值越大代表模拟出的P、B帧越多,那么视频就越清晰,画面质量就越高。

I帧

关键帧。不参考其他图像帧,只利用本帧的信息进行编码

P帧

预测帧,表示跟前一帧的差别,在I帧的基础上预测得出,比I帧节省一半的空间。利用之前的I帧或P帧,采用运动预测的方式进行帧间预测编码。

B帧

双向预测帧,表示前后帧差别,在 I帧P帧的基础上再次进行预测。比 P帧又节省了一半的空间,提供最高的压缩比,它既需要之前的图
像帧(I帧或P帧),也需要后来的图像帧(P帧),采用运动预测的方式进行帧间双向预测编码

h264编码方式

我们常见的mp4就是h264编码的。

Preset(预设)
  • Faster 超低
  • Fast 低
  • Medium 中
  • Slow 高
  • Very Slow 超高
cpu编码及GPU编码

使用cpu编码的视频质量要高于GPU的视频质量,但是速度想读与GPU要慢很多。