首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >音视频基础概念

音视频基础概念

作者头像
Cellinlab
发布2023-05-17 20:46:13
发布2023-05-17 20:46:13
9580
举报
文章被收录于专栏:Cellinlab's BlogCellinlab's Blog

# 视频

# 视频、图像像素点数据格式

常见色彩格式:

  • GRAY 色彩空间
    • GRAY 灰度模式表示
      • 8 位展示的灰度,取值 0 - 255,表示明暗程度,0 表示最暗,255 表示最亮
      • 每个像素点用 8 位深展示,所以每个像素点占用 1 个字节
      • 即如果一张图片的分辨率为 1920x1080,那么这张图片的大小为 1920x1080x1=2,073,600 字节
  • YUV 色彩空间
    • YUV 色彩表示:在视频领域,通常以 YUV 的格式来存储和显示图像
      • Y 表示视频的灰阶值,或者说亮度值
      • UV 表示色彩度
        • 如果忽略 UV 值,那么 YUV 就是灰度图像(和 GRAY 一样)
      • 原图与 YUV 的 Y 通道、U 通道 和 V 通道的示例
    • 为了节省带宽,大多数 YUV 格式平均使用的每像素位数都少于 24 位
    • 主要色彩采样格式(YUV 表示法也称 A:B:C)表示法
      • YCbCr 4:2:0
        • YUV 4:2:0 采样格式,水平每 2 个像素与垂直每 2 个像素(即 2x2 )中 y 取样 4 个, u 取样 1 个,v 取样 1 个,所以每 2x2 个像素 y 占有 4 个字节,u 占有 1 个字节,v 占有 1 个字节,平均 yuv420 每个像素所占位数为:(4+1+1) × 8 bit ÷ 4 pix = 12 bpp
      • YCbCr 4:2:2
        • YUV 4:2:2 采样格式,水平每 2 个像素(即 2x1 的 2 个像素)中 y 取样 2 个,u 取样 1 个,v 取样 1 个,所以每 2x1 个像素 y 占有 2 个字节,u 占有 1 个字节,v 占有 1 个字节,平均 yuv422 每个像素所占位数为:(2+1+1) × 8 bit ÷ 2 pix = 16 bpp
      • YCbCr 4:1:1
        • YUV 4:1:1 采样格式,水平每 4 个像素(即 4x1 的 4 个像素)中 y 取样 4 个,u 取样 1 个,v 取样 1 个,所以每 4x1 个像素 y 占有 4 个字节,u 占有 1 个字节,v 占有 1 个字节,平均 yuv411 每个像素所占位数为:(4+1+1) × 8 bit ÷ 4 pix = 12 bpp
      • YCbCr 4:4:4
        • YUV 4:4:4 采样格式,水平每 1 个像素(即 1x1 的 1 个像素)中 y 取样 1 个,u 取样 1 个,v 取样 1 个,所以每 1x1 个像素 y 占有 1 个字节,u 占有 1 个字节,v 占有 1 个字节,平均 yuv444 每个像素所占位数为:(1+1+1) × 8 bit ÷ 1 pix = 24 bpp
    • YUV 在内存中的存储方式,以宽度为 6、高度为 4 的 yuv420 格式为例,一帧图像读取和存储在内存中的方式
  • RGB 色彩空间
    • RGB 色彩表示:三原色光模式,一种加色模型,将红(Red)、绿(Green)、蓝(Blue)三原色的色光按照不同的比例相加,来合成各种色彩光
      • 每象素 24 位编码的 RGB 值:使用三个 8 位无符号整数(0 到 255)表示红色、绿色和蓝色的强度
      • 当前主流的标准表示方法,用于交换真彩色和 JPEG 或者 TIFF 等图像文件格式里的通用颜色
      • 可以产生一千六百万种颜色组合,对人类的眼睛来说,其中有许多颜色已经无法确切地分辨了
      • 使用每原色 8 位的全值域,RGB 可以有 256 个级别的白 - 灰 - 黑深浅变化,255 个级别的红色、绿色和蓝色以及它们等量混合的深浅变化,但是其他色相的深浅变化相对要少一些
      • 在数字视频的 RGB 不是全值域的,视频 RGB 有比例和偏移量的约定,即 (16, 16, 16)是黑色,(235, 235, 235)是白色
      • RGB 常见的展现方式分为 16 位模式和 32 位模式
        • 16 位模式(RGB565、BGR565、ARGB1555、ABGR1555)分配给每种原色各为 5 位,其中绿色为 6 位,因为人眼对绿色分辨的色调更敏感
          • 某些情况下每种原色各占 5 位,余下的 1 位不使用或者表示 Alpha 通道透明度
        • 32 位模式中主要用其中 24 位来表示 RGB - 32 位模式(ARGB8888),实际就是 24 位模式,余下的 8 位不分配到象素中,这种模式是为了提高数据处理的速度 - 在一些特殊情况下,在有些设备中或者图像色彩处理内存中,余下的 8 位用来表示象素的透明度(Alpha 通道透明度)
  • HSL 和 HSV 色彩空间
    • HSL 与 HSV 色彩表示
      • HSL 和 HSV 是将 RGB 色彩模型中的点放在圆柱坐标系中的表示法,在视觉上会比 RGB 模型更加直观
      • HSL,就是色相(Hue)、饱和度( Saturation)、亮度( Lightness)
      • HSV 是色相(Hue)、饱和度( Saturation)和明度(Value)
    • 色相(H)是色彩的基本属性,即颜色名称,如红色、黄色等
    • 饱和度(S)是指色彩的纯度,越高色彩越纯,低则逐渐变灰,取 0 ~ 100% 的数值
    • 明度(V)和亮度(L),同样取 0 ~ 100% 的数值

HSV 色彩空间还可以表示为类似于上述圆柱体的圆锥体

HSV 色彩空间还可以表示为类似于上述圆柱体的圆锥体,色相沿着圆柱体的外圆周变化,饱和度沿着从横截面的圆心的距离变化,明度沿着横截面到底面和顶面的距离而变化。这种用圆锥体来表示 HSV 色彩空间的方式可能更加精确,有些图像在 RGB 或者 YUV 的色彩模型中处理起来并不精准,可以将图像转换为 HSV 色彩空间,再进行处理,效果会更好。

# 图像的色彩空间/色域

色彩空间也叫色域,指某种表色模式用所能表达的颜色构成的范围区域。而这个范围,不同的标准支持的范围则不同。

# 视频逐行/隔行扫描

  • 隔行扫描(Interlaced)
    • 一种将图像隔行显示在扫描式显示设备上的方法,例如早期的 CRT 电脑显示器
  • 逐行扫描(Progressive)
    • 通常从上到下地扫描每帧图像,这个过程消耗的时间比较长,占用的频宽比较大,所以在频宽不够时,很容易因为阴极射线的荧光衰减在视觉上产生闪烁的效应

老电视视频中物体在移动时会出现条纹的原因

相比逐行扫描,隔行扫描占用带宽比较小。扫描设备会交换扫描偶数行和奇数行,同一张图像要刷两次,所以就产生了条纹。

早期的显示器设备刷新率比较低,所以不太适合使用逐行扫描,一般都使用隔行扫描。在隔行扫描的时候,常见的分辨率描述是 720i、1080i,“i”就是 Interlaced。由于逐行扫描显示的刷新率的提高,使用者已经不会感觉到屏幕闪烁了。因此,逐行扫描越来越常见,即经常见到的 720p、1080p。

# 帧率

帧率(FrameRate),指一秒钟刷新的视频图像帧数(Frames Per Second),视频一秒钟可以刷新多少帧,取决于显示设备的刷新能力。不同时代的设备,不同场景的视频显示设备,刷新的能力也不同,所以针对不同的场景也出现了很多种标准。

常见标准的帧率:

  • NTSC 标准的帧率是 30000/1001,大约为 29.97 fps
  • PAL 标准的帧率是 25/1,为 25 fps
  • QNTSC 标准的帧率是 30000/1001,大约为 29.97 fps
  • QPAL 标准的帧率是 25/1,为 25 fps
  • SNTSC 标准的帧率是 30000/1001,大约为 29.97 fps
  • SPAL 标准的帧率是 25/1,为 25 fps
  • FILM 标准的帧率是 24/1,为 24 fps
  • NTSC-FILM 标准的帧率是 24000/1001,大约为 23.976 fps

为什么 NTSC 标准的分辨率都不是整除的帧率,分母都是 1001?

NTSC 制式的标准为了解决因为色度和亮度频率不同引起失真色差的问题,将频率降低千分之一,于是就看到了有零有整的帧率。

# 图像分辨率与比例

  • 分辨率
    • 分辨率通常由宽、高与像素点占用的位数组成,计算方式为图像的宽乘以高
    • 一般,分辨率越高代表图像质量越好,越能看到图像的更多细节,文件也就会越大
  • 显示宽高比(DAR,Display Aspect Ratio),是指显示器或视频显示设备的显示宽高比。与之相对的是视频本身的宽高比(PAR,Pixel Aspect Ratio)

# 音频

# 音频采样数据格式

音频采集基本流程:先采集到模拟信号,然后通过 ADC(模数转换)将模拟信号转换成数字信号以后,再通过 PCM(Pulse Code Modulation)脉冲编码调制对连续变化的模拟信号进行采样、量化和编码转换成离散的数字信号,从而实现音频信号的采集。

PCM 文件就是未经封装的音频原始文件,或者叫做音频“裸数据”。不同的扬声器、耳机设备,甚至是声卡输出设备,对音频的裸数据支持的情况不一样,有的设备支持单精度浮点型数据、有的设备支持双精度浮点型数据、有的设备支持无符号型数据、有的设备支持有符号型数据。因为输出的数据类型的支持不同,所以 PCM 采样数据的格式在输出之前,需要转换一下。这些数据的格式通常称之为采样数据格式。

# 音频采样频率

通常人耳能够听到的频率范围是在 20Hz ~ 20kHz 之间,为了保证音频不失真,音频的采样频率通常应该在 40kHz 以上,而理论上采样率大于 40kHz 的音频格式都可以称之为无损格式。

数字音频领域常用的采样率与对应的使用场景:

  • 8000 Hz 主要是电话通信时用的采样率,对于传达人们说话时的声音已经足够了
  • 11025 Hz、22050 Hz 主要是无线电广播用的采样率
  • 44100 Hz 常用于音频 CD,MP3 音乐播放等场景
  • 48000 Hz 常用于 miniDV、数字电视、DVD、电影和专业音频等设备中

# 音频的声道与布局

采集不同方位的声源,然后通过不同方位的扬声器播放出来就产生了不同的声道。

# 音频采样位深度

采样的位深度,也叫采样位深,它决定了声音的动态范围。常见的 16 位(16bit)可以记录大概 96 分贝(96dB)的动态范围,也可以理解为每一个比特大约可以记录 6dB 的声音。

位深度并不是越大越好,也不是越小越好,不同的场景有不同的应用。

通常为了高保真,会选择使用 32bit,甚至 64bit 来表示音频。而常规音频通话使用 16bit 来表示即可,当然条件有限的话,8bit 也可以,但它是底线,8bit 的音频表示,听起来有时候会比较模糊。

# 音频的码率

按照某种频率计算一定数据量的单位,常用的码率统计时间单位为秒,所以码率也就是一秒钟的数据量,通常用 bps(bits per second)来表示,也就是每秒钟有多少位数据。而平时所说的码率,可以简单理解为每秒钟存储或传输的编码压缩后的数据量。

音频的码率可以间接地表示音频的质量,一般高清格式的码率更高。

# 音频的编解码

音频在传输和存储时,如果直接存储 PCM 音频数据的话,消耗的带宽或者存储空间会比较多,所以我们为了节省传输带宽或者存储,通常会选择对音频数据做编码压缩处理。

常见的音频编码有 AAC、MP3、AC-3、OPUS,个别地方还可能会使用 WMA,但是从兼容性来看,AAC 和 OPUS 更出众一些。目前 AAC 应用于众多音乐播放器和音乐格式封装中,OPUS 常见于语音通信中。

编码应用场景:

  • AAC:适合做音乐压缩,支持的音质与硬件兼容性更好一些
  • MP3:音频编码压缩方式相对于 AAC 性价比低一些
  • AC-3:效果更好,兼容性略差
  • OPUS:适合做音频通话,兼容性好

# 音视频的封装与转码

视频转码主要涉及编码压缩算法(Encoding)、格式封装操作 (Muxing)、数据传输 (如 RTMP、RTP)、格式解封装(Demuxing)、解码解压缩算法(Decoding)几方面的操作。这些操作需要一个共识的协定,所以通常音视频技术都会有固定的参考标准,如封装格式标准、编解码操作标准、传输协议标准等等。

将视频流、音频流写入到一个封装容器中之前,需要先弄清楚这个容器是否支持当前的视频流、音频流数据。

# 音视频编解码

音频是连续的采样序列,而视频则是连续的图像序列,这些序列是有前后关系的。如,有一个 6 帧的连续视频图像,每一帧都是宽 100、高 100 的画幅,在每一帧的正中央都有一个字母在变化。遇到这种情况时,如果每一帧图像全都做传输或存储操作的话,占用的带宽或空间都会很大。

为了节省空间,可以来分析一下图像的规律。6 帧图像大范围是相同的,只有正中心的小部分内容是变化的,可以推论,刷新第一帧图像后,从第二帧开始,只要刷新正中心字母区域的内容即可。即局部更新,只需要逐步更新 A、B、C、D、E、F 的区域就可以,在传输内容的时候既节省带宽,又能在存储内容的时候节省画幅的数据存储空间。

在视频里不仅仅有内容的更新,还涉及内容位置的运动等变化,所以视频内容更新的算法会更复杂一些。在做视频压缩的时候,就拿前面的这个例子来说,需要有一个参考帧,这里参考的是第一帧,后面每一帧都参考前面一帧做了局部更新。而视频图像序列不能只做局部更新,因为里面的目标对象还会运动,所以不仅可以前向做参考,还有可以做双向参考的技术。在这个过程中就涉及了图像的类型,通常遇到的是这三类帧:I 帧、P 帧和 B 帧。

I 帧作为关键帧,仅由帧内预测的宏块组成。而 P 帧代表预测帧,通过使用已经编码的帧进行运动估计,B 帧(双向预测帧) 则可以参考自己前后出现的帧。如果比较 IBP 帧包所占空间大小的话,通常是 I 帧> P 帧> B 帧,所以适当地增加 B 帧可以减少视频流占用的带宽或者存储空间。

I、P、B 帧在视频解码显示时的顺序:

解码顺序是 1423756,但是显示顺序却是 1234。当编码中存在 B 帧的时候,因为解码需要双向参考帧,所以需要多缓存几帧作为参考数据,从而也就带来了一定的显示延迟。所以在实时直播场景下,参考标准中推荐的做法通常是不带 B 帧

在视频编码时,因为图像的画面以及图像中对象运动的复杂程度比较高,为了保证清晰度,运动的图像组中通常也会包含更多的图像运动参考信息,所以压缩难度也提升了很多,压缩后的视频码率也就变得比常规图像更高一些,这个码率的波动通常时高时低,具有可变性,一般称之为可变码率(VBR)

在有些直播场景下,因为一个传输信号通道中会携带多条流,为了确保多条流在同一个信号通道中互不干扰,一般会要求编码时采用恒定码率的方式(CBR)。但是如果采用 CBR 的话,画质往往会有一些损耗。

# 视频封装

在容器格式的内部会存储音频、视频的数据,这些数据可以称之为视频流、音频流。音视频流在容器中的存储形式有两种,既可以交错式存储,也可以是不同类型的流单独存储在自己的连续区域。

# 封装容器格式:MP4

MP4 格式是最常见的多媒体文件格式,其跨平台性、兼容性都很好。

MP4 格式标准为 ISO-14496 Part 12、ISO-14496 Part 14:

  • MP4 文件由许多个 Box 与 FullBox 组成
    • 每个 Box 由 Header 和 Data 两部分组成
      • Header 包含了整个 Box 的长度的大小(Size)和类型(Type)
        • 当 Size 等于 0 时,代表这个 Box 是文件中的最后一个 Box
        • 当 Size 等于 1 时说明 Box 长度需要更多的 bits 位来描述,在后面会定义一个 64bits 位的 largesize 用来描述 Box 的长度
        • 当 Type 为 uuid 时,说明这个 Box 中的数据是用户自定义扩展类型
      • Data 为 Box 的实际数据,可以是纯数据,也可以是更多的子 Box
      • 当一个 Box 中 Data 是一系列的子 Box 时,这个 Box 又可以称为 Container Box
    • FullBox 则是 Box 的扩展,在 Box 结构的基础上,在 Header 中增加 8bit 位 version 标志和 24bit 位的 flags 标志

MP4 封装格式中,经常会遇到 moov box 和 mdat box。存储音频和视频数据的索引信息的是 moov box,音频和视频的索引信息在 moov 中分别存储在不同的 trak 里面。每个 trak 里面会保存对应的数据采样相关的索引信息。通过获得 moov 中的索引信息,才能从 mdat 中读取音视频数据。因此,MP4 文件中的 moov 信息是必不可少的。如果缺少 moov 信息,这个 MP4 文件将无法被成功打开。

在存储音视频数据的时候,如果是顺序读取音视频数据的话,当然就是音视频数据交错存储比较好,这样会给内存、硬盘或者网络节省很多开销。

如果音视频分开,单独存放在各自的区域的话,为了更好地做音视频同步,通常会读取一段视频帧数据,再读取一段音频采样数据,这样势必会不断跳跃式地读取硬盘中的数据,或者不断地发起网络请求,如果是 http 请求的话,会看到大量的 http range 请求,给网络开销与服务器并发造成很大的压力。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/8/25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # 视频
    • # 视频、图像像素点数据格式
    • # 图像的色彩空间/色域
    • # 视频逐行/隔行扫描
    • # 帧率
    • # 图像分辨率与比例
  • # 音频
    • # 音频采样数据格式
    • # 音频采样频率
    • # 音频的声道与布局
    • # 音频采样位深度
    • # 音频的码率
    • # 音频的编解码
  • # 音视频的封装与转码
    • # 音视频编解码
    • # 视频封装
    • # 封装容器格式:MP4
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档