- 第一章 视频编解码技术介绍 - 基本概念篇
文章目录
- 前言
- 1. 我的疑问
- 1.1 什么是视频编解码技术
- 1.2 为什么会有视频编解码技术
- 1.3 视频编解码中有哪些核心技术
- 1.4 作为开发者需要重点了解视频编解码中的哪些技术
- 2. 视频编解码的历史
- 3. 基本概念
- 3.1 像素
- 3.2 分辨率
- 3.3 ppi(像素密度单位)
- 3.4 显示宽高比
- 3.5 像素宽高比
- 3.6 帧
- 3.7 FPS
- 3.8 码流(比特率)
- 3.9 颜色模型
- 3.9.1 RGB
- 3.9.2 YUV
- 3.10 帧类型
- 3.10.1 I帧(帧内,关键帧)
- 3.10.2 P帧 (预测帧)
- 3.10.2 B帧(双向预测帧)
- 3.10.4 三者间的关系
- 3.11 H264
- 3.12 H265
- 4. 参考链接
前言
由于后续的工作要接触摄像头开发,因此这里需要提前了解些视频编解码相关的知识,以及视频相关的业务。
但是工作至今由于没怎么接触过视频编解码,因此对于视频编解码中的很多东西都不是很清楚,也不知道该从哪里去学。
这里主要记录下从各方渠道了解到的一些视频编解码的基本概念,让自己和大家对视频编解码先有个初步的认识。
本文比较适合像我这种粗略了解过视频编解码技术的小白,另外这是一个学习记录文章,该文章中的很多内容借鉴自github上的开源文章《digital_video_introduction》在此表示感谢。 然后大家也可以转去此文章进行视频编解码技术的学习(讲的很好,还有各种不同语言版本的)。
1. 我的疑问
由于是初次接触视频编解码技术,因此我在想我应该如何入手呢?后来想了下不如给自己提问题,通过提问,解答再不断深挖的方式,让自己对视频编解码技术有个初步的认识。
1.1 什么是视频编解码技术
当我们观看视频时,实际上是在观看由一系列静止图像组成的连续画面。视频编解码技术就是将这些图像进行压缩和解压缩,以便更高效地存储和传输视频内容。
首先,视频编码阶段会对连续的图像进行压缩,以减小文件大小并节省存储空间或传输带宽。这一过程涉及将图像数据转换为更紧凑的表示形式,例如通过去除冗余信息、利用图像间的相似性以及采用压缩算法来实现。
常见的视频编码标准包括H.264/AVC和H.265/HEVC等。
其次,视频解码阶段则是对压缩后的视频数据进行解压缩,以便重新构建出原始的连续图像序列,使其能够在屏幕上播放。解码器会根据存储的压缩数据还原出连续的图像,并通过适当的处理和显示技术呈现给观众。
1.2 为什么会有视频编解码技术
通常视频文件都非常庞大,如果直接存储或者传输,那么对内存大小和传输速度的要求将会变的非常高,进而降低用户的体验,也不利于整个生态的发展。
因此为了解决上述问题,才有了视频编解码技术,其通过一些技巧,对视频大小进行压缩,例如删除重复信息、利用相似图片等,将视频数据压缩成更小的体积。
1.3 视频编解码中有哪些核心技术
-
运动估计
运动估计通过分析相邻帧之间的像素变化,来推测物体的运动方向和速度。这样在存储视频时,就可以只保存运动部分的信息,而不必每一帧都完整保存,从而节省空间。(这是帧间压缩的一种技术实现)可以想一下1s的跑步视频,比如有30帧,那么先分析下后续每一帧和第一帧之间的运动信息,就可以在只保存第一帧和运动数据的情况下推测出后续其它帧的画面。(当然每一帧还是需要再保留一些信息的,只是保存的信息会变得很少)
-
变换编码
变换编码是一种将图像数据转换成更易于压缩的形式的技术。==通过将图像数据转换到频域(不同频率的信号)进行处理,可以更有效地压缩数据,==比如利用离散余弦变换(DCT)来实现这一点。(YUV像素编码阶段时,常用到的一种技术) -
熵编码
熵编码是一种通过对数据进行编码来减少信息冗余的技术。它利用信息理论中的熵概念,将出现频率高的信息用更短的编码表示,从而减小数据量,提高压缩效率。 -
帧内预测和帧间预测
帧内预测和帧间预测是利用视频序列中相邻帧之间的相关性来进一步减少冗余信息的技术。
帧内预测是基于当前帧内的像素值进行预测。
帧间预测则是利用相邻帧之间的像素值进行预测,以达到更好的压缩效果。 -
量化
量化是将转换后的系数映射到有限值集合的过程。通过量化,可以减少数据的精度,从而减小数据量。在视频编码中,量化是一个重要的步骤,有助于进一步压缩数据。
1.4 作为开发者需要重点了解视频编解码中的哪些技术
-
视频编解码基础知识
首先需要了解视频编解码的基本概念,包括视频帧、编解码器、码率、分辨率等基本概念,以及视频编解码的工作原理和流程。 -
编码格式
了解常见的视频编码格式,比如H.264(AVC)、H.265(HEVC)、VP9等,以及它们的特点、优势和劣势。 -
音视频同步
学习如何实现音频和视频的同步播放,了解时间戳、帧率等相关概念。 -
流媒体协议
了解常见的流媒体传输协议,比如RTMP、HLS、MPEG-DASH等,以及它们在视频传输中的应用和特点。 -
硬件加速
了解如何利用GPU、专用硬件加速器等硬件资源来加速视频编解码的过程,提高性能和效率。 -
视频质量优化
学习视频编解码中的一些优化技巧,比如码率控制、画面质量调节、视频压缩等,以及如何在保证画面质量的情况下尽可能减小视频文件大小。
2. 视频编解码的历史
-
早期视频编码
早期的视频编码技术主要集中在模拟视频信号(以波的形式)的传输和存储上,如MPEG-1。这些技术适用于较低分辨率和较低质量的视频,而且对于网络传输和存储需求比较高。 -
MPEG-2和DVD时代:
随着数字视频的兴起,MPEG-2标准应运而生,它是第一个被广泛采用的数字视频压缩标准,被用于DVD、数字电视等领域。MPEG-2实现了更高质量的视频压缩,适用于更高分辨率的视频。
(注意DVD比VCD存的数据更多,不是因为模拟到数字的转变,实际DVD和VCD存储的都是数字信号,只是DVD的存储容量更大,一般是VCD的10倍左右。) -
H.264/AVC时代:
H.264(MPEG-4 AVC)标准的出现标志着视频压缩技术迈入了全新的阶段。H.264采用了更先进的压缩算法,能够在相同画质下实现更高的压缩比,从而适应了高清视频、视频通话和流媒体的快速发展。 -
H.265/HEVC和未来趋势:
随着4K、8K超高清视频的普及以及虚拟现实、增强现实等新型视频应用的兴起,对视频编码技术提出了更高的要求。H.265(HEVC)作为H.264的后继者,进一步提高了压缩效率,使得超高清视频在更低的比特率下得以传输和存储。此外,未来视频编码技术的发展也将聚焦于更好的虚拟现实支持、更高的动态范围和更广的色域等方面,以满足不断增长的多样化视频应用需求。
实际上视频信号从模拟到数字是一个很大的转变,因为模拟信号是连续的,它可以采取无限数量的取样值,所以直接对模拟信号进行压缩需要处理无穷多的数据点,这不容易实现。
而数字信号是离散的,视频成了数字信号后,我们就能够应用后续所说的各种压缩算法来对视频的大小进行压缩。这样同等内存容量下存储的视频数据更多了、同时长视频数据也更小了,相应的网络传输也就更快了。
海康威视就是抓住了从模拟到数字的转变,在国内早早的将H.264的编码技术给应用了起来,从而在早期建立了一定的技术优势,为后续的发展奠定了基础。
截至目前我了解到常用的家庭摄像机用的还是H.264的编码,因为H.265的编码复杂性相较于于H.264呈几何倍增长,所以虽然能够实现更高的压缩率,但是对芯片的处理性能要求也更高。而在这个消费降级的时代,显然大家对于性价比的追求明显高过从1080P升级到4k和8K的需求,这也变相导致了各大以视频为核心技术的企业仍然是以H.264编码为基础进行产品开发,而延缓H.265系列产品的研发。
3. 基本概念
3.1 像素
像素可以理解为屏幕上的一个小点,然后不同的点就组成了一幅画面。
一个像素一般有不同的长度来表示RGB的颜色,常见的有RGB565和RGB888等。
3.2 分辨率
即一个平面内像素的数量,我们常说的1080P(1080 * 920)、2K(25601440)、4K(40962160 / 38402160)、8K(76804320)。
3.3 ppi(像素密度单位)
理论上来说视频编解码技术中应该是不需要讨论ppi的,它属于一种概念,但是考虑到它在我们的生活中无形的影响着我们,因此这里还是介绍一下。
ppi(像素密度单位)所表示的是每英寸长度所能够排列的像素(pixel)的数目。因此PPI数值越高,即代表显示屏能够以更高的密度显示图像。当然,显示的密度越高,拟真度就越高。
视网膜屏
说到这里再和大家说一下视网膜屏。
视网膜屏其实最早是苹果乔布斯提出来的或者说发扬光大的,视网膜屏并不是说是一种特殊的屏幕,而是指PPI很高的一种屏幕。
乔帮主如此形容视网膜屏:“当你所拿的东西距离你10-12英寸(约25-30厘米)时,它的分辨率只要达到300ppi这个‘神奇数字’(每英寸300个像素点)以上,你的视网膜就无法分辨出像素点了。”
智能手机的早期时代,iphone4和其它手机最明显的一个差别之一
就是ipone的屏幕画面看起来很清晰很细腻,而其它厂商的手机的屏幕画面看起来很粗糙。
之所以造成这种现场的原因就是苹果最早在手机上使用了视网膜屏(即同等大小的屏幕具备更多的像素点)。不得不说优秀的产品,真的是体现在很多地方。
如下两张图,假如都是同样尺寸的屏幕,第一张图代表的是ppi比较低的(可以理解为咱们平时看到的点阵屏)。第二张图是ppid比较高的,其同样尺寸下看到的内容更多,同时也更加细腻。
3.4 显示宽高比
显示高宽比是我们常说的,屏幕的宽高比例(即宽像素个数:高像素个数)
3.5 像素宽高比
像素宽高比,就是一个像素的宽和高之比
3.6 帧
一帧一般就是一个画面,我们常看到的视频是由一帧帧播放形成的。
3.7 FPS
每秒播放的帧数。
就是我们打王者荣耀的时候,右上方那个60FPS、120FPS,如果手机性能不好的话,一到打团的时候就会卡,这个时候你看下右上方的FPS,很可能已经掉到了30帧以下。
3.8 码流(比特率)
播放一段视频所需要的数据量
码率= 宽 * 高 * 颜色深度 * 帧每秒
例如,一段每秒 30 帧,每像素 24 bits,分辨率是 480x240 的视频,如果我们不做任何压缩,它将需要 82,944,000 比特每秒或 82.944 Mbps (30x480x240x24)。
3.9 颜色模型
3.9.1 RGB
R(red):红色、G(green):绿色、B(blue):蓝色
为什么颜色都是由RGB三色组成的?
这是因为人类视觉系统对于光的感知主要由三类锥细胞负责,它们分别对应红、绿、蓝三个颜色通道。通过调节这三种颜色的亮度和混合比例,我们可以模拟出人类眼睛所能感知到的几乎所有可见颜色
3.9.2 YUV
Y(luma)表示亮度
U(chroma blue) 蓝色色度
V(chroma red)红色色度
YUV组合
对比RGB我们可以发现YUV没有了Green(绿色),那它到底是怎么把颜色都表示出来的呢?
人体的眼睛大约有1.2亿个视杆细胞(负责亮度)和6百万个视锥细胞(负责颜色),因此人类对于亮度实际比颜色更加敏感。
同时亮度和颜色组合起来才是构成我们所看到这个世界五光十色的主要因素。
==所以尽管YUV中没有绿色通道,但通过亮度(Y)和色度(U、V)的组合,还是可以很好地表示出各种颜色的。==这是因为人类视觉系统对颜色感知的方式并不是简单地通过RGB三原色的组合来实现的,而是更侧重于亮度和色度的变化。
最终的转换公式为:
R = Y + 1.402V
B = Y + 1.772U
G = Y - 0.344U - 0.714V
3.10 帧类型
3.10.1 I帧(帧内,关键帧)
I帧是一种关键帧,它是完整帧的编码,不依赖于其他帧。I帧包含了图像的所有信息,类似于视频序列中的一个独立图片。
当播放视频时,解码器可以通过解码单独的I帧来显示完整的画面,因此I帧也被称为关键点。
I帧通常是一段视频中的第一帧
3.10.2 P帧 (预测帧)
P帧是预测帧,它压缩存储了与之前的一个或多个帧之间的差异。
P帧通过参考前面的一个或多个帧来进行预测编码,从而实现视频数据的压缩。在播放时,解码器会使用已解码的I帧和P帧来恢复视频序列。
P帧一般都是在I帧后面的,基于I帧的完整图像,通过进行各种预测可以实现只记录部分数据(P帧内保存的数据),然后借助I帧来恢复P帧画面的功能。
3.10.2 B帧(双向预测帧)
B帧是双向预测帧,它压缩存储了前后相邻帧之间的差异。B帧不仅可以参考前面的帧(P帧或I帧),还可以参考后面的帧(P帧或I帧),因此具有更高的压缩效率。
在解码时,需要根据前后帧的信息来恢复B帧的内容。
3.10.4 三者间的关系
3.11 H264
H.264,又称为MPEG-4 AVC(Advanced Video Coding),是一种视频压缩标准,它被广泛应用于数字视频的压缩、传输和存储。
H.264标准之所以出现,是因为人们对视频压缩技术的需求不断增加。随着高清视频、视频通话和流媒体等应用的普及,传统的视频压缩标准已经无法满足对高画质、低码率的需求。因此,H.264标准应运而生,它采用了先进的压缩算法和编码技术,能够显著提高视频压缩的效率,同时保持较高的视觉质量。
3.12 H265
H.265,也被称为HEVC(High Efficiency Video Coding),是一种视频压缩标准,用于提供更高效的视频压缩和更好的视频质量。它是H.264的继任者,旨在进一步提升视频压缩效率。
4. 参考链接
【从零开始】理解视频编解码技术
视网膜屏幕的由来
视频编码中常见的I,P,B帧,一次弄明白~
流媒体服务器播放H.265编码格式为什么不普及?