二、视频编解码基础知识
一、概述
图像信息经采集后生成的原始视频数据,数据量非常大,对于某些采集后直接本地播放的应用场合,不需要考虑压缩技术。但现实中更多的应用场合,涉及视频的传输与存储,传输网络与存储设备无法容忍原始视频数据的巨大数据量,必须将原始视频数据经过编码压缩后,再进行传输与存储。
二、为什么要进行视频压缩?
(1)未经压缩的数字视频的数据量巨大
(2)存储困难,如:一张DVD只能存储几秒钟的未压缩数字视频
(3)传输困难,如:1兆的带宽传输一秒的数字电视视频需要大约4分钟,720p RGB 15帧每秒码率计算: 1280 x 720 x 3 x 15 ≈ 41MB ≈ 331Mb
三、视频压缩的可行性,为什么可以进行视频压缩?
将视频数据中的冗余信息去除,寻找像素之间的相关性,还有不同时间的图像帧之间的相关性。
冗余信息类别 | 内容 | 压缩方法 |
---|---|---|
空间冗余 | 图像相邻像素之间有较强的相关性 | 变换编码、帧内预测 |
时间冗余 | 视频序列的相邻图像之间内容相似 | 运动补偿、帧间预测 |
编码冗余 | 不同像素值出现的概率不同 | 轮廊编码、区域分割 |
视觉冗余 | 人的视觉系统对某些细节不敏感 | 非线性量化、位分配 |
知识冗余 | 收发两端对人物的共有认识 | 基于知识的编码 |
其他 | 不确定因素 |
四、视频压缩分类
- 无损压缩(Lossless),压缩前解压缩后图像完全一致X=X',压缩比低(2:1~3:1),例如:Winzip,JPEG-LS,哈夫曼编码,
- 有损压缩(Lossy),压缩前解压缩后图像不一致X≠X',压缩比高(10:1~20:1),利用人的视觉系统的特性,例如:MPEG-2,H.264/AVC,AVS
五、视频编码是什么?
视频编码 是压缩和可能改变视频内容格式的过程,有时甚至将模拟源更改为数字源。在压缩方面,目标是减少占用空间。这是因为它是一个有损的过程,会抛弃与视频相关的信息。在解压缩以进行回放时,创建原始的近似值。应用的压缩越多,抛出的数据越多,近似值与原始数据相比越差。
六、什么是视频编解码器?
视频编解码器是通过软件或硬件应用程序完成的视频压缩标准。编解码器,如:H.264,VP8,RV40以及其他标准或更高版本(VP9)
- 编码器(Encoder) -- 压缩信号的设备或程序,用于压缩视频。
- 解码器(Decoder) -- 解压缩信号的设备或程序,用于重新创建视频的近似值以用于回放。
注:音频编解码器,如:LAME / MP3,Fraunhofer FDK AAC,FLAC等。
七、编码的基本概念及原理
1. 预测编码
根据已经编码好的块信息得到一个预测值,这样只需要编码实际值与预测值之间的差异即可。
空间冗余的消除:
帧内预测:根据同一帧中相邻已编码好的块信息得到预测数据,编码差异数据
时间冗余的消除:
帧间预测:根据已编码帧中的块信息得到预测数据,编码差异数据
2. IPB帧类型(经过压缩后的帧类型)
I 帧:仅采用帧内压缩技术,压缩效率最低,编解码无需用到其他帧的信息,是GOP的起始点。
P 帧:前向预测帧,编解码只参考前一个帧,可作为其他图像编码时的参考帧,属帧间压缩技术。
B 帧:双向预测帧,编解码既参考前一帧也可参考后一帧,压缩效率最高,复杂度高,时延较大,属帧间压缩技术。
3. GOP (图像组)
GOP(group of pictures)一般指两个I帧之间的间隔帧数,两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧。
IPB序列 | IP序列 |
---|---|
直播场景下,由于对延时高要求,而B帧会带来延时,所以都是使用IP序列
4. H264压缩技术 -- 基本概念
H.264 原始码流(⼜称为 裸流),是由⼀个接⼀个的 NALU 组成的,而它的功能分为两层:视频编码层VCL 和 网络提取层NAL。
4.1 视频编码层VCL(Video Coding Layer)
VCL负责有效表示视频数据的内容。
H264除了实现了对视频的压缩处理之外,为了方便网络传输,提供了对应的视频编码和分片策略;类似于网络数据封装成IP帧,在H264中将其称为组(gop)、片(slice)、宏块(Macroblock)这些一起组成了H264的码流分层结构;H264将其组织成为序列(GOP)、图片(pictrue)、片(Slice)、宏块(Macroblock)、子块(subblock)五个层次。
宏块:视频编码的基本单元,h264通常宏块大小为16x16个像素,所以编码器一般会对图像的宽 高有要求,需要为16的倍数。
Slice:条带,图像的划分,一帧图像可编码成一个或者多个条带,每条带包含整数个宏块。
SPS: 序列参数集,包含应用于完整视频序列的语法元素,比如图像宽,高等。
PPS: 图像参数集,包含应用于编码图像的语法元素,比如量化参数,参考帧列表大小等。
4.2 网络传输层 NAL (Network Abstraction Layer)
NAL定义了数据封装的格式和统一的网络接口,负责格式化VCL数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。
NAL基本单元为NALU,每一个NALU包含一个字节的头信息和其后的负载数据。
参考文档
https://zhuanlan.zhihu.com/p/31056455
https://blog.csdn.net/knowledgebao/article/details/86716428
重点链接:NAL/NALU详解可以查阅:
https://www.jianshu.com/p/1b3f8187b271
http://www.wendangku.net/doc/039e95757fd5360cba1adb46.html
5. H264压缩技术 -- 基本原理
流程图附上几篇文章:
https://blog.csdn.net/knowledgebao/article/details/86716428
https://zhuanlan.zhihu.com/p/31056455
https://www.jianshu.com/p/0c296b05ef2a
八、常见编码器 及 相关术语说明
8.1 常见编码器
-
OpenH264
思科开源软件编解码器,适用于实时程序,例如webrtc。
只支持IP帧类型;
只支持baseline profile;
动态调整码率,帧率,分辨率;
支持分层编码SVC;
编码速度快,cpu使用率低。 -
X264
VideoLAN工作组开发的开源编码器,历史久远,适用于各种场景。
支持IPB帧;
支持多种profile,level;
各种配置适合多种场景,例如动画,电影等;
cpu占用相对会高一点;
直播使用的场景预置为zerolatency。
8.2 硬编硬解
Android平台市面上大部分的芯片厂商的硬编硬解都适配,例如:高通,三星Exynos,联发科,海思等;windows平台上支持Intel qsv硬编硬解。
不同点 | 硬编 | 软编(普通编码) |
---|---|---|
编码方式 | 使用非CPU进行编码,如显卡GPU、专用的DSP、FPGA、ASIC芯片等。 | 使用CPU进行编码 |
使用方式 | 性能高,低码率下通常质量低于软编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码 | 实现直接、简单,参数调整方便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常比硬编码要好一点 |
复杂程度 | 普通编码是一种设计,而硬编码不过是一种具体的实现 | 普通编码比硬编码要复杂一些,对以后的考虑要周到一些 |
对比 | 软编软解 | 硬件编解码 |
---|---|---|
开销 | 使用cpu,占用率高 | 使用特定硬件(GPU),基本不占用cpu |
延迟 | 延时较低 | 延时与硬件有关,比较高 |
适应性 | 灵活,普适性高 | 适用性窄,部分解码会对码流有要求 |
画质 | 同等码率下画质好 | 同等码率下画质稍差 |
8.3 分辨率
分辨率:(矩形)图片的长度和宽带,即图片的尺寸。影响图像大小,与图像大小成正比;分辨率越高,图像越大;分辨率越低,图像越小。
分辨率是指视频画面横向和纵向被切分成多少块。
区别 1080P , 3MP ,4K
P 720P 、1080P 表示的是"视频像素的总函数" ,' P ' (Progressive的缩写)表示的是"逐行扫描"
K 2K 、4K 等是表示 "视频像素的总列数" ,4K表示的是视频有4000列的像素数,具体是3840列或4096列。
MP 代表的是像素总数,指像素的行数(P)与列数(K)相乘后的一个结果(百万像素)。
8.4 帧率
帧率 是指每秒图像的数量,一帧代表的就是一副静止的画面,连续的帧就形成了动画。影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。帧率就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次。
8.5 码流 Data Rate ( 码率 )
码率 指编码器每秒编出的数据大小,单位是kbps 。
视频文件在单位时间内使用的数据流量,指把每秒显示的图片进行压缩后的数据量。影响体积,与体积成正比:码率越大,体积越大,码率越小,体积越小。(体积=码率X时间)
压缩前的每秒数据量 = 帧率 x 分辨率(单位是字节)
压缩比 = 压缩前的每秒数据量 / 码率(对于同一视频源并采用同一种视频编码算法,压缩比越高,画面质量越差)
清晰度
在码率一定的情况下,分辨率与清晰度成反比关系:分辨率越高,图像越不清晰,分辨率越低,图像越清晰。
在分辨率一定的情况下,码率与清晰度成正比关系,码率越高,图像越清晰;码率越低,图像越不清晰。
好文章理解分辨率、帧率和码率三者之间的关系:https://blog.csdn.net/qq_39759656/article/details/80701965
直播场景下,常见的视频配置的推荐如下
分辨率 p | 帧率 fps | 码率 Kbps |
---|---|---|
240*320 | 15 | 300 |
360*640 | 15 | 600 |
480*640 | 15 | 800 |
540*960 | 20 | 1200 |
720*1280 | 20 | 1500 |
1080*1920 | 30 | 3000 |
都看到这里了,点个赞呗 0.0