本文将视频相关的理论知识与基础概念划分为 11 个知识点,如下:
视频
分辨率
比特率
采样率
帧率
视频编码
编码标准
视频封装格式
视频解码
视频播放原理
视频与流媒体
1.视频
根据人眼视觉暂留原理,每秒超过 24 帧的图像变化看上去是平滑连续的,这样的连续画面叫视频。
2.分辨率
分辨率是以横向和纵向的像素数量来衡量的,表示平面图像的精细程度。视频精细程度并不只取决于视频分辨率,还取决于屏幕分辨率。
1080P 的 P 指 Progressive scan(逐行扫描),即垂直方向像素点,也就是 “高”,所以 1920X1080 叫 1080P, 不叫 1920P。
当 720P 的视频在 1080P 屏幕上播放时,需要将图像放大,放大操作也叫上采样。
上采样几乎都是采用内插值方法,即在原有图像的像素点之间采用合适的插值算法插入新的元素,所以图像放大也称为图像插值。
简单的记录一下插值算法:
(1)邻插值算法:
将四个像素(放大一倍)用原图一个像素的颜色填充,较简单易实现,早期的时候应用比较普遍,但会产生明显的锯齿边缘和马赛克现象。
(2)双线性插值法:
是对邻插值法的一种改进,先对两水平方向进行一阶线性插值,再在垂直方向上进行一阶线性插值。能有效地弥补邻插值算法的不足,但还存在锯齿现象并会导致一些不期望的细节柔化。
(3)双三次插值法:
是对双线性插值法的改进,它不仅考虑到周围四个直接相邻像素点灰度值的影响,还考虑到它们灰度值变化率的影响,使插值生成的像素灰度值延续原图像灰度变化的连续性,从而使放大图像浓淡变化自然平滑。
除此之外还有很多更复杂效果更优的算法,比如小波插值、分形等等。
当 1080P 的视频在 720P 屏幕上播放时,需要将图像缩小,缩小操作也叫下采样。
下采样的定义为:对于一个样值序列,间隔几个样值取样一次,得到新序列。
对于一幅分辨率为 MN 的图像,对其进行 s 倍下采样,即得到 (M/s)(N/s) 分辨率的图像(s 应为 M、N 的公约数),就是把原始图像 s*s 窗口内的图像变成一个像素,这个像素点的值就是窗口内所有像素的均值。
最佳体验为屏幕与视频分辨率相同且全屏播放,视频分辨率过高的话屏幕没有能力去呈现,视频分辨率过低的话无法发挥屏幕的能力。
3.比特率
比特率即码率,在不同领域有不同的含义,在多媒体领域,指单位时间播放音频或视频的比特数,可以理解成吞吐量或带宽。
单位为 bps , 即 bits per second,每秒传输的数据量,常用单位有:kbps、mbps 等。
计算公式:码率(kbps)= 文件大小(kb)/ 时长(s)
通俗一点理解就是取样率,取样率越大,精度就越高,图像质量越好,但数据量也越大,所以要找到一个平衡点:用最低的比特率达到最少的失真。
在一个视频中,不同时段画面的复杂程度是不同的,比如高速变化的场景和几乎静止的场景,所需的数据量也是不同的,若都使用同一种比特率是不太合理的,所以引入了动态比特率。
(1)动态比特率
简称为 VBR,即 Variable Bit Rate,比特率可以随着图像复杂程度的不同而随之变化。
图像内容简单的片段采用较小的码率,图像内容复杂的片段采用较大的码率,这样既保证了播放质量,又兼顾了数据量的限制。
比如 RMVB 视频文件,其中的 VB 就是指 VBR,表示采用动态比特率编码方式