共计 6216 个字符,预计需要花费 16 分钟才能阅读完成。
前言
在后面几篇文章中,咱们实现了音频相干基础知识的学习,从明天开始,咱们要暂别音频,持续学习视频相干根底内容。
虽说声音在咱们日常的生存、工作、娱乐过程中,施展着不可代替的作用,但人们常说,百闻不如一见、耳听为虚眼见为实。咱们对于世界的意识、对于沟通和互动的需要从未满足于“声音”这一个路径,在现在这个“看脸”的时代,咱们很多时候还谋求“看见”、“面对面”,而这就是视频存在的意义。
绝对于纯音频,音视频能传递更直观、更丰盛的信息,很多时候,视频的退出赋予了音频血肉,也给予了咱们更多的抉择。所有 基于纯音频的场景,都能够通过退出视频元素而演变出新的玩法,比方音频语聊降级为视频通话、电台直播转变为秀场直播、语音课堂降级为视频课堂等等。当然,视频元素也并不局限于“摄像头”,屏幕采集、版权影视资源都能够作为视频数据源,满足了游戏直播、一起看电影等场景。
既然“视频”有这么多价值,作为一个音视频利用开发者,咱们天然要来好好地理解一下它。
视频的实质 —— 图像
在前几次和声音打交道的过程中,咱们理解到声音的实质是物体振动产生的波,咱们对于声音的感知,其实是通过耳膜感知了声波的振动,所以对于声音的学习是从声波的采集以及数字化开始的。当初,咱们开始和视频打交道,天然要从视频的实质、以及咱们对视频的感知形式聊起。
那么,视频是如何产生的呢?
大家肯定有接触过“翻页连环画”,这种连环画的每一页都是动态的图片,常态下平平无奇,但如果咱们疾速地拨动翻页,让每一页图片疾速、连贯地进行展现,本来“动态”的图片,在视觉上竟然变成了“动静”的画面(如下图)。
这里“动态图片”之所以会转变为“动静画面”,是基于人眼的“视觉暂留“个性:咱们观看物体时,物体首先成像于视网膜、并由视神经传入大脑,大脑才感知到物体的像。而当物体从眼帘中移去时,视神经对物体的印象不会立刻隐没,会连续几百毫秒。当旧图像隐没、新图像替换呈现的频率足够快时,前后图像在视觉上就产生了“连贯”,造成了“动静画面”。而“动静画面”也就是咱们所说的“视频”。
从“翻页连环画”的景象看,视频的实质其实是一帧帧间断展现的图像 。而咱们对视频内容的感知形式,就是通 过眼睛捕捉到一帧帧图像上的“色调”。无论是最简略的黑白默剧,还是最丰盛的炫彩影视,都须要由色调组成血肉和骨骼。
所以,咱们对于视频常识的学习,还须要从意识“色调”开始。
图像的血肉和骨骼 —— 色调
大家都晓得,眼睛之所以能看到物体,是因为接管了物体反射的光波。而色调,则是大脑对光的一种“感觉”。相较于声音的“只可言传,不可意会”,色调对于咱们来说,是“只可眼观,不可言传”的。为了不便对色调进行对立形容,也为了让数字电路能辨认、解决色调数据,咱们须要 利用数字化的伎俩对色调进行定义。
说到色调的定义形式,最为大家所熟知的是“光的三原色模型”。光进入人眼后,视觉细胞会产生多个信号,其中有 三种单色光信号:红(Red)、绿(Green)、蓝(Blue),这三种单色光按不同比例组合,造成了不同的色调,咱们也称其为 RGB 模型。参考 RGB 模型,咱们选定了三种色调重量,再对每种单色重量进行量化,也就实现了对色调的数字化解决。
这种解决形式所应用的“色调模型”的概念,很容易和“多维空间、多维坐标系”分割起来。比方 RGB 模型的三个重量,能够别离视为三维空间的 X、Y、Z 坐标,确定了具体的 RGB 重量值,相当于确定了一个(X,Y,Z)坐标点,每个不同的点即代表不同的色调。如果咱们计算出每个重量的取值范畴(坐标范畴),那么该范畴内的所有重量的取值组合,就确定了一个色调空间(Color Space),该空间中蕴含了该色调模型可示意的所有色彩。
对于人眼来说,能辨认的色调数量无限,兼顾思考技术瓶颈,理论利用中须要展现、可能展现的色调也是无限的,咱们往往不须要一个色调模型的所有色彩,不同场景下个别只须要选用某个色调“子空间”,作为其规范的色调空间(也称为“色域”)。而不同软硬件平台,只有约定好反对雷同的色调空间,只应用该色调空间内的色彩,就能实现兼容互通,否则,它们对同一种色调的展现就可能会呈现差别。
在不同畛域制订的泛滥色调空间中,有一个比拟非凡的空间:CIE 色调空间,它囊括了人眼所能感知的所有色调 。CIE 色调空间经常被当作规范的参考系,用于不同色调空间之间的比拟。如果咱们将 CIE 色调空间中的所有色调,通过数学模型映射到一个二维立体中,将失去一个如下的 色域马蹄图,关闭区域即为 CIE 色调空间所能示意的所有色彩。
CIE 色调空间:人眼的可视色调范畴
当然,除了基于光的三原色的 RGB 模型,色调模型 / 色调空间还有很多种,常见的比方 YUV、CMYK、HSV、HSI 等等。而在 RTC 利用中,次要应用的是 RGB 和 YUV,咱们前面会重点理解这两种色调空间。
而在理解具体的色调空间之前,咱们还有一个疑难须要解答:色调,是如何组成图像的呢?
虽说视频的实质是图像,但图像并非不可分割,它依然有更小的组成单位 –“像素”(Pixel)。对于图像和像素的关系,大家能够先察看如下两张图片:
在下面的图片中,左图为失常尺寸的图片全貌,右图为放大肯定倍数之后的部分截图(企鹅的头部)。
咱们能够看到,本来细腻的图片,在放大之后呈现了一个个小方块,这些或色调各异、或色调相近的小方块按肯定规定排列组合,最终出现了“企鹅”的形象。这里的小方块,就是所谓的“像素”。
一个像素,是图像的一个最根本单元,是形成图像的一个色点,咱们也能够称其为像素点。每个像素点上记录了某种色调空间的每个重量值(比方 R、G、B),不同的重量值组合决定了这个像素点所示意的色彩,多个示意特定色彩的像素点,按某种规定排列组合,就造成了残缺的图像。能够说,“像素们”承当了图片色调形成的重任。
好了,对于像素、以及像素与图像色调的形成关系,大家就先理解到这,前面咱们还会和它们有进一步接触。当初,让咱们回到色调空间的话题上,来具体理解一下,RTC 利用中最常应用的色调空间:RGB 和 YUV。
1、RGB
首先,咱们来认识一下 RGB 色调空间。
咱们后面已初步理解,RGB 色调模型基于光的三原色原理建设,其三个重量为:红(Red)、绿(Green)、蓝(Blue)。在 RGB 模型下,图像的每一个像素点都会存储 R、G、B 三个重量(如下图),每个重量取不同的数值(0 ~ 255),该像素点就能综合呈现出不同的色调。基于此,如果按(R,G,B)的形式记录,那么(255,0,0)、(0,255,0)、(0,0,255)别离示意的就是最纯正的 红、绿、蓝。而比拟非凡的,若 RGB 三个重量值均为 0,综合失去彩色;反之,若三个重量取最大值 255,综合失去红色。
RGB 可示意的色调数量可达 1677 万,这远远超过了人眼的感知范畴(约 1000 万种),正因如此,RGB 被广泛应用于各种显示畛域。而不同畛域、不同利用场景,依据其所需的色彩范畴,又建设了基于 RGB 模型的、不同的色调子空间,最常见的有 sRGB 和 Adobe RGB。
sRGB 和 Adobe RGB
sRGB 色调空间由 Microsoft 在 1997 年主导制订,被广泛应用于显示器、数码相机、扫描仪、投影仪等设施。大家选购显示器时,必定有在产品个性介绍中看到过诸如“99% sRGB、100% sRGB”之类的指标,其含意即为该显示器对 sRGB 色调空间的笼罩水平,数值越高,意味着该显示设施所反对的色调越丰盛。而 Adobe RGB 比 sRGB 晚问世一年,由 Adobe 在 1998 年提出,它在 sRGB 的根底上减少了 CMYK 色调空间(一种专用于印刷业的色调空间,模型重量为青(Cyan),洋红(Magenta),黄(Yellow),黑(Black)),Adobe RGB 跟随着 Adobe 设计软件全家桶被广泛应用于平面设计行业。
sRGB 和 Adobe RGB 的比照
对于 sRGB 和 Adobe RGB 的比拟,咱们能够借助 CIE 色调空间马蹄图 作为参考。
如下图,咱们将 CIE、sRGB 和 Adobe RGB 的色调范畴换算到同一个立体上。最外围的色调区域为 CIE 色调空间,三角形局部为 sRGB 和 Adobe RGB。能够看到,sRGB 和 Adobe RGB 的色调范畴均小余 CIE,然而 Adobe RGB 的覆盖范围比 sRGB 更广,尤其是在绿色区域笼罩得更多(sRGB 大概能笼罩 35% 的 CIE,Adobe RGB 则为 50%),这使得 Adobe RGB 在摄像、图像处理、保真方面更熟能生巧。
sRGB 和 Adobe RGB 的比拟
不过,即使 Adobe RGB 相较 sRGB 更杰出,在利用范畴上仍旧是 sRGB 更广。作为“前辈”,抱着 Windows 的大腿,sRGB 凭借 Windows 雄厚的用户根底失去了宽泛的遍及。现在,互联网上绝大多数内容,比方视频网站的影视剧、比方这篇文章中的图片,根本都是以 100% sRGB 的色调规范进行显示的。一张 Adobe RGB 规范的图片如果放在网页上观看,其色彩可能会变淡(绝对于原始色调),这是因为 Adobe RGB 图片的色调超过了网页的显色规范,局部色调信息呈现了失落。但即便如此,对于大部分用户来说,日常场景应用 sRGB 未然足够,当须要更广的色域以达到更优质的色调成果时(比方业余平面设计 / 摄影场景),才有必要思考 Adobe RGB。
从 RGB 两种子色调空间的利用场景看,不得不抵赖 RGB 和大家的日常生活已是非亲非故。然而,即使在采集、显示等用处上 RGB“一家独大”,当聚焦到视频解决畛域时,它却有些施展不开手脚。
RGB 在示意色彩时有一个特点,那就是其三个通道重量是相干的,缺一不可。也即每个像素点必须同时存储 R、G、B 三个重量值能力正确示意色彩,这导致它不便于做编码压缩,如果用于存储或传输,会占用大量的空间和带宽(对于空间和带宽的重要性,咱们在 音频必知必会 – 音频编解码中已有过探讨)。空间和带宽问题,在一帧图像上或者能够勉强忍耐,但在视频资源上,就十分严厉了(时长 1s 的视频资源,个别蕴含数十帧的图像,空间和带宽占用将呈数十倍增长)。
因而,咱们还须要其余的色调空间,来代替 RGB 用于视频解决畛域,而这就是接下来要和大家介绍的,YUV 色调空间。
2、YUV
既然 RGB 三个重量的相关性,制约了其在视频畛域的利用,作为其上位抉择的 YUV 天然不能吃一堑; 长一智。YUV 色调空间也有三个重量 Y、U、V,但和 RGB 不同的是,其三个重量并非都参加色彩的示意。
YUV 的三个重量中,Y 重量用于示意亮堂度(Luminance),决定一个像素是明、或暗(能够了解为是黑、或白)以及其明暗的水平。咱们仅记录明暗不同的 Y 重量,就能示意出图像的总体轮廓(如下图中的【Y】)。而 U、V 重量示意色度(Chrominance),用于定义色调和饱和度(如下图中的【U】【V】)。一个记录了 Y 重量的像素,再增加上 U、V 重量,图像轮廓中就填充了“黑白、明暗”之外的其余色调。
YUV 和 其三个重量
不难发现,即便没有 U、V 重量,仅凭 Y 重量咱们也能“辨认”出一幅图像的根本内容,只不过此时出现的是一张黑白图像。而 U、V 重量为这些根本内容赋予了色调,黑白图像演变为了彩色图像。这听起来是否有些似曾相识呢?这其实也是黑白电视和彩色电视之间的关系。
YUV 是在黑白、彩色电视的过渡时期应运而生的,它这种既能够残缺记录黑白信号,又能通过仅记录 Y 通道信号来示意黑白画面的个性,很好地解决了黑白电视与彩色电视的兼容互通问题。并且,因为人眼对于亮度(Y)相较于色度(U、V)更高、更敏感,咱们对于不同亮堂度的辨认能力,远远超过对不同色度的辨认能力。这意味着,咱们能够在保留 Y 重量信息的状况下,尽可能地缩小 U、V 两个重量的采样,以实现最大限度地缩小数据量,同时还能保障人眼视觉失真度最小,这对于视频数据的存储和传输是有极大裨益的。这也是为什么,YUV 相较于 RGB 更适宜于视频解决畛域。
3、YUV 和 RGB 的转换
在理解了 RGB 和 YUV 的基础知识和利用场景后,你可能会有一些纳闷。既然在图像采集、显示方面,咱们次要应用 RGB,然而在图像存储、解决、传输方面,咱们又要抉择 YUV。而在一个残缺的利用场景中,视频的采集、存储、解决、传输、显示等环节,却是互相关联、缺一不可的,这里是否会存在抵触呢?
是的,这里确实存在两种色调空间的应用抵触,咱们解决抵触的形式是“色调空间转换”。
RGB 与 YUV 的互相转换,存在于视频解决链路的各个必要环节。
视频采集设施个别输入的是 RGB 数据,咱们须要将其转换为 YUV 数据再进行后续的解决、编码和传输;同样的,显示设施通过传输、解码环节获取到 YUV 数据后,也须要将其转换为 RGB 数据,再进行生产展现。
对于这两种色调空间转换的细节,大家暂不须要深究,但须要理解到:色调空间转换是一个基于“规范”来执行的过程,只有在明确规范的根底上,能力通过肯定的数学运算实现二者的互相转换。而“规范”有很多种,比方 BT.601、BT.709 等等,不同的规范会有不同的转换公式,有趣味的同学能够去查阅相干的材料做进一步理解。
对于 YUV 和 RGB,除了要理解它们的基本原理,咱们还须要关注它们的“采样形式”和“存储格局”。“采样形式”和“存储格局”相干的内容,十分重要却也比较复杂,咱们将在下一篇文章中,再具体地和大家探讨。
总结
本篇文章咱们重点讲述图像与色调基础知识的第一局部,在明天的学习过程中,大家能够理解到视频、图像、像素和色调之间的关系,也初步意识了两种重要的色调空间:RGB 和 YUV,以及它们的基本原理、差别和分割。
接下来,咱们还是通过一个思维导图,整顿一下所有的内容:
当然,以上的内容还只是开胃小菜,在下一篇文章中,咱们会持续和 RGB、YUV 打交道,看看它们身上还有哪些“未解之谜”。期待和大家的下一次见面。
问:本期思考题
RGB 色彩空间也能示意黑红色和黑白,为什么还须要 YUV 来解决黑白电视和彩色电视之间的兼容互通问题呢?
(🤫下期揭秘)
上期思考题揭秘 ⬇️
问:作为采样率、位宽、声道数的综合指标,音视频编解码码率对音质会有显著的响应,那对于码率的抉择,是否越高越好呢?
答:实践上,对于有损压缩的音频编码,码率越高意味着压缩越少,音质保真度越高。然而,对于码率的抉择,不仅仅须要思考其对音质的影响,还须要关注理论应用场景的需要、限度。
1、对于音乐电台等场景,为了保障音质,会选用比拟高的音频码率(>64kbps),依据不同的采样率、位深和声道数能够适当调整。但在雷同的采样率、位深和声道数下,码率进步到肯定水平后,对音质的晋升已不再显著,持续进步收益不大。须要找到一个音质和压缩率最符合的“甜点”码率。比方,AAC-LC 的甜点码率在 96kbps,相当于 MP3 的 128kbps,曾经达到了 CD 音质;
2、对于语聊房等场景,多人同时上麦,如果码率太高势必会对带宽产生压力,如果有出海需要,因各国家地区的网络基建参差不齐,更要审慎把控码率。按根本需要,16kbps 就能保障语音沟通的品质;
3、码率是能够灵便设置的,同一个 APP 的不同场景,同一个场景下的不同角色,都能够按需设置;
4、ZEGO SDK 反对开发者依据理论需要,自定义音频码率。同时也提供了不同音质规范的预设配置,供开发者间接选用:根底音质 (16 kbps, 单声道)、规范音质 (48 kbps, 单声道;56 kbps, 双声道)、高音质 (128 kbps, 单声道;192 kbps, 双声道)。