在视频系列的前几篇推文中,咱们已经接触了视频相关的不少概念,它们都是围绕着几个核心人物 :颜色、像素、图画和视频来展开的。这几个核心人物之间的联系,咱们应该都有了基本的了解,咱们再来简略回忆一下。

音视频开发进阶|第七讲:分辨率与帧率上篇

从颜色空间到颜色: 经过特定的颜色空间 “ YUV “ 或 ” RGB ”,对颜色进行界说;

从颜色到像素: 将界说、量化后的颜色信息记载到像素中;

从像素到图画: 必定数量、记载了不同颜色信息的像素组合,得到一帧完好的图画;

从图画到视频: 一帧帧图画按必定频率接连播映,得到了视频。

以上,便是由像素点及图画、由图画及视频的联系概述。你或许有关注到,在该概述中有两个比较含糊的描绘:必定数量的像素,以及按必定频率播映的图画。那么问题来了,所谓 “数量” 和 “频率”,究竟是怎样界说的、详细取值是多少呢 ?它们关于视频图画会有哪些详细的影响?

何谓“必定数量”的像素?

“必定数量的、记载了不同颜色信息的像素组合在一起,得到一帧完好的图画”。

关于 “必定数量” 是怎样界说的,在系列的上一篇推文中,咱们就给出了标准答案:分辨率。分辨率的界说咱们已开端了解,下面先回忆一下。

  • 分辨率: 视频图画在水平方向、笔直方向上,每行、每列的像素数量。比方:分辨率1280 x 720(宽 x 高),即表明水平方向上每行有 1280 个像素,笔直方向上每列有 720 个像素;

  • 分辨率宽、高相乘得到的数值,即为每帧图画所含像素的总数。 比方:分辨率 1280 x 720(宽 x 高),即说明每帧图画共包括1280 x 720 = 921600 个像素

上述界说中,运用了一种常见的分辨率表明方法:“ 宽 x 高 ” ,实践运用中还有其他表明方法,有的只关注 “高” 的特点、有的只关注 “宽” 的特点,常见的有:

  • 1080P: 表明分辨率 1920 x 1080。P(Progressive)表明逐行扫描,1080P 表明笔直方向有 1080 行像素(“高” 的特点)。相似的还有:360P(640×360)、540P(960×540)、720P(1280×720)等;

  • 4K:表明分辨率4096 x 2160 或 3840 x 2160。K 表明 “1000” 或“千”,4K 表明水平方向有约 4000 列像素(“宽” 的特点)。相似的还有 2K(2560 x 1440)、8K(7680 x 4320) 等等。

分辨率的界说,答复了关于 “必定数量” 的问题,但也仅仅是解释了 “数量” 的界说,并没有描绘 “数量” 的影响。至于不同分辨率、不同数量的像素,究竟会给图片带来哪些影响,咱们需求进一步做评论。

分辨率的影响

所谓眼见为实,关于视频图画而言,没有比直接调查更直观的了解方法了。下面的几幅图,别离是同一个图画画面在 1 x 1、12 x 7、128 x 72、1280 x 720 等分辨率下的体现,咱们逐一调查比照。

(注:在同一显现设备上,单个像素的大小一般是相同的,像素越多、画面面积越大。因为画幅显现约束,也为便利咱们调查,下述各图画的标准有做必定缩放,不必定符合份额联系,但分辨率的大小联系不变。)

音视频开发进阶|第七讲:分辨率与帧率上篇

1 x 1 分辨率: 这是一个极端的比方,此刻整张图画只要一个像素(单像素的面积非常小,肉眼很难识别到,示例图是扩大之后的),只能表明一种颜色,看起来是一个纯色的矩形块,基本不包括有效的图画信息。

12 x 7 分辨率: 咱们有 84 个像素,相关于 1 个像素时能够表明更多的颜色。有了颜色区别后,咱们能够看到画面有了一些轮廓,可是全体仍是糊成一团,但很难辨识到主体的特征。

128 x 72 分辨率: 像素数量添加到较可观的 9216 个,咱们将有更多的像从来记载画面信息,画面中的天空、企鹅等主体开端变得明朗、可分辨,但全体仍是有些“含糊”,缺少细节,就像蒙着一层薄纱。

1280 x 720 分辨率: 像素数量已挨近十万,咱们将拥有足够的像从来记载画面细节,能够看到,企鹅的毛发、神情、姿势,天空的云彩层次都变得明晰,整个画面愈发的实在、细腻。

从完全不可辨识,到含糊含糊,再到明晰细腻,这便是分辨率由低到高所带来的、最直观的改动。

简略总结,一般来说分辨率越高,像素越多,则图画的 “可分辨度” 越高,画面越明晰、细腻,细节也越充足生动。 但留意,这儿强调了“一般来说”,因为“分辨率”和“明晰度” 若要满意 “正相关” 的联系,还需求考虑一些前提条件,假定忽略这些条件,你或许会遇到“分辨率越高,画面却越含糊”的问题。详细是哪些条件呢?咱们待会要评论的内容就会触及这块儿,在评论中揭晓答案。

音视频处理途径上的不同分辨率

在本课程的系列推文中,咱们曾说到音视频数据的的主要处理途径,主要包括收集/烘托、前/后处理、编码/解码、网络传输收/发等环节。每一个环节,都或许会修改音视频数据,而分辨率作为视频图画的基础特点,不可避免地会受到影响。

咱们将常见的、分辨率或许改动的位置标识出来,能够得到下方的途径图:

音视频开发进阶|第七讲:分辨率与帧率上篇

上图中有多种类型的“分辨率”,咱们来逐一整理。

1收集分辨率

和音频相同,视频图画数据的处理一般从收集开端,首要要介绍的,便是 “收集分辨率” 。收集分辨率是从摄像头号收集源获取的、最原始图画的分辨率。 物理摄像头所支撑的收集分辨率能够经过系统 API 获取,一般是个有限的调集。假定你要求摄像头供给该调集之外的装备,它或许会回来调集内的其他临近值。

在收集之后,图画数据会来到前处理阶段,执行比方布景虚化、美颜、滤镜等操作,前处理过后的视频图画分辨率,咱们不妨称之为 “前处理分辨率”。收集分辨率和前处理分辨率,均表明当时处理环节上,一帧图画所包括的原始像素数量,而接下来的 “显现分辨率” 有所不同。

2显现分辨率

当咱们需求烘托视频图画时,比方在本地完成摄像头的预览,就会接触到显现分辨率。显现分辨率指的是整个显现器面板、或许某个指定的显现区域上可用于图画烘托的像素数量,而不是原始图画的分辨率。

“指定的显现区域” 能够是某个 View 布局组件、某个播映器窗口等等,该部分区域上的分辨率,是更灵活意义上的 “显现分辨率”。如下图所示,显现分辨率指的是红框内的像素宽高。

音视频开发进阶|第七讲:分辨率与帧率上篇

显现分辨率一般是固定的(特别指的是整个显现屏面板时),也能够运用宽、高方向的像素数量来界说。比方 4K 屏、2K 屏,便是指显现屏面板在水平方向上最多可包容 约 4000 列、2000 列像素。需求留意的是,显现分辨率与显现屏标准是不同的概念,后者运用长度单位(英寸),一般取显现面板的对角线长度作为衡量,比方常说的 27 寸、24 寸 屏。也正因衡量标准不同,相同标准的显现区域,能够有不同的分辨率。比方 27 英寸的显现屏或许是 2K 的分辨率、也或许是 4K 的分辨率。

显现标准相一起,若显现分辨率越高,则说明显现器的像素越密集,意味着它能够更高密度地呈现画面细节,显现作用越细腻,画面拟真度越高。

3编码分辨率

除了用于本地预览,前处理后的视频图画数据还要持续走到编码环节,进一步做紧缩处理后才干用于网络传输。而在视频编码前,为了满意特定的事务需求、或带宽流量的控制需求,仍或许要修改分辨率,最终以 “编码分辨率” 的装备输出。

编码后,视频图画数据从发送端启程,经过漫漫网络传输链路,来到接纳端。一般来说,若云端服务没有对数据做特别处理,解码阶段的解码分辨率将和前序的编码分辨率共同。解码后的视频数据,会再经由后处理环节,最后烘托到显现器上,相应的也会有后处理分辨率和显现分辨率。

假定,整个处理链路上一切的分辨率均持平,那么一切像素将一一对应、“风平浪静”。但假定某个环节设定的分辨率有改动,比方收集分辨率设置为 1280 x 720,显现分辨率设置为 960 x 540,编码分辨率设置为 1920 * 1080,咱们应该怎样处理呢?

此刻,就需求引出一个基础、却又常用到的视频图画处理技能:缩放。

分辨率的缩放

视频图画的缩放指的是分辨率的缩放,也便是扩大或缩小分辨率。许多运用场景都会触及到分辨率的缩放。比方从 1080P 的收集分辨率缩小至 720P 的编码分辨率,以削减传输带宽占用;将分辨率为 720P 的图画,缩小到 360P 的窗口上预览,或许扩大到 1080P 的显现器上全屏播映等等。

图画在缩放时,像素数量会随分辨率的改动而增减。但要留意的是,像素的削减并非经过随机地 “删去” 来完成,像素的添加也不是经过随便 “捏造” 来完成的。两种操作都需求在原有像素的基础上,运用缩放算法核算得到新的像素,然后重建出新的图片。

1分辨率缩放的基本原理

首要,关于分辨率为 W x H 的图画,咱们能够将其映射到一个二维坐标系上,每个像素对应一个坐标点,假定左下角像素的坐标为(0,0),则右上角像素的坐标为 (W,H)。因为像素的分布是离散、有限的,它们的坐标也都是整数组合,比方(0,0)、(0,1)、(1,1)、…… 、(W,H)。

音视频开发进阶|第七讲:分辨率与帧率上篇

现在,假定需求将分辨率为W0 x H0 的原始图画,缩放至分辨率W1 x H1 的方针图画。咱们先对两个图画别离树立坐标系,则二者的像素坐标可别离表明为P0 ( x0, y0 )、 P1 ( x1 , y1 ) 。缩放的过程,便是已知原图上的像素,求取方针图画的像素P1 的值过程。

音视频开发进阶|第七讲:分辨率与帧率上篇

那么,咱们怎样核算像素P1 的值呢?

首要,咱们留意到缩放虽然改动了图画的像素标准,但仍会保存图画的内容、颜色,也即改动前后的像素值是相同或相似的。最抱负的状况,便是能在原始图画上取实践存在的 P0 ,将其像素值直接赋给 P1。假定,缩放前后的分辨率未产生改动( W0 =W1,H0 = H1),那么方针图画的 P1 ( 0 , 0 ) 在原始图画中的映射即为 P0 ( 0, 0 ),P1 ( 1 , 1 ) 的映射为 P0 ( 1, 1 ),P1 ( 2, 2 ) 的映射为 P0 ( 2, 2 ) ……,整型坐标的 P0 都是原始图画中已知的像素,能够直接取值和赋值给对应的 P1。

假定非抱负的状况,缩放前后的分辨率产生了改动,该怎样处理?该怎样确定 P1 ( x1 , y1 ) 在原始图画上的映射点?

其实,因为图画的缩放是在二维标准上,对 “高度”、“宽度” 的弹性变换,作为图画的最小单位,像素坐标的缩放也能够天公地道。

从分辨率W0 x H0 ,改动到分辨率 W1 x H1 ,宽高上的缩放标准为:

  • W_scale = W1/W0 = x1/x0

  • H_scale = H1/H0 =y1/y0

所以,缩放前后,对应像素的坐标基本映射联系为:

  • x0 = x1 * (W0 / W1)

  • y0 = y1 * (H0 / H1)

也即,方针图画的点P1 ( x1 , y1 ),在原始图画上的映射为P0 ( x1 * (W0 / W1),y1 * (H0 / H1) )。

显然,在分辨率不变的抱负状况下,W0 / W1 =H0 / H1 = 1,P1 ( x1 , y1 )在原始图画上的映射为P0 ( x1 ,y1),符合咱们的推演。而在分辨率改动的状况下,P0 ( x1 * (W0 / W1),y1 * (H0 / H1) )或许会得到非整数的坐标,非整数坐标的像素在原图上是不存在的。

举个比方:原始图画分辨率W0 x H0 = 100 x 100,方针图画分辨率W1 x H1 = 1000 x 1000,此刻方针图画 P1 ( x1 , y1 ) 在原始图画上的映射为P0(x1 * 0.1 ,y1 * 0.1),有如下映射联系:

音视频开发进阶|第七讲:分辨率与帧率上篇

关于实践存在于原图的映射点,能够将原图中该像素的值直接赋给 P1。关于实践不存在于原图的映射点,就要经过特定算法“估算”其像素值,再赋值给 P1。特定算法一般依据插值算法完成,常见的插值算法又包括最附近插值法、双线性插值法、双三次插值法等。这几种插值算法的基本原理,如下方表格所示,咱们做简略了解即可。关于详细的算法解析,在本系列中不做延伸,感兴趣的同学能够查阅资料进一步学习。

音视频开发进阶|第七讲:分辨率与帧率上篇

以上的“附近像素”,指的是在原始图画中实践存在的像素,像素坐标为整型。比方,P0(0.1,0.1) 在原图中不存在,取其周围 4 个实践存在的附近像素,即为 P(0,0),P(0,1),P(1,0),P(1,1)。

依据上面描绘的 “找映射点”、“求映射值” 两个过程,完成方针图画上的一切像素值的核算,最后进行图片的重建,这便是图画缩放的基本原理。咱们发现,依据映射、插值、核算、重建的过程,缩放后的图画会包括许多 “创造” 出来的像素。即使是分辨率扩大、像素数量增多时,也并没有得到比原始图画更多的内容细节。图画的缩放往往会导致图画细节的丢掉,呈现锯齿和含糊等问题,分辨率改动越大、画质劣化或许越严重,咱们不能再单纯地以为:分辨率越高、画面越明晰细腻。

当然,实践运用中,或许存在这样的需求:从原始低分辨率的图画、重建出高分辨图画,并且期望画质不下降、甚至画质更高。比方,考虑网络带宽或编码端设备功能的约束,无法满意高分辨率的收集、编码和传输需求,需求完成推流 “低清” 编码、“低码”传输、拉流 “高清” 烘托,在不添加传输带宽压力和本钱的前提下进步画质。此刻,惯例的缩放算法将无法满意需求,能够经过 “ 超分辨率 ”(Super Resolution,SR,超分)方法来完成高清重建。

跟着深度学习技能的发展和设备算力的进步,依据AI算法的超分技能开端在RTC领域崭露头角,ZEGO也有自研的AI超分技能,目前已运用落地,支撑在本地完成分辨率两倍扩大、并进步明晰度和纹理细节。关于ZEGO超分技能的详细实践,感兴趣可点击阅览:“即构移动端超分技能解析”。

2分辨率缩放的相关问题

在了解缩放的基本原理后,咱们来看看在实践的音视频运用开发过程中,关于分辨率缩放的常见问题。

问题一:画面含糊问题

编码分辨率越高、或显现分辨率越高,画面越含糊。若仅考虑分辨率这块,结合音视频数据处理途径以及缩放的原理,或许有如下原因:

  • 设定的收集分辨率低于编码分辨率。比方设置收集 180P,却运用了 720P 的编码;

  • 图画原始分辨率低于显现分辨率。比方原始图画为 180P,却期望在 720P、 1080P 甚至 2K 的屏幕上做全屏显现。

以上场景必然触及到分辨率的扩大,若运用惯例的缩放算法,原始图画的细节太少,缩放后 “估算” 的像素太多,往往会导致画面变含糊。为避免此类问题,咱们一般主张开发者尽或许运用相同的收集分辨率、编码分辨率和显现分辨率。一方面能够避免惯例缩放(特别是分辨率扩大)导致的画质劣化,一方面也能减小由缩放引进的功能开支。假定在实践需求场景中无法满意各分辨率共同,也至少要确保收集分辨率大于编码分辨率或显现分辨率。

问题二:关于黑边、画面被裁剪、画面拉伸问题

图画烘托时,呈现画面有黑边、画面被裁剪(视角变窄)、画面被拉伸等状况。

一般来说,当图画分辨率与显现分辨率不共同,需求将图画进行适当缩放后再显现时,咱们都期望图画缩放后画面份额不变,且和显现区域应完全符合。这就要求图画分辨率与显现分辨率的宽高份额相同。

比方图画分辨率为 1280 x 720(宽 x 高,16:9) ,显现分辨率为 1920 x 1080(宽x高,16:9),则缩放时宽和高都等比扩大 1.5 倍,画面份额不变。假定两种分辨率的宽高份额不相同,比方图画分辨率为 1280 x 720(宽x高,16:9) ,显现分辨率为 1080 x 1920(宽 x 高,9:16),不管选取宽、仍是高作为基准,都无法在确保原图份额的前提下进行等比缩放,天然也无法确保图画在改动后完美符合显现区域。此刻,咱们需求参阅一些常见的烘托战略,进行取舍。

  • 战略一:等比缩放并自适应(Aspect Fit)

缩放时,坚持图片的原宽高份额,烘托时优先显现全图,显现区域或许会有黑边。

该战略下,咱们挑选宽高改动较小的标准,对原图宽高做等份额缩放。比方 1280 x 720(宽 x 高,16:9) 缩放至 1080 x 1920(宽 x 高,9:16),宽的改动份额为 1080/1280 ≈ 84.375%,高的改动份额为 1920/720 ≈ 266.667%。咱们取其中的较小标准,将宽、高均缩小至 84.37%。缩放后的图画分辨率为 1080 x 608,该分辨率的宽与显现分辨率的宽符合,但该分辨率的高小于显现分辨率的高,所以显现区域的高度方向无法完全烘托(一般用黑色填充,并将画面居中),如下图:

注:红框部分为显现分辨率区域

音视频开发进阶|第七讲:分辨率与帧率上篇

战略二:等比缩放并填充(Aspect Fill)

缩放时,坚持图片的原宽高份额,烘托时优先填满全屏,画面或许会被削减。

该战略下,咱们挑选宽高改动较大的标准,对原图宽高做等份额缩放。同样取1280×720(宽 x高,16:9) 缩放至 1080 x 1920(宽 x 高,9:16)的事例,咱们取其中的宽高改动的较大标准,将宽、高均扩大至 266.667%,缩放后的图画分辨率为 3413 x 1920,该分辨率高等于显现分辨率高,但分辨率宽远大于显现分辨率宽,显现区域的宽度方向无法完全包容图片的水平像素,超出的部分画面被裁剪,如下图:

音视频开发进阶|第七讲:分辨率与帧率上篇

注:该战略下,缩放后图片分辨率大于显现分辨率,只能显现图片部分。但详细显现哪一部分、削减掉哪一部分,仍需求确认。上图默以为依据图画最左侧来显现,将最右侧超出显现区域的部分削减掉。

  • 战略三:自由缩放并填充(Scale Fill)

缩放时,能够改动图片的宽高份额,烘托时显现全图并填满全屏,画面或许会被拉伸。

该战略下,咱们将图画分辨率的宽、高别离缩放至显现分辨率的宽、高。同样取1280×720(宽x高,16:9) 缩放至 1080×1920(宽x高,9:16)的事例,咱们将图画分辨率宽缩小至 84.37%,可是高扩大至 266.667%,缩放后图画分辨率宽、高等于显现分辨率宽、高,完成了全屏显现,没有黑边。但因图画份额改动,导致画面呈现拉伸。如下图,缩放显现后,企鹅变 “高” 变 “瘦” 了。

音视频开发进阶|第七讲:分辨率与帧率上篇

以上常见的烘托战略告诉咱们:同一原始分辨率的图片,能够烘托到不同显现分辨率的屏幕上。但实践显现作用将取决于两种分辨率的联系(大小、份额)。

一般来说,要确保图画显现优先且接受黑边时,咱们选用等比缩放并自适应(Aspect Fit);要确保界面美观而要求全屏显现、并不改动画面份额时,咱们选用等比缩放并填充(Aspect Fill),此刻,宽高缩放的差异不能太大,否则会导致画面被过渡裁剪。一般很少会挑选自由缩放并填充(Scale Fill),除非是关于画面份额没有保真要求的场景,比方纯色图片的全屏显现。

别的,正如前面说到的,在实践运用中,咱们往往需求在某个指定的显现区域上烘托图片,那么该 “指定区域” 上的部分分辨率,也是更灵活意义上的 “显现分辨率”,咱们需求对烘托结果有正确的预期,并灵活挑选符合需求的战略。

分辨率的挑选

归纳前面评论的许多影响因素,在没有缩放处理的前提下咱们能够说:进步图画的原始分辨率,能够带来更明晰细腻的画面。高画质当然是咱们的合理寻求,但这是否意味着,咱们要始终寻求一个极高的分辨率呢?答案当然是否定的。

系列推文中,相似问题咱们已评论屡次。实践运用场景中依据种种约束,咱们往往都是“戴着镣铐”在舞蹈。比方音频相关的参数,音频采样率、位深、码率等等,都是归纳考虑需求&约束,选取了一个“折中”值。视频分辨率天然也是如此,高分辨率往往意味着机器功能的消耗越高、视频图画的数据量越大、传输带宽的占用越多、本钱越高,这势必会影响弱网环境下或低配机器上的运用体验,咱们也需求依据场景挑选适宜的分辨率。

一般RTC 场景下常用的、适宜的分辨率有:

音视频开发进阶|第七讲:分辨率与帧率上篇

一般来说,RTC 场景下很少运用 1080P 以上的分辨率,特别是在移动端,更高装备的显现作用较难拉开距离,反而会极大进步传输带宽、设备功能的压力,收益不高。别的,表格中所列并非相应场景的固定挑选,更非有限挑选,实践场景运用哪种分辨率更适宜,仍需依据事务、产品的需求,实践测验和体验后才干做确定。

总结

至此,关于何谓 “ 必定数量 ” 的评论,就告一段落了,期望咱们经过本篇推文能够关于 “ 分辨率 ” 有进一步地知道。咱们下一篇推文,会持续就另一个话题:“必定频率” 的界说和影响,做相关评论。最后咱们经过一个思想导图,总结一下本文的主要内容。

音视频开发进阶|第七讲:分辨率与帧率上篇

音视频开发进阶|第七讲:分辨率与帧率上篇

本期思考题

关于本文中的举例,图画分辨率为 1280×720(宽x高,16:9),显现分辨率为 1080×1920(宽x高,9:16),有什么方法,能够完成全屏显现、不拉伸且不裁剪图画画面吗?
(下期揭秘)

上期思考题揭秘 ⬇️

Q:

参阅推文中的举例,假定原图的 Width x Height = 6 x 8,存储时将 Stride 对齐为 8。当运用 Stride = 8,Width = 4,进行读取和烘托,会呈现什么问题?

A:

若运用正确的装备, Stride = 8 进行读取,Width = 6 进行烘托,则仅会显现出彩色部分, 黑色部分的 Padding 在烘托时会被忽略。

音视频开发进阶|第七讲:分辨率与帧率上篇

若运用正确的 Stride = 8,过错的 Width = 4,会呈现如下问题:数据读取逻辑正常,可是核算时机以 Width = 4 进行烘托,实践只烘托了部分图画,其余部分(图中紫色和黄色部分)都被作为 Padding 处理。显现出来的画面是被削减的。

音视频开发进阶|第七讲:分辨率与帧率上篇