小白如何入门视频编解码领域

近年来,随着抖音、快手等短视频企业极速发展,人们的业余娱乐生活被逐渐地改变,记得我上大学的那个时候,人人网正在迅速地占领校园,每天早上醒来地第一件事情就是打开 QQ 空间,看有没有人来踩踩自己的空间,有没有人来偷自己农场的菜,打开新浪微博发一条心情,刷一刷有哪些关注的人更新了状态。

不过,这样的日子已经很难看到了,QQ 空间已经很久没有打开过了,私密相册的密码甚至都已经忘记了,新浪微博也许久没有刷过了,以前写的博客也不更新了,取而代之的是,手机上多了抖音、西瓜视频、快手、小红书、爱奇艺等这些软件,早上起床先打开朋友圈看看动态,看到有意思的动态就点个赞,抖音上看到有价值的,有意思的视频就点个小红心,快手上看看别人剪辑的电视剧,双 11 的时候一次性充了 5 年的爱奇艺会员。

我们的生活,已经从文字,转换到了音视频。音视频 = 音频 + 视频,本文主要谈谈视频,阅读此文的大部分朋友应该是想入行视频行业,为了让大家都能对视频有一个最基础的了解,我列举了几个基本的概念,这是我们开始学习视频编解码之前必须要掌握的。

基本概念

我们可以将一帧理解为一张图片,我们日常看的视频都是由一帧一帧组成的,研究表明,当以超过每秒 24 帧的速度播放时,人眼就会觉得图片之间是连续的,这里由一个概念,叫做“视觉暂留”,是指光信号传入大脑神经后,需要暂留一段时间,光的作用结束后,并不会立即结束,这一现象叫做视觉暂留。所以当前一帧在眼前播放后,视觉暂留效应消失之前下一帧就已经到来,所以人们感觉到一张张图片是连续地,这就形成了视频。

像素

一帧是由一个个像素组成的,我们平常所说的高清(HD)视频,是指 1280x720 视频,1280 的意思是图像的横向(Width)由 1280 个像素组成,720 的意思为纵向(Height)由 720 个像素组成。

一张图像当最大程度地放大以后得到的效果如下图(使用 Photoshop 可以实现):

像素的表示

帧率

帧率英文是 Frame Rate,就是每秒播放的帧数,当帧率超过 24 帧每秒的时候,大部分的人就觉得图片是连续的了,描述帧率我们一般使用 fps(Frame per second 每秒帧数),结合我现在的工作,我们需要把编码器移植到特定平台上,甲方的 “能正常播放” 的要求是指帧率至少达到 24fps,但是如果是 PC 平台的话,至少要 30fps 才是我们能接受的帧率,嵌入式平台的话要求稍许低一点。

码率

码率的英文是 Bit Rate,就是每秒播放比特的数目,虽然码率控制(Rate Control)不属于视频编解码的标准,但是在实际应用中是非常重要的,要考虑到网络的传输带宽状况,还要考虑到解码器的解码性能,解码器的缓冲大小等等,并不是越大越好,码率要根据种种条件合理调控来满足实际应用的需求。

YUV 与 RGB

说到这个概念,我们就得谈到颜色空间(也有称色彩空间的,英文是 Color Space)这个概念。一张图片,如果说仅仅只用黑或者白(明或者暗)来表示,也就是说只有一个通道(channel),那么这样在我们人眼看来就是黑白图片(视频),如果基于三基色原理表示彩色图像,那么就会我们看到的图像(视频)就是由 R(red)G(Green)B(Blue)三种通道(channel)组成。

人眼对这三种光的感知的波谱分析可以参照《数字图像处理》的相关章节。

在 RGB 颜色空间里,RGB 三个通道是同等重要的,意思就是如果希望人眼看起来不失真,三个色彩都必须正确地表示才行,然而人眼对色度的感知与对亮度的感知度是不同的,也就是说如果我们可以将亮度与色度进行分开表示的话,那么我们人眼不敏感的色度方面我们就可以进行压缩来节省存储或者传输所需要的空间了,这也就是 YUV 颜色空间产生的原因了。具体 YUV 颜色空间与 RGB 颜色空间的转换我会在后续的文章中详细叙述。

上面简单地说了几个概念,其实这些概念大部分还是数字图像处理的基础内容,所以作为视频编解码工程师,手边一定还是得有一本数字图像处理的书籍的。除了上述的概念,还有很多其他的,比如逐行扫描和隔行扫描,视频 444、422、420 格式,视频编解码质量评估标准,空域滤波、频域滤波等等,鉴于这是个入门行业的文章,就不在这里深入了,这些大家可以关注我以后的 文章。

视频编解码的前世今生与标准化流程

在说标准化流程之前,我们先说说什么是标准。说得白话点,标准其实就是一本书,书中规定了码流(比特流)的结构和把比特流还原到我们可以观看的视频(解码)的方法。从这句话中可以得出这么些个结论:

  1. 标准规定的是解码的方法,并不是编码的方法。
  2. 标准规定了编码器的输出,无论编码器使用什么算法,输出必须是满足标准所规定的规范

在了解了标准是什么之后,我们来看一张图,这种图是从 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 下了,我想应该是官方也觉得 SVN 不方便才现在换成了 Gitlab 吧)这里管理的是 H.264 的官方参考软件(Reference Software)的仓库,这也是做视频编解码的工程师必研究的源码。

同样,两个组织在 2010 年组成 JVT-VC 组织,共同开发的 HEVC 也有它对应的网站 https://hevc.hhi.fraunhofer.de/ 同样,在这个网站里,大家也要去寻找到其文档、其代码,去阅读,去调试,去了解其中的细节。

HEVC Spec Cover

这里只列出来了 H26x 线与 MPEG 线,除此之外还有谷歌的 VP6、VP8、VP9,AOM 的 AV1,当然,我们国内也有 AVS(Audio Video coding Standard)工作组,主要负责国内多媒体工业界制定相应的数字音视频编码标准。现在也有了 AVS1 和 AVS2 的标准。

下面我们看看标准化的过程,从上面我们知道,h26x 线与 MPEG-x 线分别由两个标准化组织来指定,既然组织不同,那指定规范的流程肯定也会有所不同,这里以 HEVC 为例,其由 ISO/IEC 和 ITU-T 共同形成 JCT-VC 组织,通过下列的流程制定标准。

JCT-VC standard procedure

上图中几个术语我先解释一下:

  • CT,它是 Collaborative Team 的缩写,表示两个组织的联合团队。
  • CD Ballot,它是 Committee Draft 的缩写,表示委员会草案投票。
  • WP,它是 Working Party 的缩写,这是 ITU-T 那边的工作小组的称呼。
  • SG,它是 Study Group 的缩写,这是 ISO/IEC 那边的工作小组的称呼。
  • SC,它是 Sub-Committee 的缩写,负责管辖多个 WG。
  • DIS,它是 Draft International Standard 的缩写,这是国际标准草案了。
  • FDIS,它是 Final DIS 的缩写,这是国际标准最终草案。
  • AAP,它是 Alternative Approval Process 的缩写,选择性审批流程,这个不是必须的流程。

你可能感兴趣的:(小白如何入门视频编解码领域)