一、背景介绍

跟着移动互联网的深入开展,视频消费场景逐步变成干流,前期因为手机硬件的约束问题,导致出产出来的视频画质、明晰度存在较大的问题,用户体会不太好,其时的网络也处于4G的开展阶段,网络的约束也无法继续支撑高清视频的消费,可是现在5G开展地如火如荼,网络的高速开展,手机硬件性能的进步,用户越来越不满足于低画质和低明晰度的视频。进步视频的画质和明晰度势在必行,需求一套卓有成效进步视频明晰度的优化方案。

二、点评规范

做一件工作之前,首先需求确认一下点评这件工作的规范。所以在提出视频明晰度优化方案之前,必须先确认一下衡量视频明晰度的点评原则。点评视频明晰度有两种准测:

2.1 客观规范

客观规范便是运用算法核算视频画面质量分,同等条件下,假如A视频的质量分得到高于B视频,说明A视频的保真质量做得比B视频更好。点评视频质量的算法有两大类:

  • 彻底参阅:两个视频逐帧比照剖析,核算比照的质量,这种运用的比较多,常见的VMAF、PSNR、SSIM都是彻底参阅。
  • 部分参阅:截图视频中的部分帧来比照剖析。有些场景例如直播没法彻底比照,截取部分帧来比照是比较科学的。

现在Netflix推出的VMAF算法是点评视频质量的干流算法,下面咱们简略介绍一下:

  • VMAF 全称 Video Multi-method Assessment Fusion ,它借助人类视觉模型以及机器学习来点评一个视频的质量。
  • VMAF的点评指标首要包含:其间VIF和DLM是空间域的,表明一帧画面之内的特征;TI是时刻域的,表明多帧画面之间的相关性特征。

    • 视频信息保真度(VIF:Visual Quality Fidelity)
    • 细节丢失指标(DLM:Detail Loss Measure)
    • 时域运动指标/平均相关方位像素差(TI:Temporal Information)
  • VMAF依据SVM的nuSvr算法,在运转的过程中,依据事前练习好的model,赋予每种视频特征以不同的权重,对每一种画面都生成一个评分,终究以均值算法进行归总,算出该视频的终究评分。
  • VMAF核算出的分数范围是0 ~ 100,其间0表明最低质量,100表明最高质量,后续比照的时分只给出分数。

2.2 片面规范

客观规范固然重要,可是视频是给人看的,终究视频的质量好欠好,还需求用户片面感触,换言之,两个视频的VMAF或许附近,可是用户观感或许会纷歧样,有些用户喜爱柔色,有些用户喜爱暖色,纷歧而定。

片面规范操作起来比较简略,找几个视频,让用户观看之后片面给出点评,视频A和视频B的质量比照怎么,这种输出的成果比较精确,可是工作量比较大,欠好大范围推行。所以依据项目要求,在特定的时分选用客观点评规范,在某些场景选用片面点评规范。

例如下面两张图片,它们的VMAF值是附近的,可是第二张看上去明显比第一张画质好多了,而且愈加明亮,这并没有改动图片的编码结构,仅仅对画面自身进行一些调色处理(这个咱们下面会独自拎出来讲),就能明显进步片面感触。所以点评视频质量需求归纳片面规范和客观规范归纳来判别。而且咱们建议在有条件的状况下,片面规范愈加重要,因为客观规范仅仅模拟人眼的视觉体系,和实在的场景仍是有所距离。

视频清晰度优化指南

视频清晰度优化指南

三、根底优化

经过上面的描绘咱们基本了解了视频质量的点评规范,但假如要进步视频质量,这些还不够,咱们还需求介绍一下视频的基本特点,以及这些特点能够在多大程度上影响视频的质量。

咱们首先运用MediaInfo来查看一下视频的特点,因为重点重视画质,所以就主动疏忽封装格局和音频流信息,只重视视频轨道信息:

Video
ID                                       : 1
Format                                   : AVC
Format/Info                              : Advanced Video Codec
Format profile                           : High@L3.1
Format settings                          : CABAC / 4 Ref Frames
Format settings, CABAC                   : Yes
Format settings, Reference frames        : 4 frames
Codec ID                                 : avc1
Codec ID/Info                            : Advanced Video Coding
Duration                                 : 2 min 41 s
Bit rate                                 : 634 kb/s
Bit rate mode                            : CBR
Width                                    : 960 pixels
Height                                   : 540 pixels
Display aspect ratio                     : 16:9
Frame rate mode                          : Constant
Frame rate                               : 25.000 FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:0
Bit depth                                : 8 bits
Scan type                                : Progressive
Bits/(Pixel*Frame)                       : 0.049
Stream size                              : 12.2 MiB (94%)
Writing library                          : x264 core 148
Encoding settings                        : cabac=1 / ref=3 / deblock=1:0:0 / analyse=0x3:0x113 / me=hex / subme=7 / psy=1 / psy_rd=1.00:0.00 / mixed_ref=1 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / fast_pskip=1 / chroma_qp_offset=-2 / threads=17 / lookahead_threads=2 / sliced_threads=0 / nr=0 / decimate=1 / interlaced=0 / bluray_compat=0 / constrained_intra=0 / bframes=3 / b_pyramid=2 / b_adapt=1 / b_bias=0 / direct=1 / weightb=1 / open_gop=0 / weightp=2 / keyint=75 / keyint_min=7 / scenecut=40 / intra_refresh=0 / rc_lookahead=40 / rc=crf / mbtree=1 / crf=26.0 / qcomp=0.60 / qpmin=0 / qpmax=69 / qpstep=4 / vbv_maxrate=800 / vbv_bufsize=1600 / crf_max=0.0 / nal_hrd=none / filler=0 / ip_ratio=1.40 / aq=1:1.00
Codec configuration box                  : av

其间有几个十分重要的特点需求特别重视一下:下面咱们列出的各个特点都是依据其他条件不变的状况下,只改动当时特点。例如谈Profile,就要确保其他的特点是相同的,只要Profile不同,这样比较视频的画质才有意义。

3.1 Profile

Profile对应上面的是Encoder Profile Level,正常状况下,Profile Level有三种类型:

  • Baseline Profile
  • Main Profile
  • High Profile

其间Baseline Profile对应明晰度最低,Android 3.0之后的版别都支撑的,Main Profile明晰度比Baseline Profile明晰度要好,可是从Android 7.0之后才支撑,High Profile明晰度最高,也是从Android 7.0之后才支撑。咱们在设置Encoder Profile Level之前,需求判别一下当时是否支撑。

3.2 Bitrate码率

视频码率是视频数据传输时单位时刻内传送的数据位数。单位是kbps,断章取义,码率越大,单位时刻填充的数据就越多,视频质量就越高。

码率并不是越大越好,码率设置超越必定的巨细,对视频画质的进步已不太明显,肉眼现已看不出差异,可是视频巨细会添加许多。所以设置适宜的码率就行。通常建议的码率核算方法是:

Bitrate = width * height * frameRate * factor
factor = 0.15

依照上面的公式设置的码率是比较适宜的,当然假如想要愈加高清的,能够适当添加factor巨细。

3.3 Bitrate Mode

码率尽管设置了,可是码率是描绘一段时刻的平均传输的数据位数,无法确保每一个时刻段内传送的数据巨细是固定的或许在一个固定的范围内。还有一个Bitrate Mode参数来表明码率形式。它也有三种类型:

  • VBR:可变码率(Variable Bitrate), 此编码方法会依据帧间数据的改变量巨细来动态调整码率,假如帧间的运动改变比较大,调高码率,假如帧间的运动改变比较小,调小码率。从编码方法就能够看出来,这样的编码方法有两个缺点:(1)运动猜测核算算法有必定的耗时,编码时刻较长;(2)码率多变,终究生成的文件巨细不行猜测。或许很大也或许很小。
  • CBR:固定码率或许常数码率(Constant Bitrate), 这是默认的编码方法,运用此编码方法,文件从始至终的编码码率会固定不变或许基本不变。这种方法的好处是文件巨细是确认的,不会出现文件巨细不行猜测的状况。可是缺点也很明显,有时分帧间改变比较大,有时分帧间改变比较小,假如都运用相同的码率,帧间改变比较大的时刻画质会比较一般,帧间改变比较小的时刻显得浪费。无法做到较好的平衡。
  • ABR:平均码率(Average Bitrate), 平均码率较好地兼顾了VBR和CBR的,在帧间改变比较大的时刻运用较大的码率,在帧间改变比较小的时刻选用较小的码率,终究确保全体选用的码率固定就能够了。较好的处理了画质和文件巨细之间的对立。

可是很可惜的是MediaCodec并不支撑ABR,咱们假如想选用ABR形式的话还需求运用软编码。MediaCodec也提供了三种形式:

  • BITRATE_MODE_CQ:这种形式是全面考虑视频质量,尽或许确保视频质量,所以编码出来的视频都很大,并不行取。
  • BITRATE_MODE_VBR:同上面的VBR
  • BITRATE_MODE_CBR:同上面的CBR

众所周知,硬编码速度要远远快于软编码,所以编码都是优先选用硬编码,硬编码失利再选用软编码兼容。所以硬编码MediaCodec建议选用BITRATE_MODE_CBR形式,切换到软编码选用VBR形式。

3.4 B帧设置

视频由I帧、P帧、B帧 三种类型的视频帧组成的。

I帧是帧内图画帧,便是关键帧,意思是此帧不需求依赖其他的帧就能够进行编码或许解码。

P帧是前向猜测图画帧,此帧需求参阅在它之前的I帧或许P帧,选用运动猜测的方法进行帧间编码或许解码。P帧巨细相当于I帧巨细的1/10 ~ 1/20

B帧是双向猜测图画帧,此帧需求参阅在它之前的I帧或许P帧,也需求参阅在它之后的I帧或许P帧,选用运动猜测的方法进行帧间猜测编码或许解码。

GOP表明两个I帧之间的图画帧序列,GOP=2s,表明两个I帧之间的距离是2s。

Android平台只要高通部分芯片支撑B帧编码,而且Android体系也没有开发设置B帧的接口,所以对运用Android MediaCodec编码的开发者而言,无法开启B帧编码(iOS是能够的,暗自垂泪)。当然软编码是能够设置B帧的。

设置B帧有什么好处?

B帧巨细约是I帧巨细的1/50,假如设置了B帧了,并不会下降明晰度,可是能够大大下降视频的巨细,这样咱们就能够相应地调大码率,终究完成了进步明晰度的方针。

当然设置了B帧之后,添加了编码和解码的杂乱度,这点开发者在设置的时分必须要有充沛的认识。

四、HEVC编码

现在H.264编码仍是运用最广泛的编码方法,首要仍是H.264编码的兼容性比较好,而且免费开源。HEVC自从2013年第一版发布开源出来,还没有彻底代替H.264(首要原因是收费,而且部分机型或许不支撑),不过HEVC凭仗其独特的优势也得到了较多地运用。

HEVC相对H.264的优势:

  • HEVC规范视频的帧内猜测形式支撑33种方向,而且提供了更好的运动补偿处理和矢量猜测方法。而H.264只支撑8种。
  • HEVC选用了块的四叉树区分结构,选用了8×8 ~ 64 x 64 像素的自适应块区分,而H.264每个宏块的巨细都是固定的16 x 16像素,HEVC的这样设计能够确保在不同的帧间和帧内杂乱程度中能够动态调整宏块的巨细,经过测验发现,在相同的图画质量下,HEVC编码的视频比H.264编码的视频约减少40%,换言之,假如HEVC和H.264码率相同,那么HEVC编码的视频比H.264编码的视频要明晰地多。

视频清晰度优化指南

上图能够看出相同的视频帧,HEVC运用的宏块比H.264要少许多,体现了HEVC的优势。

分辨率 H.264/AVC H.265/HEVC
480p 1.5 Mbps 0.75 Mbps
720p 3 Mbps 1.5 Mbps
1080p 6 Mbps 3 Mbps
4k 32 Mbps 15 Mbps

咱们在运用MediaCodec HEVC硬编码时,需求判别一下当时是否支撑HEVC编码,Android 5.0现已支撑了HEVC,不过一些低端芯片或许仍是没有支撑HEVC,咱们在编码之前需求判别一下是否支撑。

运用HEVC编码,能够确保在不添加文件巨细的状况下,大大进步视频的明晰度。

上图是H.264编码,下图是HEVC编码

视频清晰度优化指南

视频清晰度优化指南

五、颜色调优

上面的几种优化方法都是在编码层面调整参数或许直接改动编码方法来进步视频的画质,但有一种方法经过调整视频画面的色值——归纳调整亮度、比照度、色温、饱和度、锐度等颜色参数,从而优化全体的视频画面,让视频画面看上去“更明晰”。

视频清晰度优化指南

咱们常常用到的颜色空间有RGB颜色空间、HSV颜色空间、YUV颜色空间还有CIELab颜色空间,其间RGB颜色空间运用的比较广泛。如上图,图画分为三个通道量:R重量、G重量、B重量,每个重量的值是0 ~ 255,三个重量一起组成一个颜色的RGB值。RGB重量的值分布构成了颜色色值的直方图,咱们经过调理RGB值来调理图画的颜色。

视频清晰度优化指南

有几种对颜色色值的调理方法,对咱们了解颜色调理有很大的协助:

  • 亮度:亮度表明人眼对发光体或被照射物体表面的发光或反射光强度实践感触的物理量,简而言之,RGB重量越大,图画就越亮;反之,图画越暗。
  • 比照度:图画比照度是指图画中从黑色到白色渐变的层次反差或比值。反差越大,比值越大,从视觉上感知,图画就越明晰醒目,比照度越大;反差越小,比值越小,从视觉上感知,图画越不明晰醒目,蒙尘感越强,比照度越小。
  • 色温:色温文温度还真有必定的关系,表明肯定黑体从肯定零度开始加热之后出现的颜色。从咱们日子中来看,暖色调看上去比较温馨,冷色调感触上有点清凉。
  • 饱和度:饱和度是指颜色的艳丽程度或许纯度。饱和度越高,图画颜色越艳丽,颜色纯度越高;反之则越低,直至灰度图。
  • 锐度:锐度首要用来表明图画边缘的比照度,因为人类感官,高锐度的图画看起来愈加明晰,图画上的细节比照十分明显。

咱们能够将上面五种调理方法归纳起来调理图片颜色。

  • 亮度添加10个点(-100 ~ 100)
  • 色温添加5个点(-100 ~ 100)
  • 饱和度添加20个点(0 ~ 100)
  • 锐度添加15个点(0 ~ 100)

第一张是原图,第二张是经过颜色调理之后输出的图片。

视频清晰度优化指南

视频清晰度优化指南

六、超分算法

上面说到的优化方法不管从编码层面,仍是从颜色调理层面,都算是基本的优化方法,近年来,跟着机器学习的炽热,超分算法越来越广泛地运用到图画和视频处理上来。超分辨率便是指经过机器学习地方法重建图画,达成进步图画分辨率的效果。

现在比较成熟的超分技能是Real-ESRGAN,依据BasicSR,选用ESRGAN算法,运用机器学习的优势对图片和视频进行去模糊、Resize、降噪、锐化等处理,重建图片,完成对图片的超分辨率处理。

E-SR-GAN算法的三个步骤:

  • 特征提取:核算噪点
  • 非线性映射:扩大,模糊化噪点
  • 图画重建:差分,平滑过度,去噪

视频清晰度优化指南

相对之前的SRCNN等超分算法,改善了如下几点:

  • 改善感知丢失,进步输出图画的边缘明晰度和纹路实在性。
  • 运用对抗网络的优势不断反应改善GAN判别器,猜测高分辨率图画和原始图画之前的相对实在性而不是肯定实在性。能够恢复原始图画的实在的纹路细节。
  • 优化了模型的安稳性,每次生成的图片都和原图片残差比照,进行纠正练习,终究得到的成果十分安稳。

视频清晰度优化指南

下面是超分前后的比照成果:我们能够点击大图比照一下细节,能够看出超分之后的图片精细化许多,去掉模糊的地方、下降图片的噪点。

视频清晰度优化指南

视频清晰度优化指南

视频清晰度优化指南

视频清晰度优化指南

七、总结

本文结合当下视频的痛点(明晰度问题),提出衡量视频明晰度的规范——片面规范和客观规范,指明晰视频明晰度的优化方针和方向,依据视频的基本特征(码率、GOP、编码形式等)提出根底优化的方法,在根底优化的根底上提出高档编码方法(相对H.264编码方法),再结合现在干流的视频颜色滤镜提出视频颜色调优方案,让视频看上去更明晰。终究的大杀器——超分算法选用E-SR-GAN方法进行扩大、降噪、重建帧来进步视频明晰度。期望上面这些方法能够给我们带来一些协助,对进步视频明晰度有更进一步的思考。

七、参阅文章:

  • VMAF开源项目
  • 揭秘 VMAF 视频质量评测规范
  • Netflix VMAF 视频质量点评东西概述
  • B帧对视频明晰度/码率的影响
  • H264 vs H265
  • 超分开源项目