通信人家园

 找回密码
 注册

只需一步,快速开始

短信验证,便捷登录

搜索

军衔等级:

  三级通信军士

注册:2018-7-1949
发表于 2018-9-19 11:05:39 |显示全部楼层
大家好,我是小枣君。

作为一名屌丝创业者,前几天我追了一部美剧。剧名大家可能都听过,就是「硅谷」。

640?wx_fmt=jpeg

剧里主要讲述的,是一群美国硅谷年轻人的创业故事。我觉得挺好看的,一口气追完了(貌似后面还会更新)。同为创业者,对里面的剧情非常有感触。

今天这篇文章,并不是打算写剧评,而是和剧中男猪脚的创业项目有密切的关系。

男猪脚理查德是一个技术宅,他发明了一个很强的算法,可以将视频文件的体积大大压缩,并且并不损失视频质量。这个算法受到了所有投资人的关注和追捧,大家都争相给他投资。

中间的狗血故事略过不表,到这部剧的后期,理查德的压缩算法,甚至延伸到“分布式计算”领域,要构建一个“New Internet”。

640?wx_fmt=jpeg

更甚至,他们还利用自己的压缩算法,搞起了区块链,发行了自己的虚拟货币(魔笛手币)。

为什么一个压缩编码算法,能有这么强大的能量?为什么视频压缩技术这么受追捧?图像视频压缩到底是什么工作原理?

这,就是我们今天要讨论的话题。

如今我们所处的时代,是移动互联网时代,也可以说是视频(多媒体)的时代。

640?wx_fmt=png

从快播到抖音,从“三生三世”到“延禧攻略”,再从微信视频通话,到支付宝人脸识别,我们的生活,被越来越多的视频元素所影响。

?wx_fmt=png

而这一切,离不开视频拍摄和制作技术的日益强大,更离不开通信技术的飞速进步。

640?wx_fmt=jpeg

试想一下,如果还是当年的56K Modem拨号,或者是2G手机,你还能享受到现在动辄1080P甚至4K的视频体验吗?显然是不可能的嘛。

640?wx_fmt=gif

除了视频拍摄技术和网络通信技术之外,我们能享受到视频带来的便利和乐趣,还有一个重要因素,就是视频编码技术的突飞猛进。

640?wx_fmt=png

说视频之前,先要说说图像。

图像,大家都知道,是由很多“带有颜色的点”组成的。这个点,就是“像素点”

640?wx_fmt=jpeg

像素点的英文叫Pixel(缩写为PX)。这个单词是由 Picture(图像) 和 Element(元素)这两个单词的字母所组成的。

640?wx_fmt=jpeg
电影《像素大战(Pixels)》,2015年

像素是图像显示的基本单位。我们通常说一幅图片的大小,例如是1920×1080,就是长度为1920个像素点,宽度为1080个像素点。乘积是2,073,600,也就是说,这个图片是两百万像素的。

1920×1080,这个也被称为这幅图片的分辨率。

640?wx_fmt=jpeg
分辨率也是显示器的重要指标

那么,我们经常所说的PPI又是什么东西呢?

PPI,就是“Pixels Per Inch”,每英寸像素数。也就是,手机(或显示器)屏幕上每英寸面积,到底能放下多少个“像素点”。

这个值当然是越高越好啦!PPI越高,图像就越清晰细腻。

640?wx_fmt=jpeg

以前的功能机,例如诺基亚,屏幕PPI都很低,有很强烈的颗粒感。

640?wx_fmt=png

后来,苹果开创了史无前例的“视网膜”(Retina)屏幕,PPI值高达326(每英寸屏幕有326像素),画质清晰,再也没有了颗粒感。

640?wx_fmt=jpeg

像素点必须要有颜色,才能组成缤纷绚丽的图片。那么,这个颜色,又该如何表示呢?

妹纸们都知道,颜色拥有无数种类,光是你们的口红色号,就足以让我们这些屌丝瞠目结舌。。。

640?wx_fmt=jpeg

在计算机系统里,我们不可能用文字来表述颜色。不然就算我们不疯,计算机也会疯掉的。在数字时代,当然是用数字来表述颜色。

这就牵出了“彩色分量数字化”的概念。

懂绘画的童鞋一定知道,任何颜色,都可以通过红色(Red)绿色(Green)蓝色(Blue)按照一定比例调制出来。这三种颜色,被称为“三原色”

640?wx_fmt=png

在计算机里,R、G、B也被称为“基色分量”。它们的取值,分别从0到255,一共256个等级(256是2的8次方)。

所以,任何颜色,都可以用R、G、B三个值的组合表示。

640?wx_fmt=png
RGB=[183,67,21]

通过这种方式,一定能表达多少种颜色呢?256×256×256=16,777,216种,因此也简称为1600万色。而3个8次方,等于24,因为,这种方式表达出来的颜色,也被称为24位色

这个颜色范围已经超过了人眼可见的全部色彩,所以又叫真彩色。再高的话,对于我们人眼来说,已经没有意义了,完全识别不出来。

640?wx_fmt=png

那么,如果是RGB方式,一个像素点需要占用多少bit?3个2的8次方,一共是24bit。请记住哈,下面会用到。

好了,刚才说了图像,现在,我们开始说视频。

所谓视频,大家从小就看动画,都知道视频是怎么来的吧?没错,大量的图片连续起来,就是视频。

640?wx_fmt=gif

衡量视频,又是用的什么指标参数呢?

最主要的一个,就是帧率(Frame Rate)

在视频中,一个帧(Frame)就是指一幅静止的画面。帧率,就是指视频每秒钟包括的画面数量(FPS,Frame per second)。  

640?wx_fmt=gif
帧率越高,视频就越逼真、越流畅。

有了视频之后,就涉及到两个问题,一个是存储,二个是传输。

640?wx_fmt=png

而之所以会有视频编码,关键就在于此:一个视频,如果未经编码,它的体积是非常庞大的。

以一个分辨率1920×1280,帧率30的视频为例。

1920×1280=2,073,600(Pixels 像素)
每个像素点是24bit(前面算过的哦)
也就是每幅图片2073600×24=49766400bit

8 bit(位)=1 byte(字节),所以,49766400bit=6220800byte≈6.22MB。

这是一幅1920×1280图片的原始大小,再乘以帧率30,也就是说,每秒视频的大小是186.6MB,每分钟大约是11GB,一部90分钟的电影,约是1000GB。。。

吓尿了吧?就算你现在电脑硬盘是4TB的(实际也就3600GB),也放不下几部大姐姐啊!

不仅要存储,还要传输,不然视频从哪来呢?

如果按照100M的网速(12.5MB/s),下刚才那部电影,需要22个小时。。。再次崩溃。。。

正因为如此,屌丝工程师们就提出了,必须对视频进行编码。

640?wx_fmt=gif

什么是编码?

编码,就是按指定的方法,将信息从一种形式(格式),转换成另一种形式(格式)。

视频编码,就是将一种视频格式,转换成另一种视频格式。

?wx_fmt=png

编码的终极目的,说白了,就是为了压缩。

各种五花八门的视频编码方式,都是为了让视频变得体积更小,有利于存储和传输。

我们先来看看,视频从录制到播放的整个过程,如下:

640?wx_fmt=png

首先是视频采集。通常我们会使用摄像机、摄像头进行视频采集。限于篇幅,我就不打算和大家解释CCD成像原理了。

640?wx_fmt=png

采集了视频数据之后,就要进行模数转换,将模拟信号变成数字信号。其实现在很多都是摄像机(摄像头)直接输出数字信号。

信号输出之后,还要进行预处理,将RGB信号变成YUV信号。

前面我们介绍了RGB信号,那什么是YUV信号呢?

简单来说,YUV就是另外一种颜色数字化表示方式。

视频通信系统之所以要采用YUV,而不是RGB,主要是因为RGB信号不利于压缩

在YUV这种方式里面,加入了亮度这一概念。

在最近十年中,视频工程师发现,眼睛对于亮和暗的分辨要比对颜色的分辨更精细一些,也就是说,人眼对色度的敏感程度要低于对亮度的敏感程度

所以,工程师认为,在我们的视频存储中,没有必要存储全部颜色信号。我们可以把更多带宽留给黑—白信号(被称作“亮度”),将稍少的带宽留给彩色信号(被称作“色度”)。于是,就有了YUV。

YUV里面的“Y”,就是亮度(Luma),“U”和“V”则是色度(Chroma)。

大家偶尔会见到的Y'CbCr,也称为YUV,是YUV的压缩版本,不同之处在于Y'CbCr用于数字图像领域,YUV用于模拟信号领域,MPEG、DVD、摄像机中常说的YUV其实就是Y'CbCr。

640?wx_fmt=png
YUV(Y'CbCr)是如何形成图像的

YUV码流的存储格式其实与其采样的方式密切相关。(采样,就是捕捉数据。)

主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0。

640?wx_fmt=png

具体解释起来有点繁琐,大家只需记住,通常用的是YUV4:2:0的采样方式,能获得1/2的压缩率。

这些预处理做完之后,就是正式的编码了。

前面我们说了,编码就是为了压缩。要实现压缩,就要设计各种算法,将视频数据中的冗余信息去除。

当你面对一张图片,或者一段视频的时候,你想一想,如果是你,你会如何进行压缩呢?

640?wx_fmt=jpeg
对于新垣女神,我一bit也不舍得压缩…

我觉得,首先你想到的,应该是找规律。

是的,寻找像素之间的相关性,还有不同时间的图像帧之间,它们的相关性。

举个例子,如果一幅图(1920×1080分辨率),全是红色的,我有没有必要说2073600次[255,0,0]?我只要说一次[255,0,0],然后再说2073599次“同上”。

640?wx_fmt=png


如果一段1分钟的视频,有十几秒画面是不动的,或者,有80%的图像面积,整个过程都是不变(不动)的。那么,是不是这块存储开销,就可以节约掉了?

640?wx_fmt=gif
以我们的签名图为例,只有部分元素在动,大部分是不动的

是的,所谓编码算法,就是寻找规律,构建模型。谁能找到更精准的规律,建立更高效的模型,谁就是厉害的算法。

通常来说,视频里面的冗余信息包括:

640?wx_fmt=png

640?wx_fmt=png

视频编码技术优先消除目标,就是空间冗余和时间冗余。

举报本楼

军衔等级:

  新兵

注册:2019-9-141
发表于 2019-9-14 11:13:43 |显示全部楼层
非常好,我硕士做的是图像处理,硕博连读,新方向是视频编码与解码,这个文章写的很好,帮助入门,赞

举报本楼

军衔等级:

  新兵

注册:2019-10-9
发表于 2019-10-9 11:11:38 |显示全部楼层
好文章,得找个时间好好咀嚼一番.

举报本楼

军衔等级:

  新兵

注册:2019-11-12
发表于 2019-11-12 16:37:15 |显示全部楼层
不错,文章写得很好

举报本楼

军衔等级:

  新兵

注册:2019-12-1
发表于 2019-12-1 20:07:21 |显示全部楼层
太有帮助了

举报本楼

您需要登录后才可以回帖 登录 | 注册 |

Archiver|手机版|C114 ( 沪ICP备12002291号-1 )|联系我们 |网站地图  

GMT+8, 2024-4-16 21:51 , Processed in 0.325992 second(s), 18 queries , Gzip On.

Copyright © 1999-2023 C114 All Rights Reserved

Discuz Licensed

回顶部