短视频基础知识
前言:现在从事短视频相关工作,因此还是有必要补齐下短视频相关的基础知识。本文对短视频相关的知识进行了简单梳理总结,后续会持续更新。
一、名次说明
二、视频质量评估
视频质量评估主要分为主观质量评估,以及客观质量评估两种。主观质量评估,例如专家评测、众包测试等形式,最准确,但是费时费钱,难以批量应用;客观评估算法,省时省力,可大规模应用,但无论全参/无参考算法与主观评测均存在一定GAP,在UGC场景,差距会更加明显。
当前业界常用的有参画质评估算法,主要包括PSNR,SSIM,VMAF等,字节也自研了一套画质评估体系VQScore,相关简要介绍如下表所示:
三、视频编解码
原始图像和视频数据量很大,例如图像的每个像素的三个颜色分量RGB各需要一个字节表示,那么每一个像素至少需要3字节,分辨率1280×720的图像的大小为2.76M字节。这样的数据量,无论是存储还是传输开销都是巨大的,因此需要进行压缩。
3.1、基本原理
视频信息之所以存在大量可以被压缩的空间,是因为其中本身就存在大量的数据冗余。其中的冗余主要类型有:
- 时间冗余:视频一般由时间轴区间内一组连续画面组成,其中的相邻帧往往包含相同的背景和移动物体,只不过移动物体所在的空间位置略有不同,所以后一帧的数据与前一帧的数据有许多共同的地方,这就称为时间冗余。
- 空间冗余:视频的某一帧内部的相邻像素存在相似性
- 编码冗余: 一幅图像中不同像素出现的概率是不同的。对出现次数比较多的像素,用少的位数来编码。对出现次数比较少的像素,用多的位数来编码,能够减少编码的大小。
- 视觉冗余: 利用人的视觉系统对某些细节不敏感。压缩视觉冗余度就是去掉那些相对人眼而言是看不到的或可有可无的图像数据。
针对这些不同类型的冗余信息,优化将以像素和块为基础,基于香龙信息轮,进行变换、预测,以及熵编码,从而进行压缩。
3.2、编码发展
历史上流行过许多种视频编解码算法,如MPEG-1Part 2(即用于VCD视频压缩的算法标准)、MPEG-2Part 2(即H.262,用于DVD的压缩算法标准)、RV(见前文编码格式介绍)、VC1(亦见前文编码格式介绍)、H.263(在视频会议领域曾广泛应用)、MPEG-4Part 2(即DivX、Xvid所用的格式)等。当前流行的编码器格式数量已大为减少,只有H.264/AVC、VP8/9、H.265/HEVC等寥寥几种。
3.3、编码优化
DASH
基于HTTP的动态自适应流(英语:Dynamic Adaptive Streaming over HTTP,缩写DASH,也称MPEG-DASH)是一种自适应比特率流技术,使高质量流媒体可以通过传统的HTTP网络服务器以互联网传递。类似苹果公司的HTTP Live Streaming(HLS)方案,MPEG-DASH会将内容分解成一系列小型的基于HTTP的文件片段,每个片段包含很短长度的可播放内容,而内容总长度可能长达数小时(例如电影或体育赛事直播)。内容将被制成多种比特率的备选片段,以提供多种比特率的版本供选用。当内容被MPEG-DASH客户端回放时,客户端将根据当前网络条件自动选择下载和播放哪一个备选方案。客户端将选择可及时下载的最高比特率片段进行播放,从而避免播放卡顿或重新缓冲事件。也因如此,MPEG-DASH客户端可以无缝适应不断变化的网络条件并提供高质量的播放体验,拥有更少的卡顿与重新缓冲发生率。
ROI编码
ROI:Regions of Interest,感兴趣区域。基于主观质量衡量标准,在视频编码过程中,我们可以对感兴趣区域进行低压缩比,甚至是无损压缩编码,以获得高质量的重建图像,而对非关注区域采用较高压缩率,这就是ROI视频编码技术。
ROI视频编码码率分配的基本思路是:在视频编码前,对输入的视频场景进行视觉感知分析以确定感兴趣区域。在编码过程中,通过调整编码参数,为感兴趣区域分配更多码率,使其拥有更好的视觉质量,而其他区域则相应减少分配的码率,因其误差敏感度较低而对整体视频质量影响较小。
在同样的码率限制下,这种码率分配方案的编码结果将会比传统的分配码率的结果有更好的主观视觉质量。
4、视频前后处理
4.1、视频超分
超分辨率技术,是通过硬件或软件的方法提高图像或视频帧的分辨率, 通过一系列低分辨率图像获取到高分辨率图像的过程。超分辨率技术不仅可以应用在一些低分辨率的老片和手机拍摄的不清晰场景中,也可以对多次压缩的一些新电影进行恢复, 提高这些视频质量,给客户更好的观看体验。同时超分辨率技术还可以应用在清晰的视频源中,将视频的分辨率从1080P提高到4K,支持视频在更大的屏幕上播放, 提供更高清的视野。
4.2、HDR
参考:快手音视频技术:HDR:为用户打造视觉盛宴
4.3、视频插帧
参考文档:智能插帧,打造丝滑视频体验
由于网络传输、拍摄丢帧、后期编辑等原因,会存在一些帧率比较低的视频。为了消除低帧率视频的卡顿感,需要使用插帧技术来提升视频的帧率,从而给观众带来丝滑流畅的播放体验。针对不同的使用场景、不同的后端设备,算法方案也有所不同。当前业界常用的解决方案有:
- 帧融合或重复帧,直接将前后两帧的融合结果或重复帧作为新增的中间帧,插入到原视频中。该方法计算简单,但会产生拖影感和卡顿感,并没有起到提升视频观看体验的作用。通常可作为特殊场景、低端设备的兜底方案。
- 传统 MEMC 方案,MEMC (Motion Estimation, Motion Compensation) 是一类运动补偿算法。此类算法会对相邻两帧进行运动估计,补偿出原视频中本身没有的画面,达到提升视频帧率的目的。MEMC 所生成的中间帧符合原视频的平滑运动关系,因此可以使视频更流畅。但对于运动复杂的场景,很难在有限的算力条件下得到精确的结果。
- 深度学习方案,基于深度学习的方案,通常将原视频相邻两帧作为神经网络的输入,结合光流神经网络、遮挡估计等技术,来预测两帧之间的中间帧。深度学习方法可以提取图像语义信息,因此往往在遮挡估计等方面表现更优。但深度学习方法往往计算量大,很难在移动设备上应用。目前基于深度学习的光流算法较为成熟,可以计算两帧之间的密集光流。用了光流信息,可以将前后两帧图像 Warp 到中间时刻,从而合成中间帧。