近年来,随着抖音、快手等短视频平台的迅速发展,我们的娱乐生活也发生了巨大变化。回想起我在大学期间,校园里流行的是微信朋友圈和QQ空间。每天早上醒来,第一件事就是打开微信,看看朋友圈里有没有新的动态,点赞评论,与朋友们分享生活点滴。然后打开QQ空间,更新自己的日志和相册,与好友互动。
但是,这样的日子已经过去了。微信朋友圈已经成为了我们展示生活的主要平台,而QQ空间则逐渐被其他社交媒体取代。现在,在手机上安装了抖音、快手、小红书等应用。早上起床先打开抖音,浏览有趣的短视频,点赞关注喜欢的创作者。在快手上观看别人拍摄的搞笑和有趣的内容,与其他用户进行互动。同时,小红书成为了我们寻找购物灵感和美妆知识的重要平台。
我们的生活已经从文字转向了音视频。短视频和社交媒体已经成为了我们表达自己、分享生活的主要方式。在大学期间,这些流行的应用让我们更加便捷地与朋友们保持联系,获取有趣的内容和灵感。时代在不断变化,我们也随之适应了新的娱乐方式和社交模式。
我们的生活已经从文字转向了音视频。音视频即是音频和视频的结合。为了让大家对视频有一个基础的了解,在学习视频编解码之前,有几个基本概念需要掌握。
首先是帧。我们可以将一帧理解为一张图片。日常观看的视频都是由一帧一帧组成的。研究表明,每秒播放超过24帧的速度时,人眼会感觉到图片之间是连续的。这是因为存在着视觉暂留效应。当光信号传入大脑神经后,光的作用并不会立即结束,而是需要一段时间的暂留,这就是视觉暂留。因此,前一帧在眼前播放完毕后,下一帧已经到来,人们感觉到一张张图片连续地展示,从而形成了视频的效果。
像素
一帧是由一个个像素组成的,我们平常所说的高清(HD)视频,是指 1280x720 视频,1280 的意思是图像的横向(Width)由 1280 个像素组成,720 的意思为纵向(Height)由 720 个像素组成。
一张图像当最大程度地放大以后得到的效果如下图(使用 Photoshop 可以实现):
帧率
帧率英文是 Frame Rate,就是每秒播放的帧数,当帧率超过 24 帧每秒的时候,大部分的人就觉得图片是连续的了,描述帧率我们一般使用 fps(Frame per second 每秒帧数),在设置各大编码器的时候,帧率是一个非常重要的参数。
码率
码率的英文是 Bit Rate,就是每秒播放比特的数量,虽然码率控制(Rate Control)不属于视频编解码的标准规定的范畴,但是在实际应用中是非常重要的,要考虑到网络的传输带宽状况,还要考虑到解码器的解码性能,解码器的缓冲区大小等等,并不是越大越好,码率要根据种种条件合理调控来满足实际应用的需求。
YUV 与 RGB
说到这个概念,我们就得谈到颜色空间(也有称色彩空间的,英文是 Color Space)这个概念。一张图片,如果说仅仅只用黑或者白(明或者暗)来表示,也就是说只有一个通道(channel),那么这样在我们人眼看来就是黑白图片(视频),如果基于三基色原理表示彩色图像,那么就会我们看到的图像(视频)就是由 R(red)G(Green)B(Blue)三种通道(channel)组成。
人眼对这三种光的感知的波谱分析可以参考《数字图像处理》。
在 RGB 颜色空间里,RGB 三个通道是同等重要的,意思就是如果希望人眼看起来不失真,三个色彩都必须正确地表示才行,然而人眼对色度的感知与对亮度的感知度是不同的,也就是说如果我们可以将亮度与色度进行分开表示的话,那么我们人眼不敏感的色度方面我们就可以进行更大的压缩来节省存储或者传输所需要的空间了,这也就是 YUV 颜色空间产生的原因之一了。
上面简单地说了几个概念,其实这些概念大部分还是数字图像处理的基础内容,所以作为视频编解码工程师,手边一定还是得有一本数字图像处理的书籍的。除了上述的概念,还有很多其他的,比如逐行扫描和隔行扫描,视频 444、422、420 格式,视频编解码质量评估标准,空域滤波、频域滤波等等。这些都是在以后进行编解码器的设计和优化所必备的基础知识
视频编解码的前世今生与标准化流程
在说标准化流程之前,我们先说说什么是标准。说得白话点,标准其实就是一本书,书中规定了码流(比特流)的结构和把比特流还原到我们可以观看的视频(解码过程)的方法。从这句话中可以得出这么些个结论:
标准规定的是解码的方法,并不是编码的方法。标准规定了编码器的输出,无论编码器使用什么算法,输出必须是满足标准所规定的规范。
在了解了标准是什么之后,我们来看一张图,这种图是从 1984 年开始,Video Codec 的发展时间线路图。
编解码器历史线
我们一步步地来看懂上图,首先,先介绍了两个组织。
ITU-T
全称为 Telecommunication Standardization Sector of the International Telecommunications Union,译为国际电信联盟之电信标准化部门。国际电信联盟下属有很多个分支,其中 ITU-T 是其中的一个分支,专门制定电信标准。这个组织指定的标准主要面向实时视频通信领域,比如像视频电话,视频会议等应用。
H26x 家族
H.261:主要针对 ISDN 上的视频会议。H.263:低码率但更高质量的视频会议,支持更多分辨率。H.264:主要针对网络流媒体视频、移动端视频,支持高清电视(HDTV)。
MPEG
全称为 Moving Picture Experts Group,译为运动图像专家组。这也是个标准化组织,隶属于 ISO(International Standardization Organization 国际标准化组织)与 IEC(International Electrotechnical Commission,国际电工委员会)共同成立的一个专门针对运动图像和语音压缩方向的一个组织。这个组织所指定的标准主要应用于存储、广播电视、因特网或者无线网上的多媒体。
MPEG 家族
MPEG-1:主要面对的是数字媒体动态图像的存储与检索,如 VCD。MPEG-2:主要面对数字电视,它既能支持隔行扫描,又支持逐行扫描,支持高清 TV、支持 420、422 格式等。MPEG-4:它是 MPEG-2 的延续,更注重体验,提供多种 profile,支持移动平台多媒体低码率播放等功能。
从 MPEG-2 开始,ITU-T 与 MPEG-2 两个组织就开始联手组成专家团队(其实两家关系并不怎么和谐)来共同研发标准,在 MPEG/H264 研发的时候,两家联手形成 JVT(Joint Video Team)来进行研发。对于 H.264,我们应该知道下面几个网站:
https://h264.hhi.fraunhofer.de/ 在这个网站里管理了标准委员会关于 H.264 绝大部分的资料,这个网站必须知道!!!下面是我从这个网站中节选出的三个链接,非常重要。https://www.itu.int/wftp3/av-arch/jvt-site/ 这是 JVT 的 Documents 存放的目录,每次标准化会议开会都会持续一到两周,每天都会有人对当天的提案进行整理,对文档进行更新,这里存放的就是每次会议每天更新的文档。https://www.itu.int/rec/T-REC-H.264 这个网站是 H.264 标准文档的发表网站,大家应该知道一点,一个标准发布了并不是代表这个标准就完成了,它会在往后的 10 几年的时候内持续更新,包括一个附加功能的增加(如 SVC,MVC 等),某些参数的修改等等。这个网站上我目前看到的最新的 H.264 的版本是 2019 年 6 月份版本。https://vcgit.hhi.fraunhofer.de/jct-vc/JM JM 参考软件的下载地址(以前都是使用 SVN 来进行代码管理,所有的分支与历史记录都转移到了 Gitlab 下了,我想应该是官方觉得Gitlab更方便才换的吧)这里管理的是 H.264 的官方参考软件(Reference Software)的仓库,这也是做视频编解码的工程师必研究的源码。
同样,两个组织在 2010 年组成 JVT-VC 组织,共同开发的 HEVC 也有它对应的网站 https://hevc.hhi.fraunhofer.de/ 同样,在这个网站里,大家也要去寻找到其文档、其代码,去阅读,去调试,去了解其中的细节。
HEVC Spec
这里只列出来了 H26x 线与 MPEG 线,除此之外还有谷歌的 VP6、VP8、VP9 以及 AOM组织的 AV1(AV2也在进行中)当然,我们国内也有 AVS(Audio Video coding Standard)工作组,主要负责国内多媒体工业界制定相应的数字音视频编码标准。现在也有了 AVS1 和 AVS2 的标准。
下面我们看看标准化的过程,从上面我们知道,h26x 线与 MPEG-x 线分别由两个标准化组织来指定,既然组织不同,那指定规范的流程肯定也会有所不同,这里以 HEVC 为例,其由 ISO/IEC 和 ITU-T 共同形成 JCT-VC 组织,通过下列的流程制定标准。
标准化流程
上图中几个术语解释一下:
从上述流程可以看出,整个过程可以分为三个阶段:提出概念并组建学习团队,提交提案并进行投票阶段,以及提交给委员会定稿草案并最终发布。
link:https://zhuanlan.zhihu.com/p/604608395?utm_id=0