@qidiandasheng
2020-09-18T11:08:17.000000Z
字数 2515
阅读 1373
音视频
分辨率:单位英寸中所包含的像素点数;
帧率:FPS(frame per second 每秒钟要多少帧画面)
码率:BPS(Bits Per Second 编码器每秒编出的数据大小)单位是kbps,比如800kbps代表编码器每秒产生800kb的数据。
分辨率是指单位长度内像素点的数量,它的单位通常为ppi。
如72ppi表示1英寸包含72个像素点,300ppi表示每英寸含300个像素点。分辨率决定了位图细节的精细程度,通常情况下,分辨率越高包含的像素就越高,图像就越清晰。
当然我们这是没有在其他因素影响的情况下,但在有些情况下,分辨率越高可能越不清晰。
比如我们固定码率,如果我们分辨率越高,那么就需要压缩图像来减少每秒编出的数据大小,编码器就会通过减少色彩信息或引入“马赛克”等各种方式来承载足够多的像素点,视频可能也就会不清晰了。
影响画面流畅度,与画面流畅度成正比:
肉眼极限FPS为一般说法为每秒30帧,但这个也视情况而定。人眼并不是摄影机,视觉不是被动一帧帧记录看到的图像,而是神经系统主动处理视觉信息的过程。
基本上电影都为每秒24帧,也有高帧率的设备拍好后再降低帧率,模仿“电影的感觉”。但比如李安120帧的电影,主要适应了电影中高速镜头的细节,让人眼能对高速镜头下的画面看的更加清楚。
视频码率就是数据传输时单位时间传送的数据位数,也叫取样率、码流率。
一般我们用的单位是kbps即千位每秒(kb/s)。单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。
当然码率也不一定越高越好,在我们肉眼分辨的范围内,当码率高到一定程度,感觉没有什么差别。所以码率设置有它的最优值,H.264(也叫AVC或X.264)的文档中,视频的建议码率如下:
手机设置码率建议:
清晰度和码率的关系
在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,清晰度越低,图像越清晰。
在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。
我们在视频传输的时候需要对原始视频格式进行编码,于是就出现了各种编码格式,其中主流的就是h264,出现这种格式的原因主要就是对视频大小进行压缩。
比如我们视频的原生格式YUV420,宽度为480,高度为320的视频,每一帧 需要 480*320*3/2 = 230400 字节。假设视频每秒20帧,那么30秒的视频 是 230400 * 20 * 30 = 138240000 字节 大约138M。然而同样分辨率的h264视频可能只要1~2M左右。
h264编码最主要的一点就是生成了IBP帧,通过将视频帧分为关键帧和非关键帧来对视频进行一个压缩。
解码的话就是一个反向的过程,把h264格式解码为原始的YUV420格式。
在iOS上一般使用硬件编码的方式,解码时使用软编的方式。
硬编码是系统提供的,由系统专门嵌入的硬件设备处理音视频编码,主要计算操作在对应的硬件中。硬编码的特点是,速度快,cpu占用少,但是不够灵活,只能使用一些特定的功能。
软编码是指,通过代码计算进行数据编码,主要计算操作在cpu中。软编码的特点是,灵活,多样,功能丰富可扩展,但是cpu占用较多。
英文全称Group Of Pictures
,一般来说,指的就是两个I帧之间的间隔。
编码器将多张图像进行编码后生产成一段一段的 GOP ( Group of Pictures )
, 解码器在播放时则是读取一段一段的 GOP 进行解码后读取画面再渲染显示。
GOP
是一组连续的画面,由一张 I 帧和数张 B / P 帧组成,是视频图像编码器和解码器存取的基本单位,它的排列顺序将会一直重复到影像结束。
视频压缩中,每帧都代表着一幅静止的图像。而在进行实际压缩时,会采取各种算法以减少数据的容量,其中IPB帧就是最常见的一种。
I帧:帧内编码帧(intra picture,也称为关键帧),I帧通常是每个GOP(MPEG所使用的一种视频压缩技术)的第一帧,经过适度地压缩,作为随机访问的参考点可以当成静态图像。I帧可以看做一个图像经过压缩后觉得产物,I帧压缩可以得6:1的压缩比而不会产生任何可觉察的模糊现象。I帧压缩可去掉视频的空间冗余信息,下面即将介绍P帧和B帧是为了去掉时间冗余信息。
P帧:前向预测编码在帧(predictive-frame,前向参考帧),通过将图像序列中前面已编码帧的时间冗余信息去充分去除压缩传输数据量的编码图像,也成为预测帧。
B帧:双向预测内插编码帧(bi-directionalinterpolated prediction frame,双向参考帧),既考虑源图像序列前面的已编码帧,又估计源图像序列后面的已编码帧之间的时间冗余信息,来压缩传输数据量的编码图像,也成为双向预测帧。
简单地讲,I 帧是一个完整的画面,而 P 帧和 B 帧记录的是相对于 I 帧的变化。如果没有 I 帧,P 帧和 B 帧就无法解码。
在视频流中,先到来的 B 帧无法立即解码,需要等待它依赖的后面的 I、P 帧先解码完成,这样一来播放时间与解码时间不一致了,顺序打乱了,那这些帧该如何播放呢?这时就需要我们来了解另外两个概念:DTS 和 PTS。
DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。
当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。
比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中的顺序可能是:I P B B。
DTS 告诉我们该按什么顺序解码这几帧图像,PTS告诉我们该按什么顺序显示这几帧图像。