一 图像颜色模式:
-
RGB:
图像存储格式,红、绿、蓝三原色的亮度来定量表示颜色,RGB -
YUV:
图像存储格式,一种颜色编码方法
Y:表示明亮度(Luminance或Luma),也就是灰阶值。
U:表示色度(描述影像色彩及饱和度,用于指定像素的颜色)Cb,蓝色通道与亮度的差值。
V:表示色度,Cr,红色通道与亮度的差值。常用YUV格式:YCbCr4:2:0、YCbCr4:2:2、YCbCr4:1:1和YCbCr4:4:4
4:4:4表示完全取样。
4:2:2表示2:1的水平取样,垂直完全采样。
4:2:0表示2:1的水平取样,垂直2:1采样。
4:1:1表示4:1的水平取样,垂直完全采样。RGB与YUV转换公式 (RGB取值范围均为0~255)
Y=0.299R+0.587G+0.114B ⁄ R=Y+1.14V
U=-0.147R-0.289G+0.436B ⁄G=Y-0.39U-0.58V
V=0.615R-0.515G-0.100B ⁄ B=Y+2.03U -
HSV:
面向用户的颜色,HSV颜色检测色调H:
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
饱和度S:
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
明度V:
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。
二 音视频基础概念
- 帧(Frame)
简单的理解帧就是视频或者动画中的每一张画面,帧代表一幅静止的图像,分为I帧,P帧,B帧。 - 帧率
帧率(Frame rate) = 帧数(Frames)/时间(Time),单位为帧每秒(f/s, frames per second, fps)。 - 刷新率
屏幕每秒画面被刷新的次数,分为垂直刷新率和水平刷新率,一般我们提到的都是指垂直刷新率,以赫兹(Hz)为单位,刷新率越高,图像就越稳定,图像显示就越自然清晰。
最常见的刷新频率是 60 Hz。
10~12 FPS:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10至12帧的时候,就会认为是连贯的,此现象称之为视觉暂留。
24 FPS:一般电影的拍摄及播放帧数是每秒24帧。
60 FPS:这个帧率对人眼识别来说已经具备较高的平滑度。(基准帧率,每帧16ms)
85 FPS:人类大脑处理视频的极限,人眼无法分辨更高频率的差异。 - 分辨率
视频、图片的画面大小或尺寸。 - 码率/比特率
单位时间播放连续的媒体如压缩后的音频或视频的比特数量。常用单位“比特每秒”,缩写是“bit/s”。比特率越高,带宽消耗得越多。 - 容器(Container)
容器就是一种文件格式,比如flv,mkv等 - 流(Stream)
是一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据 - 编解码器(Codec)
是对视频进行压缩或者解压缩的工具 - 复用(mux)
把不同的流按照某种容器的规则放入容器。 - 解复用(demux):
把不同的流从某种容器中解析出来。
三 视频编解码
- 编码的流程
采集–> 获取到视频帧–> 对视频帧进行编码 --> 获取到视频帧信息 --> 将编码后的数据以NALU方式写入到文件 - 硬编码
使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等 - 软编码
使用CPU进行编码,软编码通常使用:ffmpeg+x264 - 视频编码协议:
- H. 264:低码率,高质量,高容错 。(编码单位固定16*16)开源实现:ffmpeg、openh264、x264。
- H. 265:能达到H.264两倍之压缩率,可支持4k分辨率,最高到8k。(编码单位88-6464)开源实现:ffmpeg、libde265、x265。
二者比较:H.265更为先进,同样画质的情况下,265理论存储空间节省50%,同样码率下,265理论画质提高30%-40%。 - MPEG
- DTS和PTS:
DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。 - 硬件加速
利用硬件模块来替代软件算法以充分利用硬件所固有的快速特性。硬件加速通常比软件算法的效率要高。
将2D、3D图形计算相关工作交给GPU处理,从而释放CPU的压力,也是属于硬件加速的一种。 - 硬解
使用硬件模块来解析视频、音频文件等 - 软解
用CPU去计算解析。 - 视频编码中的帧
- I帧:表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
- P帧:表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
- B帧:是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累~。
- GOP
Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。
一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。
简而言之:- 字节大小:I > P > B
- 解码顺序:I -> P -> B
四 视频封装格式(Container format)
格式 | 全名 | 开发商 | 初版年限 | 特点 |
---|---|---|---|---|
MP4 | MP4 | Moving Picture Experts Group,即 MPEG(动态图像专家组) | 1998 | 常用有损压缩格式,通用性强 |
AVI | Audio Video Interleaved(音频视频交错格式) | 微软 | 1992 | 体积大算法简单 |
MOV | QuickTime 影片格式 | Apple | 1991 | 苹果专属格式对很多其他的播放器支持不是很友好 |
WMV | Windows Media Video | 微软 | 2003 | 微软的专业视频格式,兼容性并不是很好 |
FLV | Adobe Flash 网络流媒体格式 | Adobe | 2002 | 被淘汰的早期网络视频格式 |
MKV | Matroska 多媒体容器 | Matroska.org | 2002 | 最有包容性的视频格式,能容纳无限量、多种不同类型编码的视频、音频及字幕流 |
WebM | WebM | 2010 | 谷歌推出的 HTML5 标准的网络视频标准,以MKV容器格式为基础开发 | |
RMVB | RMVB | Real Networks | 1997 | 根据不同的网络传输速率,而制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放,具有体积小,画质不错的优点。已过时。 |
五 音频格式
- WAV:因其文件扩展名为wav,微软和IBM联合开发的标准,数据本身的格式为PCM或压缩型,属于无损格式。
- MP3 : MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。压缩比4:1~10:1之间。
- AAC:Advanced Audio Coding, 出现于1997年,由Fraunhofer IIS、杜比实验室、AT&T、Sony、Nokia等公司共同开发。AAC压缩比通常为18:1。相比MP3,采用更高效的编码算法,音质更佳,文件更小。
- Opus:Opus格式是一个开放格式,使用上没有任何专利或限制,比MP3、AAC、HE-AAC等常见格式,有更低的延迟和更好的声音压缩率。2012年7月2日,Opus被IETF批准用于标准化。
本文内容收集于网络