二、视频编解码基础知识

一、概述

图像信息经采集后生成的原始视频数据,数据量非常大,对于某些采集后直接本地播放的应用场合,不需要考虑压缩技术。但现实中更多的应用场合,涉及视频的传输与存储,传输网络与存储设备无法容忍原始视频数据的巨大数据量,必须将原始视频数据经过编码压缩后,再进行传输与存储。

二、为什么要进行视频压缩?

(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. 预测编码

根据已经编码好的块信息得到一个预测值,这样只需要编码实际值与预测值之间的差异即可。
空间冗余的消除:
帧内预测:根据同一帧中相邻已编码好的块信息得到预测数据,编码差异数据
时间冗余的消除:
帧间预测:根据已编码帧中的块信息得到预测数据,编码差异数据

预测编码.png

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

你可能感兴趣的:(二、视频编解码基础知识)