1. 写在最前面
在一家音视频领域的公司,但是对音视频领域的知识一无所知的话,多少就显得有点「局限」。那就接着组内的同学分享的契机,整理一篇关于音视频的介绍吧。
浅浅的补充一下,刚刚写文章的时候想到的一句话「任何不能学以致用的知识,最终的宿命都是被遗忘」。
注:本篇文章「不产生知识,只是在做知识的搬运和理解」,如有不足欢迎指出。
2. 视频处理基本流程
2.1 视频采集
2.1.1 CCD 成像原理
- 当用相机拍摄景象时,景物反射的光线通过相机的镜头投射到 CCD 上
- 当 CCD 曝光后,光电二极管受到光线的激发释放出电荷,感光元件的电信号便由此产生
- CCD 控制芯片利用感光元件中的控制信号线路对光电二极管产生的电流进行控制,由电流传输电路输出,CCD 会将一次成像产生的电信号收集起来,统一输出到放大器
- 经过放大和滤波后的电信号被送到 A/D,由 A/D 将电信号(此时为模拟信号)转换为数字信号,数值的大小和电信号的强度即电压的高低成正比。这些数值其实就是图像的数据了
- 不过单依靠上一步骤中所得到的图像数据还不能直接生成图像,还要输出到数字处理器(DSP)。在 DSP 中,这些图像数据被进行色彩校正、白平衡处理等后期处理,编码为相机所支持的图像格式,分辨率等数据格式,然后才会被存储为图像文件
- 最后,图像文件就被写入到存储器上
注:简而言之,当你按动快门,CCD 将各个元件的信息传送到 A/ D 上,模拟电信号经过 A/D 处理后变成数字信号,数字信号以一定格式压缩后存入缓存内,此时一张数码照片就诞生了。
以上为 CCD/CMOS 的成像原理
2.1.2 隔行扫描 vs 逐行扫描
- 隔行扫描方式源于早期的模拟电视广播技术。由于技术限制,不能快速对整幅图进行快速扫描,以便最大限度地降低视觉上的闪烁感。所以分为上场和下场的方式解析扫描。
- 逐行扫描将整幅图像从上到下依次刷新。随着数字电视的出现,逐行(即非隔行)扫描已经成为一种具有更高图像品质的流行输入和输出视频格式
2.1.3 视频制式
视频信号的标准简称视频制式,可以简单地理解为用来实现视频图像或声音信号所采用的一种技术标准。(一个国家或地区播放节目时所采用的特定制度和技术标准)
- NTSC:每秒 29.97帧,分辨率为 720 * 486,NTSC 电视标准用于美国、日本、加拿大、墨西哥等国家和地区。
- PAL:每秒 25 帧,分辨率为 720 * 576,PAL 电视标准用于中国、欧洲等国家和地区
- SECAM:每秒 25 帧,分辨率为 720 * 576,采用 SECAM 制的国家包括法国、埃及等一些法语系国家
2.1.4 YUV vs RGB
- RGB 颜色模型,即为常说的红、绿、蓝三原色模型。由于在实现上使用了 3 种颜色的定量配比,因此该模型也称为加色模型。适合显示系统,却并不适合图像处理。
- YUV 颜色模型,「Y」表示明亮度,即灰阶值,「U」和「V」表示的则是色度。由于人眼对亮度信号更敏感,允许降低色度的带宽,而亮度的带宽完整保留。
YUV 的存储格式:
- 打包格式:YUV 是混合在一起的值存储,和 RGB 的存放方式类似,YUV444 就是打包格式
- 平面格式:每 Y 分量,U 分量和 V 分量都是以独立的内存空间存储,YUV420 就是平面格式
YUV 的 440 & 420 & 422 说明:
- YUV444 采样,每一个Y对应一组UV分量。720p 的YUV大小:12807203 = 2.63MB
- YUV422 采样,每两个Y共用一组UV分量。720p 的YUV大小:12807202 = 1.76MB
- YUV420 采样,每四个Y共用一组UV分量。720p 的YUV大小:12807202 = 1.32MB
在图像视频加工与存储中,YUV 格式更受欢迎的理由如下:
- 人眼对亮度的敏感度远高于色度,因此人眼看到的有效信息主要来自于亮度
- 保持了对黑白显示设备的向下兼容
- 图像编辑中,调节亮度和颜色饱和度,在 YUV 模型下更方便
2.2 视频压缩
2.2.1 视频压缩原理
- 时间冗余信息:在视频中,相邻的帧(frame)与帧之间通常有很强的关联性,这样的关联性即为时间上的冗余信息
- 空间冗余信息:在同一张帧中,相邻的像素之间通常有很强的关联性,这样的关联性纪委空间上的冗余信息
- 统计冗余信息:统计上的冗余信息指的是欲编码的符号(symbol)机率分布式不均匀的。
- 感知冗余信息:人眼的一些特性比如亮度辨别阈值,视觉阈值,对亮度和色度的敏感度不同,使得在编码的时候引入适量的误差,也不会被察觉出来
2.2.2 常用的视频编码器
- H264/AVC (libx264、h264_amf、h264_nvenc、h264_qsv)— MPEG/ITU-T
- H265/HEVC (libx265、hevc_amf、hevc_nvenc)— MPEG/ITU-T
- VP8(libvpx)— google
- VP9 (libvpx-vp9) — google
- AV1 (libaom)— 开放媒体联盟(Alliance for Open Media,简称 AOM 联盟)
- MPEG4/MPEG2
2.2.3 压缩名词解释
- I 帧,关键帧(包含完整的画面数据),仅有帧内预测的宏块组成,采用帧内压缩技术
- P 帧,预测帧,向前参考帧,在压缩时,只参考前面已经处理的帧
- B 帧,双向参考帧,在压缩时,它即参考前面的帧,有参考它后面的帧。采用帧间压缩技术
-
GOP:GOP (Group of picture)是指两个 IDR 帧之间的一组画面组
-
IDR 图像:一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。IDR 图像之后的图像永远不会使用 IDR 之前的图像的数据来解析。
注:IDR 图像一定是 I 图像,但是 I 图像不一定是 IDR 图像。I 帧之后的图像有可能会使用 I 帧之前的图像做运动参考
-
FPS:是指画面每秒钟传输帧数,通俗来讲就是动画或视频的画面数
-
PTS/DTS:显示时间/解码时间
-
场和帧:视频的一场或一帧可用来产生一个编码图像
-
片(slice): 一个视频图像可以编码成一个或多个片,每个片包含整数个宏块
-
宏块(Macroblock):一个编码图像通常划分成若干宏块组成,一个宏块由一个 16 * 16 亮度的像素和附加的一个 8 * 8 Cb 和一个 8 * 8 Cr 彩色像素块组成
-
SPS(序列参数集):包含的是针对一连续编码视频序列的参数,如标识符seq_parameter_set_id,帧数及 POC 的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识符。即包括一个图像序列的所有信息,即两个IDR图像间的所有图像信息。
-
PPS(图像参数集):对应的是一个序列中的某一副图像或者是几幅图像,其参数标识符 pic_parameter_set_id、可选的 seq_parameter_set_id、熵编码模式选择标识、片组数组、初始量化参数和去方块滤波系数调用标识符等。即包含一个图像的所有分片的全部的相关信息,包括图像类型、序号等,解码时某些序列号是否丢失可用来校验信息包的丢失与否。
-
SEI(补充增强信息单元):是码流范畴里面的概念,提供了向视频流中加信息的办法,是 H.264/H.265 视频压缩标准的特性之一。
2.2.4 H264 码率控制
-
Variable Bitrate(VBR): 该方法将比特率变化和输入场景的复杂度进行匹配,即将较高的比特率分配给场景变化之类的复杂场景,而将较低的比特率分配给不太复杂的场景
-
Constant Bitrate(CBR):输出码率恒定,与图像质量无关
-
Constant Quality (CQ)/ Constant Rate Factor(CRF):这允许 bitrate 的波动来维持视频文件的编码质量
2.2.5 图像质量评价指标
在开始学习质量评价指标前,先思考如下几个问题:
- 如何评价一个视频的质量?
- 那种视频的编码方式更好?Codec A 或者 Codec B
- 对于这个剧集,1000kbps 是否比 HD 分辨率更好,或者 SD(标清)更好?
质量评价指标:
-
PSNR(Peak Signal to Noise Ratio)峰值信噪比:它是基于对应像素点间的误差的图像质量评价。由于并未考虑到人眼的视觉特性,因而经常出现评价结果与人的主观感受不一致的情况。
注:表示信号的最大可能功率与影响其表示保证度的破坏性噪声功率之间的比率
-
SSIM(structural similarity)结构相似性:分别从亮度、对比度、结构三方面度量图像相似性。和 PSNR 相比可以较好地反映人眼主观质量感受,取值范围 0-1,越大质量越好。
注:用于测试两幅图像之间的相似度
-
VMAF(Video Multi-method Assessment Fusion):由 netflix 提出,目标是构建自己的评价标准。它是一种将人类视觉建模与机器学习相结合的视频质量指标。它变的非常流行,因为它成功地自动化了通常需要人类观看和评分视频的主观质量测试。
注:VMAF 并发完全自动化
3. 参考资料
- 音视频基础知识
- 音视频科普网站
- MPEG-4 AVC (H.264) - Windows drivers | Microsoft Learn
- 高效率视频编码 (HEVC) – Amazon Web Services
- 视频编解码器 - 维基百科,自由的百科全书
- 音视频开发必备基础知识汇总
- CCD/CMOS 的成像原理
- Netflix VMAF 视频质量评估工具概述
- PAL制式和NTSC制式的区别 - ink.liu - 博客园
- 隔行扫描和逐行扫描的区别|极客教程
- 视频制式-资源学习系统
- 使用 FFmpeg 计算 PSNR、VMAF、SSIM
- flv, mkv 和 mp4 哪个更好编辑,更清晰
- 「视频直播技术详解」系列之一:采集
- 「视频直播技术详解」系列之二:处理
- 「视频直播技术详解」系列之三:编码和封装
- 「视频直播技术详解」系列之四:推流和传输
- 「视频直播技术详解」系列之五:延迟优化
- 「视频直播技术详解」系列之六:现代播放器原理
- 「视频直播技术详解」系列之七:直播云 SDK 性能测试模型