音视频系统基础入门(一)
音视频系统基础入门(一)
音视频系统基础入门(一)
下篇音视频系统入门(二)将会介绍音视频相关协议等知识。
一, 音视频相关基本概念
1.音视频概念
音视频(Audio-Video)是指声音(音频)和图像(视频)的综合表现形式。它们是多媒体的核心组成部分,被广泛应用于通信、娱乐、教育、广告等各个领域。理解音视频的概念及其技术特性是进行音视频处理和传输的基础。
-
音频(Audio)
音频是通过空气等介质进行振动而传播的声音信号,振动频率越快声音越尖锐,描述振动频率的单位为赫兹(Hz),表示每秒振动次数,主要包括人声、音乐、环境音等。音频信号可以被记录、传输、处理和播放。音频处理通常按顺序涉及以下几个步骤:
- 采样:将连续的模拟音频信号转换为离散的数字信号。
- 量化:将采样后的信号幅度转换为离散的数字值。
- 编码:将量化后的数字音频信号进行压缩和编码,以减少数据量。
- 解码:将编码的音频信号进行解压缩和解码,恢复为可播放的音频信号。
- 播放:将解码后的音频信号通过扬声器或耳机输出,供人耳听觉。
-
视频(Video)
视频是通过图像序列来表示动态视觉信息的信号。视频信号可以被记录、传输、处理和播放。视频处理通常涉及以下几个方面:
- 帧率:每秒显示的图像帧数,常见帧率有 24fps、30fps、60fps 等。
- 分辨率:图像的像素数 (宽x高),常见分辨率包括:720p(1280x720)、1080p(1920x1080)、4K(3840x2160)等。
- 颜色空间:图像颜色的表示方法,常见颜色空间有 RGB、YUV 等。
- 压缩:将视频信号进行压缩,以减少数据量便于储存和传输,常见的视频压缩标准有 H.264、H.265等。
- 解压缩:将压缩的视频信号进行解压缩,恢复为可播放的图像序列。
- 显示:将解压缩后的图像序列通过显示设备输出。
-
应用场景
通信:如视频会议、网络电话等,通过音视频技术实现远程交流。
娱乐:如电影、电视、网络视频、游戏等,通过音视频技术提供视听享受。
教育:如在线课程、教育视频等,通过音视频技术进行远程教学。
广告:如视频广告、音频广告等,通过音视频技术进行品牌宣传。
-
未来发展
1)高分辨率和高帧率:如 8K 视频、120fps 视频,提供更加清晰和流畅的视觉体验。
2)虚拟现实(VR)和增强现实(AR):通过沉浸式音视频技术,提供更加逼真和互动的体验。
3)人工智能(AI):通过 AI 技术进行音视频内容的生成、分析和优化,提高音视频处理的智能化水平。
4)5G 网络:通过高速低延迟的 5G 网络,实现更高质量的实时音视频传输
2.音频相关概念
2.1 音频采样
从实际音频的模拟信号变成离散的数字信号过程:
音频采样是将连续的模拟音频信号在时间轴上离散化的过程。这个过程涉及到以下几个方面:采样率是指每秒对模拟音频信号进行采样的次数,单位是赫兹(Hz)。常见的采样率有 44.1kHz(CD 质量)、48kHz(专业音频和视频)、96kHz(高分辨率音频)等。根据奈奎斯特定理,采样率必须至少是信号中最高频率的两倍,才能完整地恢复原始信号。
采样过程:在采样过程中,模拟信号在离散的时间点上被记录下来。这些时间点被称为采样点。每个采样点的值代表该时刻信号的振幅。采样率越高,采样点越密集,数字信号对原始模拟信号的近似越准确,但也意味着数据量更大。
2.2 音频量化
量化是将采样点的振幅值从连续值(模拟值)转换为离散值(数字值)的过程。这个过程涉及到以下几个方面:量化位数是指每个采样点用多少位二进制数表示。常见的量化位数有 8 位、16 位、24 位、32 位等。位数越高,能够表示的振幅级别越多,音频信号的动态范围越大,音质越好。
量化过程:在量化过程中,每个采样点的模拟值被映射到最接近的离散值。这些离散值在二进制系统中表示为有限的数值。量化过程中会引入量化误差,即原始模拟值与量化后的离散值之间的差异,这些量化误差会表现为噪声,称为量化噪声。通过增加量化位数,可以增加离散值个数从而表示更多层次的模拟值,可以减少原始模拟值和量化后的离散值的量化噪声,提高音频信号的质量。
采样与量化的关系:采样和量化是模拟音频信号转换为数字信号的两个关键步骤,它们共同决定了数字音频信号的质量和特性:
- 采样率与量化位数的选择:高采样率和高量化位数通常能提供更好的音频质量,但也会增加数据量和存储需求。根据应用场景的不同,可以选择合适的采样率和量化位数。例如,音乐录制通常使用 44.1kHz 采样率和 16 位量化位数,而专业音频制作可能使用 48kHz 采样率和 24 位量化位数。
- 平衡质量和数据量:在实际应用中,需要平衡音频质量和数据量,以满足存储、传输和处理的需求。例如,在实时音频通信中,可能需要降低采样率和量化位数,以减少数据量,降低带宽需求和延迟。
2.3 音频声道数
音频声道数(Audio Channels)是指音频信号中独立的声音信号路径的数量。常见的声道数包括:单声道(Mono)、立体声(Stereo)、环绕声(Surround Sound)等。
- 单声道(Mono):只有一个声道,通常用于电话通信、无线电广播等场合。声音信号相对简单,无法提供方向感和空间感。
- 立体声(Stereo):有两个独立的声道,分别是左声道和右声道,常用于音乐播放、视频音轨等。能提供基本的方向感和空间感,提升听觉体验。
- 环绕声(Surround Sound):有多个声道,提供更立体的声道环绕,常见配置包括 5.1 声道、7.1 声道等。
- 5.1声道:包括前左、前中、前右、左后、右后五个主声道和一个低音声道。
- 7.1 声道:包括前左、前中、前右、左侧、右侧、左后、右后七个主声道和一个低音声道。广泛应用于家庭影院、电影院和游戏音效中,提供沉浸式的听觉体验。
2.4 音频位深(量化位数)
音频位深(Bit Depth)是指每个采样点用多少位二进制数表示,也叫量化位数,位深直接影响音频的动态范围和信号精度。

- 8 位(8-bit):每个采样点用 8 位表示,可表示 256(2^8)个不同的音量级别。动态范围较小,音质较低。主要用于早期计算机音频和某些低质量的音频应用。
- 16 位(16-bit):每个采样点用 16 位表示,可表示 65,536(2^16)个不同的音量级别。动态范围较大,音质较好。CD 音频的标准,广泛用于音乐制作和高质量音频播放。
- 24 位(24-bit):每个采样点用 24 位表示,可表示 16,777,216(2^24)个不同的音量级别。动态范围更大,音质更佳。常用于专业音频制作和高分辨率音频格式。
- 32 位(32-bit):每个采样点用 32 位表示,可表示 4,294,967,296(2^32)个不同的音量级别。动态范围极大,适用于极高要求的专业音频处理和录制。
位深与音质的关系
- 动态范围:位深越高,能够表示的音量级别越多,动态范围越大。更高的位深可以捕捉到更微小的声音变化,提供更细腻的音质。
- 量化噪声:位深越低,量化噪声越大,音质越差。更高的位深可以减少量化噪声,提高音频信号的精度和清晰度。
2.5 音频比特率
比特率指的是经过处理后的每秒所包含原音频数据的字节密度或音频每秒需要传输的字节数,单位通常是 kbps。比特率越高,意味着每秒用于描述声音的信息量越大,理论上音质就越好,但文件体积也越大。
比特率 ( k b p s ) ≈ 采样率 ( k H z ) × 位深度 ( b i t ) × 声道数 比特率 (kbps) \approx 采样率 (kHz) \times 位深度 (bit) \times 声道数 比特率(kbps)≈采样率(kHz)×位深度(bit)×声道数
计算公式如上,一张CD音频的标准是:44.1kHz × 16bit × 2(立体声) = 1411.2 kbps。这就是CD音质的原始数据流量。
在有损压缩中的应用:对于MP3、AAC等格式,我们常说的128kbps、320kbps,指的是经过压缩后的平均数据流量。编码器会通过心理声学模型,在目标比特率的限制下,智能地分配数据,保留最重要的听觉信息,丢弃次要信息。
- 高比特率(如320kbps):分配的数据多,保留的细节丰富,音质接近原始,文件较大。
- 低比特率(如64kbps):分配的数据少,丢弃的细节多,音质损失明显,文件小巧。
2.6 音频延迟
音频延迟指的是声音从产生(或输入)到被听到(或输出)所经历的时间差,单位是毫秒。
产生延迟的主要环节:
- 编解码延迟:对音频数据进行压缩(编码)和解压缩(解码)需要计算时间。复杂的有损编码(如AAC)通常比简单的无损编码(如WAV)耗时更长,这就是您表格中“音频延迟”一栏的由来。AAC由于算法更先进,在同等音质下延迟可以比MP3更低。
- 缓冲延迟:为了应对数据流波动、防止播放中断,系统会预先读取并存储一小段音频数据(缓冲区),这必然会引入延迟。
- 硬件和驱动延迟:声卡、操作系统音频驱动处理信号的时间。
音频延迟影响
- 对实时应用至关重要:在网络语音通话、直播、现场音乐演奏、电竞游戏中,高延迟会导致对方说话回声、音画不同步、按键和听到枪声有可感知的滞后,体验极差。通常需要将总延迟控制在 20ms 以下 才能感觉“实时”。
- 对非实时播放影响小:单纯听音乐、看电影时,几百毫秒的延迟通常无关紧要,因为播放器会做好同步。
3.视频相关概念
3.1 视频帧率
视频帧率是指视频每秒显示的图像帧数,单位是(fps)。帧率决定了视频的流畅性和运动表现。常见的帧率有 24fps、30fps、60fps 等。
- 24fps:常用于电影和影院放映,提供电影般的视觉效果。
- 30fps:常用于电视广播和大多数在线视频平台,提供流畅的观看体验。
- 60fps 及以上:用于高动态范围的运动视频和游戏录制,提供极其流畅的运动表现。
帧率的影响
帧率越高,视频的流畅性越好,运动物体的显示越清晰,但数据量也越大。帧率越低,视频的流畅性较差,可能出现卡顿和拖影现象,但数据量较小。

3.2 视频分辨率
视频分辨率是指视频图像的像素尺寸,通常表示为宽度乘以高度(例如 1920x1080)。分辨率决定了视频的清晰度和细节表现。常见分辨率包括:
- 标清(SD):例如 640x480。
- 高清(HD):例如 1280x720。
- 全高清(Full HD):例如 1920x1080。
- 超高清(Ultra HD):例如 3840x2160(4K)。
分辨率的选择:根据播放设备和带宽条件选择合适的分辨率。例如,手机观看通常使用 720p 或 1080p,而大屏幕电视和投影仪则需要 4K 分辨率。
分辨率的影响
分辨率越高,视频的清晰度和细节越好,但数据量和处理要求也越高。低分辨率视频可能在大屏幕上显示时显得模糊,但数据量较小,适合低带宽环境。

3.3 视频色深(位深)
也叫视频位深,视频色深是指每个像素表示颜色所用的位数,决定了颜色的准确性和层次感。色深通常用位数表示,如 8 位、10 位、12 位等。
- 8 位:每个颜色通道(红、绿、蓝)使用 8 位,共 24 位色深,支持 1670 万种颜色。
- 10 位:每个颜色通道使用 10 位,共 30 位色深,支持超过 10 亿种颜色。
- 12 位及以上:用于高动态范围(HDR)视频,提供更广泛的颜色范围和更细腻的颜色层次。
| 位深 | 每个颜色通道位数 | 每个像素总位数 | 可表示的颜色数量 |
|---|---|---|---|
| 8 位位深 | 8 位 | 24 位(8 位红色 + 8 位绿色 + 8 位蓝色) | 约 1677 万种颜色(256 × 256 × 256) |
| 10 位位深 | 10 位 | 30 位(10 位红色 + 10 位绿色 + 10 位蓝色) | 约 10.7 亿种颜色(1024 × 1024 × 1024) |
| 12 位位深 | 12 位 | 36 位(12 位红色 + 12 位绿色 + 12 位蓝色) | 约 687 亿种颜色(4096 × 4096 × 4096) |
| 16 位位深 | 16 位 | 48 位(16 位红色 + 16 位绿色 + 16 位蓝色) | 约 281 万亿种颜色(65536 × 65536 × 65536) |
色深的影响
色深越高,视频的颜色表现越准确,过渡越平滑,尤其是在渐变和阴影部分表现更为明显。低色深的视频可能出现色带现象(banding),即颜色过渡不够平滑。

综合考虑
在实际应用中,需要综合考虑视频的帧率、分辨率和色深,以满足不同场景和设备的需求。
-
高质量视频:高帧率、高分辨率和高色深的视频质量最好,但数据量和处理要求也最高,适用
于高端播放设备和宽带环境。
-
标准质量视频:适中帧率(30fps)、标准高清分辨率(1080p)和 8 位色深的视频质量较好,适合大多数观看场景和设备。
-
低带宽环境:较低帧率、较低分辨率和标准色深的视频可以在低带宽和处理能力有限的环境中播放,适合移动设备和网络带宽有限的情况。
3.4 视频码率
视频码率指的是经过处理后的每秒包含原视频数据的字节密度或视频每秒需要传输的字节数,单位包括有bps、kbps和Mbps。用于描述视频文件的大小和传输速度,视频码率越大,视频文件越大,所要求的传输速度越大,视频质量越好。按照整个视频文件中的每个单位秒内的视频码率是否发生变化,可以分为以下几类:
-
恒定码率(CBR, Constant Bitrate):
在整个视频文件中,码率保持恒定。优点是易于预测文件大小和带宽需求,适用于实时流媒体传输。缺点是在复杂场景可能不够灵活,导致质量波动。
-
可变码率(VBR, Variable Bitrate):
码率根据视频内容的复杂度动态变化,在简单场景下使用较低码率,在复杂场景下使用较高码率。优点是更高的编码效率和视频质量,适用于离线视频文件。缺点是文件大小和带宽需求难以预测,不适合实时传输。
-
平均码率(ABR, Average Bitrate):
通过在视频中动态调整码率,保证整体码率接近设定的平均值。优点是兼顾了 CBR 和 VBR 的优点,适用于需要平衡质量和文件大小的场景。缺点是复杂度较高,可能需要更多的计算资源。
视频码率与视频质量
- 高码率:提供更高的视频质量,因为更多的比特可以用于表示视频细节。文件大小更大,传输和存储要求更高。适用于高分辨率、高帧率的视频,如 4K 视频和专业视频制作。
- 低码率:视频质量较低,可能会出现压缩伪影(如马赛克、模糊)。文件大小更小,传输和存储要求更低。适用于带宽有限的场景,如移动设备、低速网络环境
视频码率的选择
高分辨率(如 1080p、4K)和高帧率(如 60fps)视频通常需要更高的码率。低分辨率(如 480p、720p)和低帧率(如 24fps、30fps)视频可以使用较低的码率。
二, 音视频编解码
1.音视频编解码的意义
音视频编解码是现代多媒体技术的核心,它通过对音频和视频信号的压缩和解压缩来减少数据量并保证数据恢复,实现高效存储和传输。以下是对音视频进行编解码的主要原因及其重要性:
-
减少数据量
音视频数据通常包含大量的信息,未经压缩的原始数据体积庞大,不便于存储和传输。通过编解码技术,可以大幅度减少音视频文件的大小,从而降低存储空间需求和传输带宽要求。
- 原始音视频数据:未经压缩的音视频数据量非常大,例如一秒钟的高清(HD)视频可能需要数百兆字节的存储空间。
- 压缩后音视频数据:通过编解码技术,可以将数据压缩到原始数据的十分之一甚至更小,从而显著节省存储空间和带宽。
-
提高传输效率
在网络带宽有限的情况下,音视频数据的高效传输是一个重要挑战。编解码技术可以大幅度降低数据量,使得音视频数据能够在现有网络条件下流畅传输。
- 实时传输:视频会议、直播等实时应用需要快速传输高质量的音视频数据,编解码技术能够确保低延迟和高质量的实时传输。
- 流媒体传输:流媒体服务如 Netflix、YouTube 等依赖编解码技术,在用户观看视频时动态调整码率,以适应不同的网络带宽条件,确保用户获得最佳的观看体验。
-
提高存储效率
通过对音视频数据进行压缩,可以在有限的存储设备中存储更多的内容,从而提高存储效率。
- 个人存储:用户可以在个人设备如手机、平板电脑等存储更多的音视频文件,如音乐、电影、电视剧等
- 云存储:在线存储和备份服务依赖编解码技术来压缩和存储大量用户数据,从而降低存储成本。
-
兼容性和标准化
编解码技术提供了标准化的音视频格式,使得不同设备和应用能够互相兼容和交换音视频数据。
- 标准化格式:如 H.264、H.265、MP3、AAC 等编解码标准,使得不同厂商的设备能够互相兼容,用户可以在不同设备上播放相同格式的音视频文件。
- 跨平台支持:标准化的编解码格式使得音视频文件可以在不同操作系统和平台上播放,如Windows、MacOS、Linux、Android、iOS 等。
-
增强体验
编解码技术能够在保证音视频质量的同时,减少数据量,使得用户能够在有限的网络和存储条件下,获得更好的音视频体验。
- 高清体验:通过高效编解码技术,用户可以在有限带宽下观看高清甚至 4K 视频,享受更清晰、更流畅的画质。
- 音质优化:高效音频编解码技术能够在低码率下提供接近无损音质的听觉体验。
2.音视频编码
根据编码的实现方式,可以分为软件编码(软编码)和硬件编码(硬编码)。两者在性能、灵活性、成本等方面各有优缺点,适用于不同的应用场景。
2.1 软件编码
软编码是指利用 CPU 或 GPU 等通用计算资源,通过遵循某种编解码格式的软件算法对音视频数据进行编码的方式。软编码依赖于编解码库和软件实现的算法,例如 FFmpeg、x264 等。
- 优点:
- 灵活性高:软件编码可以方便地调整编码参数,如分辨率、比特率、帧率等,以满足不同的需求。支持多种编解码标准和格式,能够灵活适应各种应用场景。
- 易于更新和维护:编码算法可以通过软件更新来改进性能和质量,增加新的功能和特性。开发者可以快速迭代和优化编码算法,修复漏洞和兼容性问题。
- 成本较低:无需额外的硬件设备,只需依赖现有的通用处理器(CPU/GPU),降低了设备成本。适用于资源有限的场景,如个人电脑和移动设备。
- 缺点:
- 性能有限:编码速度和效率受到 CPU 性能的限制,对于高分辨率和高帧率的视频编码可能力不从心。编码过程可能占用大量系统资源,影响其他应用的运行。
- 功耗较高:由于编码过程需要大量计算,软编码会显著增加 CPU/GPU 的功耗,尤其在移动设备上可能导致电池耗尽过快。
2.2 硬件编码
硬编码是指利用专用的硬件编码器(如 ASIC、FPGA、DSP 等)按照事先设计好的编解码格式的对音视频数据进行编码。硬编码器集成在图形处理器(GPU)或独立的视频编码设备中,直接处理编码任务。
- 优点:
- 高性能:硬编码器设计专用于音视频编码,具备更高的处理效率和速度,能够实时处理高分辨率和高帧率的视频。适用于需要快速编码和低延迟的场景,如直播、视频会议等。
- 低功耗:硬编码器通常比软编码更节能,因为专用硬件在功耗和性能优化方面具有显著优势。特别适合嵌入式设备和移动设备,延长电池续航时间。
- 缺点:
- 灵活性较低:硬编码器的编码参数和功能较为固定,难以灵活调整和定制,不如软编码灵活。支持的编码标准和格式有限,可能无法满足所有应用需求。
- 成本较高:需要额外的硬件设备和芯片,增加了设备成本和复杂度。硬件升级和维护成本较高,无法像软件更新那样快速迭代和改进。
- 开发难度大:开发硬件编码器需要较高的技术门槛,涉及硬件设计和低级编程,开发周期长。硬件的固有限制使得编解码算法的创新和优化难以迅速实现。
- 应用场景比较
- 软编码:适用于灵活性要求高、更新频繁的应用,如视频编辑软件、通用多媒体播放器、实验性编解码器开发等。适用于资源有限的设备,如个人电脑、服务器、部分移动设备。
- 硬编码:适用于性能要求高、实时性强的应用,如视频直播、视频会议、高清录像设备、安防监控等。适用于功耗敏感的设备,如智能手机、平板电脑、嵌入式系统。
3.音视频解码
类似于音视频编码的软编码方式和硬编码方式,同样具有音视频解码的软解码和硬解码方式。
3.1 软件解码
依靠设备的中央处理器(CPU),通过遵循某种编解码格式的软件算法(如FFmpeg库)来解压缩音视频数据。
- 优点:
- 兼容性极佳:支持几乎所有格式和编码标准,新格式可通过更新软件支持。
- 灵活性高:便于进行后期处理(如滤镜、色彩调整)。
- 缺点:
- 功耗高:复杂解码任务会显著增加CPU负载,导致设备发热、耗电快。
- 性能瓶颈:解码超高分辨率(如4K/8K)、高帧率或复杂编码的视频时,可能出现卡顿。
- 典型场景:电脑上的通用播放器(如VLC、PotPlayer)、视频编辑软件、以及需要处理特殊或老旧格式时。
3.2 硬件解码
调用设备中专用的解码电路(通常集成在GPU或芯片组内,如NVIDIA的NVENC、Intel的Quick Sync Video)来解压缩音视频数据。
- 优点:
- 高效节能:解码效率高,CPU占用率极低,发热和耗电少。
- 性能强劲:能流畅解码高码率、高分辨率的视频。
- 缺点:
- 格式支持有限:仅支持特定的主流编码格式(如H.264、H.265/HEVC、VP9)。
- 灵活性差:解码后的数据通常不便于软件进行深度处理。
- 典型场景:手机、平板、智能电视的视频播放;主流视频网站(如YouTube、B站)的客户端;以及所有对续航和流畅度有高要求的移动播放场景。
核心对比与选择
| 特性 | 软件解码 | 硬件解码 |
|---|---|---|
| 核心硬件 | CPU(通用处理器) | 专用解码电路(如GPU内) |
| 功耗 | 高 | 低 |
| 性能 | 受CPU性能限制 | 高,专为解码优化 |
| 兼容性 | 极高,支持格式全面 | 有限,支持主流格式 |
| 灵活性 | 高,便于后期处理 | 低 |
| 适用场景 | 通用播放、特殊格式、后期编辑 | 移动播放、在线流媒体、长续航需求 |
4.音视频编解码格式
4.1 相关概念
包括音视频编解码格式进行压缩的常见概念。
4.1.1 有损压缩和无损压缩
音频和视频数据的压缩是为了减少数据量,便于存储和传输。根据压缩过程中是否丢失信息,压缩方法可以分为无损压缩和有损压缩。
-
无损压缩
无损压缩是一种压缩技术,在压缩和解压缩过程中不会丢失任何信息。通过无损压缩,原始数据可以被完全恢复,常见协议包括:
FLAC、ALAC、WAV。具有以下几个特点:- 压缩比通常较低,压缩后的文件仍然比较大,保持原始数据的完整性,解压后数据与原始数据完全一致。
- 适用于对数据保真度要求高的场合,如专业音频编辑、医学影像、法律文档等
-
有损压缩
有损压缩通过去除人耳或人眼不敏感的数据来减少文件大小。这种方法在压缩过程中会丢失一些信息,解压后无法完全恢复原始数据,但通常可以在不显著影响感知质量的情况下大幅度降低文件大小。常用协议包括:**
MP3、AAC、OGG、H.264、H.265、JPEG**等,具有以下几个特点:- 压缩比高,压缩后的文件大大减小,解压后无法完全复原数据。
- 适用于一般的多媒体应用,如音乐流媒体、在线视频等。
4.1.2 视频压缩相关概念
在视频编码中,帧(Frame)是视频的基本单位,视频由一系列连续的帧组成。H.264 等视频编码标准采用帧内和帧间压缩技术,通过不同类型的帧(I 帧、P 帧、B 帧)来减少冗余数据,提高压缩效率。
I 帧(帧内压缩)
I 帧,即采用帧内压缩的帧内编码帧,是独立编码的帧,不依赖其他帧的数据,通过帧内压缩进行压缩数据。具有以下几个特点:
- 独立性:I 帧包含完整的图像数据,类似于一张静态图像,可以独立解码和显示。
- 大小较大:由于 I 帧包含完整的图像数据,其数据量较大,使用帧内压缩,压缩率相对较低。
- 关键帧:I 帧通常作为视频序列的关键帧,用于视频的快速定位和随机访问。视频播放和编辑软件可以快速定位 I 帧,从 I帧开始播放视频。
- 用途:适用于视频的开始、场景切换、关键帧。
P 帧(帧间压缩)
P 帧,即采用帧间压缩的前向预测帧,基于前面的 I 帧或 P 帧进行编码。具有以下几个特点:
- 依赖性:P 帧通过参考前面的 I 帧或 P 帧,记录预测差异信息来进行压缩,只包含变化部分的数据。在解码 P 帧时,需要依赖参考帧(I 帧或前面的 P 帧)。
- 压缩率高:由于仅记录帧间差异,数据量较小,压缩率较高。
- 用途:用于减少视频数据的冗余,提高压缩效率。
B 帧(帧间压缩)
B 帧,即采用帧间压缩的双向预测帧,基于前面的 I 帧或 P 帧和后面的 P 帧或 I 帧进行编码。具有以下几个特点:
- 依赖性强:B 帧在压缩时通过参考前后的帧,记录双向预测差异信息,只包含变化部分的数据。解码 B 帧时,需要依赖参考帧(前后的 I 帧或 P 帧)。
- 最高压缩率:由于参考了前后两帧,B 帧的压缩效率最高,数据量最小。
- 计算复杂性高:编码和解码 B 帧时需要处理双向预测,计算复杂度较高。
- 用途:进一步提高压缩效率,通常插入在 I 帧和 P 帧之间。
GOP画面组
GOP 是由一系列连续的 I 帧、P 帧和 B 帧组成的图像组,是视频编码中的基本单元。一般由一个 I 帧开始,后续跟随多个 P 帧和 B 帧。
GOP 长度:I 帧之间的距离,根据GOP长度是否固定可分为两种结构:
- 固定 GOP:GOP 长度恒定,I 帧间隔固定。
- 自适应GOP:根据场景变化动态调整 I 帧间隔。
4.2 视频编码压缩格式
4.2.1 H.264编码格式
H.264(也称为 AVC,Advanced Video Coding)是一种广泛使用的视频压缩标准,旨在提供高质量的视频压缩效率。H.264 引入了许多关键技术,以提高压缩效率和视频质量。
H.264关键技术
-
分块与分区
视频帧不会被整体处理,而是被切割成更小的单元,这构成了所有后续操作的基础。
- 宏块:视频帧被分割成 16x16 像素的宏块(Macroblock),每个宏块包含亮度和色度信息。
- 子宏块和块分割:宏块可以进一步分割为更小的块(如 16x8、8x16、8x8、8x4、4x8和 4x4),允许编码器根据画面内容做选择。
- 平坦区域(如天空):用大块(16x16)编码,节省码流。
- 细节丰富或运动复杂的区域(如树叶、人物边缘):用小块(4x4)编码,可以更精确地捕捉细节和运动,提升画质。
-
帧内预测(Intra Prediction)
对于一个待编码的块(如4x4),编码器会尝试多种预测方向(水平、垂直、对角线等),选择一种最接近原始块的模式。最终只编码“预测模式”和“预测残差”(原始块与预测块的差值)。H.264 支持多种帧内预测模式,在不参考其他帧的情况下,利用当前帧内已编码部分的像素来预测待编码部分的像素,从而减少冗余数据。
- 4x4 和 16x16 亮度块预测:可以选择不同的块大小进行预测,提高预测精度。
- 8x8 色度块预测:对色度信息进行预测,提供了多种预测模式(如 DC 预测、水平预测、垂直预测等)。
-
帧间预测(Inter Prediction)
利用视频在时间上的连续性,从已编码的参考帧中寻找与当前块最相似的区域。利用相邻帧之间的相似性来预测当前帧的像素值,从而减少冗余数据。
- 多参考帧预测:H.264 支持使用多个参考帧进行预测,提高了运动补偿的精度。
- 分块运动补偿:支持子宏块的运动补偿,可以对不同大小的块进行运动估计,即可以从不同大小的子宏块寻找与待编码块最相似的块。
- 四分之一像素精度运动估计:提供更高精度的运动矢量,提高预测效果,即还允许对宏块或子宏块进行在单个像素上进行1/4像素上插值寻找更匹配的块。
-
整数离散余弦变换与量化
对经过帧内预测和帧间预测后得到的“残差”数据进行处理,保留主要低频信息,舍弃人眼不敏感的高频细节,尽一步压缩残差数据。
-
整数变换:H.264 使用 4x4 或 8x8 的整数离散余弦变换(Integer DCT),避免了传统浮点 DCT 在不同设备上计算导致的舍入误差。将残差块从空间域变换到频域。变换后,大部分重要的、基础的形状信息(低频能量)会集中在左上角的少数低频系数上,比较重要;而细节、边缘、噪声等信息(高频能量)会分布在右下角的高频数值通常很小,可以忽略置于0。
-
量化:用一个“量化步长”除以系数,将连续的系数值映射为有限的整数。步长越大,压缩率越高,但丢失的细节(画质)也越多。编码器可以根据视频码率要求动态调整量化步长。
-
-
熵编码
对经过上述步骤后产生的所有信息(预测模式、运动矢量、量化后的系数等)进行最后的无损压缩。
- CAVLC(Context-Adaptive Variable Length Coding):适用于低复杂度应用,通过自适应的变长编码对变换系数进行编码。
- CABAC(Context-Adaptive Binary Arithmetic Coding):适用于高复杂度应用,通过自适应的二元算术编码提供更高的压缩效率,但同时更加复杂。
-
去块滤波
在编码过程中,为了减少块效应(blockiness),H.264 在解码后对每个宏块进行去块滤波处理。去块滤波器可以平滑块边界,减少块效应,提高视频质量。
-
网络抽象层
NAL 将编码后的视频数据的比特流封装成网络友好的独立的、带有头部信息的NAL单元,便于在不同的传输环境下进行传输。NAL 单元可以包含视频参数集(SPS)、图像参数集(PPS)、片段(slice)等数据。
- SPS/PPS:序列参数集和图像参数集,包含解码整个视频序列所必需的关键信息(如分辨率、帧率)。它们被单独封装并需要可靠传输。
- Slice:片段,一帧图像可以被分成多个片,每个片独立编码,利于错误恢复和并行处理。
-
自适应帧/场编码
H.264 支持帧编码和场编码,可以根据视频内容的运动特性选择最优编码方式。自适应选择帧编码或场编码,以提高压缩效率和图像质量。
H.264数据格式
H.264标准将编码数据组织为两层,以兼顾编码效率和网络传输的鲁棒性:
- 视频编码层
VCL:负责核心的视频内容压缩,生成片。 - 网络抽象层
NAL:负责将VCL数据打包成适于存储和传输的格式,即NAL单元。
整个数据格式可以概括为:VCL压缩图像生成片(Slice) -> NAL打包成NAL单元(NALU) -> NALU组成比特流。
视频编码层 - 片
- 片是H.264中最基本的编码图像单位。一帧图像可以包含一个或多个片。
- 每个片包含:
- 片头:包含当前片的类型(如I片、P片、B片)、属于哪个帧、参考帧信息等。
- 片数据:即一系列宏块(及其子块)的编码数据,包括:
- 预测信息:帧内预测模式或帧间运动矢量。
- 残差数据:经过变换和量化后的系数,使用
CAVLC或CABAC编码。
片的重要性:片是独立的编码单元,一个片的解码不依赖于同一帧内其他片的数据。这提供了错误恢复能力——即使一个片在传输中损坏,其他片仍可被解码。
网络抽象层 - NAL单元
NAL将VCL压缩图像产生的片和其他关键信息,封装成一个个独立的**NAL单元**,这是你最终看到或传输的数据包。
-
NAL单元结构每个NAL单元由两部分组成:
[ N A L 头 ( 1 字节 ) ∣ N A L 负载 ( 变长 ) ] [ NAL头 (1字节) | NAL负载 (变长) ] [NAL头(1字节)∣NAL负载(变长)]-
NAL头:1个字节,包含关键信息。
[ F ( 1 b i t ) ∣ N R I ( 2 b i t s ) ∣ T y p e ( 5 b i t s ) ] [ F (1 bit) | NRI (2 bits) | Type (5 bits) ] [F(1bit)∣NRI(2bits)∣Type(5bits)]- F:禁止位。通常为0,表示正常。为1时指示该单元无效。
NRI:重要性指示器。值越大,表示该NAL单元对解码越重要(如SPS、PPS、I帧的片)。Type:最关键字段,定义单元类型。常见类型如下表。
-
NAL负载:承载的实际数据,数据类型由NAL头的Type字段指定,如一个片的VCL数据,或SPS、PPS等参数集。
-
-
关键的
NAL单元类型类型值 NAL单元类型 重要性 说明 1-5 非IDR图像的片 VCL 包含一个P帧或B帧的片数据。 5 IDR图像的片 VCL 包含一个I帧(即时解码刷新帧)的片数据。IDR帧后的帧不能参考其之前的帧,是GOP的绝对起点。 6 补充增强信息 非VCL 包含时间戳、用户数据等辅助信息。 7 序列参数集 SPS非VCL 至关重要。包含整个视频序列的全局参数,如编码档次、分辨率、帧率、比特率等。解码器必须先收到SPS才能解码。 8 图像参数集 PPS非VCL 至关重要。包含针对一个或一组片的解码参数,如熵编码模式、切片组等。与SPS配合使用。 9 访问单元分隔符 非VCL 用于在比特流中标志一个完整编码帧(访问单元)的结束。 12 填充数据 非VCL 用于网络填充以满足带宽要求。 SPS(序列参数集)- 包含整个视频序列的全局编码设置。
- 包含的参数:视频分辨率、帧率、视频编码配置文件和级别、色彩空间等。
- 影响范围:这些参数对整个视频序列有效,变化不频繁。
PPS(图像参数集)
- 包含对特定图像组或单个图像的局部编码设置。
- 包含的参数:量化参数、熵编码模式(如 CABAC 或 CAVLC)、切片分割信息等。
- 影响范围:主要影响序列中的特定帧或帧组,参数可以根据图像内容的不同而频繁变化。
区别
- 应用范围:SPS 用于整个视频序列的设置,而 PPS 则用于单个图像或图像组的具体编码设置,解析PPS需要使用到SPS。
- 更新频率:SPS 在视频开始时设置,并在关键参数变化时更新;PPS 需要更频繁更新,以适应不同图像的编码需求。
- 参数类型:SPS 包含全局参数,如分辨率和帧率;PPS 包含特定帧或帧组的局部参数,如量化深度和编码策略。
数据流的组织形式
经过H.264编码的视频文件的NAL单元在存储或传输时,需要一种方式来界定每个单元的起止。主要有两种格式:字节流格式通常被H.264编码格式用于储存视频文件,包传输格式通常按照某种协议进行封装网络传输。在发送和接收时需要在这两种格式间进行转换。
-
字节流格式
主要用于存储文件(如.mp4, .avi封装时内部使用)或某些流协议。
- 起始码:在每个
NAL单元之前插入一个特殊的起始码来分隔。对于H.264编码格式的起始码为0x00 0x00 0x00 0x01(4字节)或0x00 0x00 0x01(3字节)。 - 存储结构:
[起始码] [NAL单元] [起始码] [NAL单元] ...
- 起始码:在每个
-
包传输格式
主要用于基于包的网络传输(如
RTP over UDP)。- 不需要起始码,因为每个
NAL单元(或一个NAL单元分片)直接作为一个**RTP包的有效负载**。 RTP头已经包含了序列号、时间戳等信息,用于处理乱序和同步。- 对于过大的
NAL单元,H.264定义了分片机制,将其拆分成多个RTP包传输。
- 不需要起始码,因为每个
4.2.2 H.265编码格式
H.265(也称为 HEVC,High Efficiency Video Coding)是 H.264 的后继标准,旨在提供更高效的视频压缩。与 H.264 相比,H.265 在编码上引入了许多改进和新技术,使其能够在相同的视频质量下实现更高的压缩率。
以下是 H.265 与 H.264 在编码上的主要差别:
-
编码块结构
-
H.264:宏块(Macroblock)使用固定的 16x16 像素的宏块作为基本编码单元。宏块可以进一步分割为更小的块(如 8x8、4x4)进行预测和变换。 -
H.265:编码树单元(Coding Tree Unit,CTU)使用可变大小的编码树单元,最大可以是 64x64 像素。CTU可以递归分割为更小的编码单元(CU),最小可以达到 8x8 像素。CU可以进一步分割为预测单元(PU)和变换单元(TU)。
-
-
帧内预测
H.264:支持 4x4、8x8 和 16x16 的亮度块预测,提供 9 种预测模式。H.265:支持 4x4、8x8、16x16 和 32x32 的亮度块预测,提供 35 种预测模式,提高了预测精度。
-
帧间预测
H.264:支持多个参考帧和子宏块的运动补偿,运动矢量精度为四分之一像素。H.265:支持更多参考帧和更灵活的块分割结构,运动矢量精度为四分之一像素,提高了运动补偿的灵活性和精度。
-
变换与量化
-
H.264:使用整数离散余弦变换(Integer DCT),变换块大小固定为 4x4 或 8x8。 -
H.265:使用整数余弦变换(Integer DCT)和整数离散正弦变换(Integer DST),变换块大小包括 4x4、8x8、16x16 和 32x32,更大变换块提高了高频率分量的压缩效率。
-
-
熵编码
H.264: 使 用 CAVLC ( Context-Adaptive Variable Length Coding ) 和CABAC(Context-Adaptive Binary Arithmetic Coding)进行熵编码。H.265:使用改进的 CABAC(Context-Adaptive Binary Arithmetic Coding),提高了编码效率和压缩比。
-
去块滤波与样条滤波
- H.264:去块滤波器(Deblocking Filter),在编码后对每个宏块进行去块滤波处理,减少块效应。
H.265:去块滤波器和样条滤波器(SAO,Sample Adaptive Offset),除了去块滤波器外,H.265 还引入了样条滤波器,用于进一步减少压缩噪声,提高图像质量。
-
编码效率与复杂度
- 编码效率:H.265 相比 H.264,在相同的视频质量下,压缩效率提高约 50%。这意味着H.265 在同等质量下所需的带宽或存储空间只有 H.264 的一半。
- 编码复杂度:H.265 的编码复杂度显著高于 H.264。更复杂的块分割、预测模式和熵编码等技术,使得 H.265 编码器和解码器的实现更加复杂。
-
其他改进
- 帧率与分辨率支持:H.265 支持更高的分辨率和帧率,包括 4K、8K 超高清分辨率和更高帧率的视频内容。
- 适应性和灵活性:H.265 引入了更多的适应性和灵活性技术,例如自适应运动矢量预测(AMVP)和合并模式(Merge Mode),进一步提高了压缩效率。
H.265编码后的数据格式相比于H.264编码后的数据格式类似,都采用视频编码层将图像压缩成片,然后通过网络抽象层进一步压缩成NAL单元,但相比H.264编码,H.265编码的NAL单元更加复杂灵活。
-
NAL单元头的变化
H.265的NAL头变为2个字节,承载了更多信息:
[ F ( 1 b i t ) ∣ T y p e ( 6 b i t s ) ∣ L a y e r I d ( 6 b i t s ) ∣ T I D ( 3 b i t s ) ] [ F (1 bit) | Type (6 bits) | LayerId (6 bits) | TID (3 bits) ] [F(1bit)∣Type(6bits)∣LayerId(6bits)∣TID(3bits)]F:含义和H.264相同,为0表示正常,为1表示不正常。- Type:类型字段从5位扩展到6位,可定义更多NAL单元类型,省略
H.264编码中表示重要性的NRI字节,根据Type类型直接获取相应的重要性。 LayerId和TID:这是为H.265的可扩展编码和分层传输特性新增的,用于标识时间层、空间层、质量层等,支持自适应流媒体。
-
更丰富的参数集
H.265引入了三种参数集,结构更复杂,承载的信息量远大于H.264:
- VPS:视频参数集。这是H.265新增的最高层参数集,描述了整个视频序列的整体特性,特别是多子层、多视图、可扩展编码等信息。
- SPS:序列参数集。功能与H.264类似,但包含的参数更多,例如更复杂的档次/层级定义、采样自适应偏移信息、与VPS的关联等。
- PPS:图像参数集。同样功能增强,包含量化矩阵、并行解码类型等更多图像级参数。
解码顺序:通常为
VPS -> SPS -> PPS -> 片数据。VPS提供了解码SPS所需的信息。 -
NAL单元类型的关键差异类型范围 主要类别 关键类型示例 说明 0-9 VCL单元 19, 20:帧内片 1, 2:帧间片 16, 17:BLA片 21:IDR片 类型值直接编码了“条带类型”和“重要性”。IDR和BLA(断链访问)都是随机访问点。 14-21 非VCL单元 32:VPS 33:SPS 34:PPS 新增了VPS。 其他 35-37:访问单元分隔符、结尾等 辅助功能单元。 -
片结构的根本性改变
这是H.265高效压缩的核心之一,但在数据格式层面有体现:
- 基本单位变化:H.264基于“宏块”,而H.265基于更灵活的编码树单元。因此,片头中需要包含描述CTU划分结构的更复杂信息。
- 分片机制:H.265取消了H.264中灵活的“分片”模式。一个片通常需要包含完整的一行或多行
CTU,结构更规整,旨在提高并行处理效率。
-
起始码与防竞争字节
- 起始码:依然使用
0x00 00 00 01或0x00 00 01。 - 防竞争字节:为防止负载中出现与起始码相同的序列,H.265采用了更简洁的规则:在生成NAL负载后,直接检查连续的
0x00 00 00、0x00 00 01、0x00 00 02、0x00 00 03序列,并在第三个0x00后插入一个0x03字节。解码时移除这个0x03即可。规则比H.264更统一。
- 起始码:依然使用
4.3 音频编码压缩格式
WAN(PCM)、MP3、AAC压缩格式
PCM是所有数字音频的源头和最终播放形式,即量化后的数字信号,是一种编码标准。WAV 是容器,一种PCM编码最常用的封装格式之一,可视为PCM音频的文件储存形式。
MP3 与 AAC 是压缩方案,通过对PCM数据根据心理声学模型来删除无效信息进行高效率压缩、并解压为PCM数据的有损压缩编码格式,目的是大幅减小文件体积以适应存储和流媒体传输,其中**AAC是MP3的改进型,支持更现代、更高效的方案**。
| 特性 | PCM | WAV (通常含PCM) | MP3 (MPEG-1/2 Audio Layer III) | AAC (Advanced Audio Coding) |
|---|---|---|---|---|
| 本质与压缩类型 | 原始数字音频编码,是音频数字化的直接结果,无压缩。 | 一种容器格式,通常封装无损、未压缩的PCM数据。 | 有损感知音频压缩格式,利用心理声学模型移除人耳不敏感信息。 | 有损感知音频压缩格式,MP3的后继者,采用更先进的压缩工具。 |
| 音质 | 完全无损,音质等于原始信号(受限于采样率与位深)。 | 取决于其内部编码。若封装PCM,则音质最佳,完全无损。 | 较好。在较高比特率(如256kbps以上)下接近透明,但高频细节有损失。 | 更好。在同等比特率下,音质通常优于MP3(更接近原始音质,特别是低频和高频)。 |
| 文件大小 | 非常大。数据量直接由采样率、位深和时长决定。 | 非常大。因通常存储未压缩的PCM数据。 | 较小。可压缩为原始PCM数据的1/10至1/12(有损)。 | 更小。相比MP3,效率提升约30%,同等音质下文件更小。 |
| 主要应用场景 | 音频处理内核、专业音频接口传输、音频CD(Red Book标准)。 | 专业音频制作、编辑、母版存档,Windows系统音效。 | 音乐存储与交换、早期网络音频、播客,兼容性极广。 | 在线流媒体(如Spotify, YouTube)、移动设备、数字电视广播、iOS系统。 |
| 关键优势 | 绝对保真,编解码零延迟,处理简单。 | 绝对保真,编辑无损耗,兼容绝大多数音频软件。 | 极高的设备与软件兼容性,音质与体积的良好平衡(在推出时)。 | 更高的压缩效率,支持多声道(如5.1),更先进的编码技术,是当前事实上的流媒体标准。 |
| 关键劣势 | 数据量极大,不利于网络传输或存储。 | 文件庞大,不适合直接用于网络分发或便携设备存储。 | 技术较旧,效率低于AAC,不支持多声道,在低码率下音质下降明显。 | 专利授权复杂(但对终端用户透明),在极旧设备上可能不支持。 |
| 多声道支持 | 是 | 是 | 否(通常为立体声) | 是(广泛用于电影、电视的环绕声) |
4.4 颜色编码格式
RGB颜色格式通常用于机器图像颜色处理和显示,YUV颜色格式用于视频压缩、储存和传输,通常按照以下流程实现。
YUV颜色编码格式
YUV 是一种用于编码彩色视频的颜色空间模型,适用于人眼的颜色感知和压缩传输,它将颜色分为亮度和色度分量。
- 组成:Y 分量表示亮度(Luminance),U 和 V 分量表示色度(Chrominance)。亮度分量 Y 携带了图像的大部分信息,而色度分量 U 和 V 则表示颜色信息。
- 优势:
YUV更适合人眼的颜色感知,能够在保持较高画质的情况下实现高效压缩。 - 压缩效率:压缩率高,亮度和色度可以分别压缩,采用保留人眼感知明显的更多位亮度Y信息,压缩人眼感知迟钝的颜色U和V信息,在保留较高画质的情况下,减少数据量以提高传输和存储效率。
RGB颜色编码格式
RGB 是一种用于编码彩色图像的颜色空间模型,适用于机器处理和显示,通过红色、绿色和蓝色三基色的不同组合来表示各种颜色。
- 组成:包含红色(Red)、绿色(Green)和蓝色(Blue)三个颜色分量,每个分量的强度决定了最终颜色的表现。
- 优势:
RGB表示的颜色直观,适用于需要精确颜色表现的场景,如图像处理和显示。 - 压缩效率:压缩率较低,需要对每个颜色分量进行压缩,数据量较大。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)