音频和视频是本质不同的两种媒体形式:视频聚焦于视觉画面的呈现,核心是“连续图像的高效传输与存储”;音频聚焦于声音的还原,核心是“模拟声波的数字化与压缩”。二者的特性差异,决定了工程师会采用不同的编码算法,在保证播放质量的前提下,最大限度降低传输带宽和存储成本,实现质量与成本的平衡。

视频

RGB与YUV

  人类通过三种视锥细胞(数量少,感知颜色,红绿蓝)以及一种视杆细胞(数量多,感知亮度)去感知世界。在显示技术上,通常使用RGB编码表示颜色:通过控制三种基色光的亮度去组合表示不同颜色,一般在计算机内存中对每种基色的强度使用8bit二进制数存储表示(小端序,最小0,最大255),共2^24种组合,这种方法较为自然(因为只需要那三种发光半导体),但存在数据冗余大,传输带宽高的问题。颜色的另一种表示是YUV编码,即通过Y亮度与UV色度(蓝差:蓝色-亮度,红差:红色-亮度)组合表示颜色,二者的转换公式如下:
$$
\begin{aligned}
&Y=0.299R+0.587G+0.114B\\
&U=0.4921\times(B-Y)=-0.147R-0.289G+0.436B\\
&V=0.8773\times(R-Y)=0.615R-0.515G-0.100B\\
\end{aligned}
$$
$$
\begin{aligned}
&R=Y+1.370705\times(V-128)\\
&G=Y-0.337633\times(U-128)-0.698001\times(V-128)\\
&B=Y+1.732446\times(U-128)\\
\end{aligned}
$$
  工程师利用人类对亮度较为敏感,对色度较为粗糙的特点,将RGB数据转为YUV表示(YUV444),并对其中色度信息进行压缩(YUV420,YUV422),亮度保持不变,节省部分带宽,例如,常见的YUV420,每四个Y共用一组U、V分量,实现压缩一半空间的效果。

  因此,结合RGB与YUV的特点,通常视频传输与显示的流程是:图像(RGB存储)→ 编码前转换为YUV(通常为YUV420)→ 压缩编码后传输 → 解码后还原为YUV → 显示驱动程序转换为RGB → 屏幕呈现。
  研究表明,人类对0.1-0.4内的画面微小变化并不敏感(视觉暂留),因此工程师通过将图片连续播放实现视频,比如电影通常每秒播放24张图片(fps:frame per second,每秒播放的图像数量)。
  对于单一图片,使用YUV编码占用的空间、带宽是大多数计算机可以接受的,但对于视频,则需要进一步编码节省空间,以分辨率为$1920\times1080$、时长60分钟、FPS为24帧的电影为例,单一原始图像(RGB)占用空间为$1920\times1080\times3=6MB$,即使经过YUV压缩50%,依旧需要$3MB$,整部电影的存储需要$253GB$,这是难以接受的,因此工程师从时间、空间角度进一步编码节省空间。

图像编码

  首先讨论单张图像如何被压缩的问题。常见的图像格式如 BMP、JPEG、PNG,本质上代表了三种不同的压缩思路:无压缩、有损压缩、无损压缩。

BMP

  BMP(Bitmap)是一种最简单的图像格式,其核心特点是几乎不做压缩,直接按像素存储RGB数据。例如一张$1920\times1080$的图片,如果每个像素使用24bit(RGB各8bit),那么大小约为:$1920\times1080\times3≈6MB$

JPG&JPEG

  JPEG(或 JPG)是最常见的图像格式之一,其核心思想是:利用人眼对高频信息(细节)不敏感,对低频信息(整体结构)敏感的特点进行压缩。其典型编码流程如下:
   RGB→YUV(通常为 YUV420)
   图像分块(通常为 8×8)
   对每个块进行离散余弦变换(DCT)
   量化(Quantization,核心有损步骤)
   熵编码(如 Huffman 编码)
其中最关键的是“量化”:高频分量被大幅压缩甚至丢弃,低频分量保留较好

PNG

  PNG是一种无损压缩格式,其核心思路是:通过预测 + 差分 + 压缩(DEFLATE)减少冗余数据,相比JPEG不丢失任何信息,支持透明通道(Alpha)
但代价是压缩率不如 JPEG(对于照片),编码复杂度较高

视频编码

  如果把视频看作是一系列连续图像(frame),那么最直接的方式就是逐帧使用JPEG 编码(类似 Motion JPEG)。但这种方式没有利用“帧间冗余”,压缩效率较低。因此,现代视频编码(如 H.264 / H.265 / AV1)在图像编码基础上,引入了:

  1. 帧内压缩(类似 JPEG)
  2. 帧间预测(核心优化点)

H264

  H264(也叫AVC)是目前应用最广泛的视频编码标准,由ITU-T和ISO联合制定,核心优势是“高压缩比、良好的兼容性、低延迟”,压缩比可达100:1以上(即100MB的RGB视频,编码后可压缩至1MB左右),广泛应用于短视频、直播、监控、蓝光、手机拍摄等场景。
H264的核心编码原理是“去除冗余”,主要分为三步:

  1. 帧内预测:针对单帧图像,利用相邻像素的相关性,预测当前像素的数值,仅存储“预测值与实际值的差值”(残差),减少单帧内的数据冗余;
  2. 帧间预测:针对连续帧,通过运动估计(ME)和运动补偿(MC),找到相邻帧中相似的区域,仅存储“运动向量”和“残差”,减少帧间的数据冗余(这是H264压缩的核心);
  3. 熵编码:对残差、运动向量等数据进行无损压缩,进一步降低数据量(常用算法为CAVLC、CABAC)。

Nvcc与AnnexB

  H264编码后的数据(裸流),需要通过特定的封装格式组织,才能被播放器识别和解码,其中最常用的两种是Nvcc(也叫NV12封装)和AnnexB,核心区别在于“NALU(网络抽象层单元)的分隔方式”:

  • AnnexB:采用“0x00 0x00 0x00 0x01”作为NALU分隔符,是H264的标准封装格式,兼容性极强(支持所有播放器、编解码工具,如FFmpeg、VLC),适用于直播、流媒体传输、蓝光等场景;
  • Nvcc:采用“长度前缀”(4字节或2字节)作为NALU分隔符,无需存储长分隔符,数据更紧凑,是硬件编解码(如NVIDIA显卡、Android硬编)的首选格式,适用于本地录制、手机视频等场景。

H265

H265(也叫HEVC,高效视频编码)是H264的继任者,同样由ITU-T和ISO联合制定,核心目标是“在相同画质下,将带宽/存储成本降低50%”,同时支持更高分辨率(如4K、8K)和更高帧率。
H265在H264的基础上,对编码算法进行了多处优化,核心改进点:

  • 帧内预测模式更多:H264支持9种帧内预测模式,H265扩展至35种,能更精准地预测像素,减少残差数据;
  • 变换单元更灵活:H264的变换单元固定为4×4或8×8,H265支持从4×4到64×64的灵活变换,适配不同画面细节;
  • 运动估计更高效:支持更大的运动搜索范围、多预测单元,能更好地捕捉帧间运动,减少帧间冗余;
  • 熵编码优化:采用更高效的CABAC熵编码,进一步提升压缩比。

AV1

AV1是由AOMedia(开源媒体联盟,成员包括Google、Netflix、Amazon等)制定的开源、免费视频编码标准,核心目标是“替代H265,解决专利授权问题,同时实现更高的压缩效率”。
AV1的核心优势:

  • 压缩效率高:在相同画质下,比H265压缩比高10%~20%,比H264高50%以上;
  • 开源免费:无任何专利授权费用,降低企业开发成本;
  • 兼容性强:支持4K、8K、高动态范围(HDR)、高帧率,适配流媒体、直播、VR等场景。

VP8、VP9

VP8是VP系列的基础版本,压缩效率与H264接近,核心优势是“开源免费、编码复杂度低”,主要应用于WebRTC(实时通信,如视频通话)、Chrome浏览器、YouTube的低清晰度视频等场景。
VP8的封装格式为WebM,常与OPUS音频编码搭配,组成开源的音视频封装方案,适合轻量级、低延迟的场景。
VP9是VP8的升级版本,压缩效率接近H265,在相同画质下,比H264压缩比高50%左右,同时编码复杂度低于H265和AV1。

音频

  音频的本质是“模拟声波的数字化”——现实中的声音(如人声、音乐)是连续的模拟信号,需要通过“采样、量化、编码”三个步骤,转换为数字信号,才能被计算机存储和传输。音频编码的核心,是在保证声音还原度的前提下,去除声音信号中的冗余,降低带宽和存储成本。

PCM

  声音的本质是物体振动产生的波,计算机无法处理声波的连续信号,需要在时间轴上离散化,每隔固定时间取样(T=采样间隔,采样率=1/T),经过编码(16bit、24bit)后的二进制序列即为PCM(脉冲编码调制),PCM是最基础、最原始的数字音频格式,是所有音频编码的源头。
  PCM的核心参数(决定音频质量和数据量):

  • 采样率(sampleRate):单位时间内对模拟声波的采样次数,单位为Hz。采样率越高,声音的还原度越高,常见采样率:44.1kHz(CD音质)、48kHz(专业音频、视频配套音频)、96kHz(高清音频);
  • 位深(depth):每次采样后,用多少bit二进制数表示采样值,位深越高,声音的动态范围越大(音量变化的层次感),常见位深:16bit(主流音质)、24bit(高清音质);
  • 声道数(channels):声音的通道数量,常见声道:单声道(如电话)、双声道(立体声,如耳机)、5.1声道(环绕声,如家庭影院)。

  根据音频的基础信息可以计算音频的$码率=采样率\times位深\times声道数$,例如48kHz采样率、16bit位深、双声道的音频码率为1.536Mbps。

AAC

  AAC(高级音频编码)是目前广泛流行的音频编码标准,其通过将音频原始数据分帧(每1024样本为一帧,因此AAC一帧的时长为$1024/采样率$)、MDCT离散余弦变换(当窗口较长时延时较高,这就是为什么AAC延时高于OPUS的原因)、建立心理声学模型、量化编码、封装处理后得到AAC数据。
  AAC有多种规格,适配不同场景:

  • AAC-LC(低复杂度):最常用的规格,压缩比适中,音质清晰,适用于手机音乐、短视频、直播等场景,一般直播使用96-128kbps码率,点播使用128-192kbps码率。
  • HE-AAC(高效AAC):支持低比特率(如64kbps以下),适合网络条件较差的场景(如手机彩铃、语音消息),一般使用16-48kbps码率。
  • AAC-ELD(增强低延迟):延迟极低(小于20ms),适用于实时通信场景(如视频通话、语音直播),一般使用32-128kbps码率。

  AAC编码后的裸流(ADTS帧),需要通过封装格式组织,才能被播放器识别,其中最常用的两种是Adts头和LATM,核心区别在于“是否包含完整的头部信息”。

Adts头

  Adts头是AAC的“独立帧封装”,每个AAC帧都包含一个完整的Adts头(7~9字节),头部信息包括:采样率、位深、声道数、帧长度、编码规格等。

  优势:帧独立,无需依赖外部容器(如MP4),可单独播放,适合流式传输(如直播、广播)。
  应用场景:直播音频、广播、单独的AAC音频文件(.aac)。

LATM/LOAS

  LATM是AAC的“低开销封装”,头部信息(LATM头)仅在音频流的开头出现一次,后续的AAC帧不再包含头部,仅存储音频数据,开销更低。

优势:数据紧凑,节省带宽,适合封装在视频容器中(如MP4、MKV),与视频同步播放;

OPUS

  OPUS是由IETF(互联网工程任务组)制定的开源、免费音频编码标准,核心定位是“实时通信”,兼顾低延迟、高音质、高压缩比,是目前实时音频场景的首选编码。
OPUS的核心优势,也是其区别于AAC、MP3的关键:

  • 低延迟:编码延迟仅520ms,远低于AAC(20100ms),适合实时通信(如视频通话、语音直播、游戏语音);
  • 自适应比特率:支持8kbps~510kbps的比特率自适应,可根据网络带宽动态调整,避免卡顿;
  • 全场景适配:既能支持低比特率的语音(如电话音质),也能支持高比特率的音乐(如无损音质),适配语音、音乐、直播等多种场景;
  • 开源免费:无专利授权费用,兼容性强,支持所有主流平台(Windows、Android、iOS、Linux)。

OGG OPUS

  OGG OPUS 是将 OPUS 编码后的音频数据封装在 Ogg 容器中的一种格式(Flv不支持OPUS),是目前最常见的 Opus 文件/流媒体封装方式之一(文件后缀通常为 .opus 或 .ogg)。