几种音视频编码标准
H.264
H.264(又名 AVC、MPEG-4 Part 10)是目前应用最广的视频压缩标准。核心思路是去除视频中的冗余信息(空间、时间、编码、视觉冗余)。
核心原理(分点答)
1. 帧类型与 GOP
- I 帧:关键帧,只做帧内预测,可独立解码,体积大
- P 帧:前向预测,参考前面的帧
- B 帧:双向预测,参考前后帧,压缩率最高,但有延迟
- GOP:两个 I 帧之间的序列;GOP 越长压缩率越高,但随机访问和容错越差
- IDR 帧:特殊的 I 帧,解码器遇到后会清空参考帧缓存,是真正的随机访问点
2. 宏块(Macroblock,MB)
- 定义:每一帧图像被划分成若干 16×16 像素的宏块,是编码的基本处理单位,预测、变换、量化、熵编码都以块为单位
- 组成(4:2:0 采样):亮度 Y 16×16 + 色度 Cb 8×8 + 色度 Cr 8×8
- 层级关系:
1 | 图像(Frame) |
- Slice(条带):若干宏块按扫描顺序组成一个 Slice,是 NALU 承载的数据单元,也是可独立解码的最小单元,有利于容错和并行
- 宏块类型:
- I 宏块:只用帧内预测
- P 宏块:参考前面的帧
- B 宏块:参考前后帧
- Skip 宏块:不传残差和运动矢量,解码端直接用预测值,几乎不占码率,静止背景里很常见
- 宏块划分:
- 帧内:Intra 16×16(整块,适合平坦区域)、Intra 4×4(拆成 16 个小块,适合细节多的区域)、Intra 8×8(High Profile)
- 帧间:16×16、16×8、8×16、8×8,8×8 还可再分 8×4、4×8、4×4,每个分区有各自的运动矢量
- 注意:宏块只是处理单位,帧内和帧间都以宏块为单位。P/B 帧里的宏块可以逐块选择帧内还是帧间模式(比如新出现的物体找不到参考块时用帧内),由编码器按码率和失真的代价决定,宏块类型和帧类型不是一回事
3. 帧内预测(去空间冗余)
- 利用相邻像素相关性,用同一帧内已编码的邻近块预测当前块
- 亮度有三种尺寸:Intra 4×4(9 种方向模式)、Intra 8×8(High Profile,9 种模式)、Intra 16×16(4 种模式)
4. 帧间预测(去时间冗余)
- 运动估计 + 运动补偿:在参考帧中找最相似的块(运动估计,得到运动矢量),用运动矢量取出预测块(运动补偿),只存运动矢量 + 残差
- 支持宏块可变分块(16×16 到 4×4)
- 多参考帧、1/4 像素精度运动矢量
5. 变换与量化
- 对残差做整数 DCT(4×4 / 8×8),避免浮点误差,计算简单
- 量化是有损的主要环节,QP 越大,压缩率越高,画质越差
6. 熵编码
- CAVLC:基于上下文的变长编码,复杂度低
- CABAC:基于上下文的算术编码,效率更高(省约 10%~15% 码率),复杂度高,Main/High Profile 支持
7. 环路滤波(Deblocking Filter)
- 消除宏块边界的块效应,滤波后的帧作为参考帧,提升预测质量
码流结构(面试高频)
- NALU(网络抽象层单元):基本传输单元,由 NAL 头(1 字节)+ 载荷组成
- 起始码:
00 00 00 01或00 00 01(Annex B 格式) - NAL 类型常见:
7SPS(序列参数集)8PPS(图像参数集)5IDR 帧1非 IDR 帧(P/B)6SEI
- VCL / NAL 分层:VCL 负责编码,NAL 负责打包适配网络
- 两种封装格式:
- Annex B:起始码分隔,用于 TS、RTP 流
- AVCC:长度前缀,用于 MP4、FLV,SPS/PPS 放在 extradata 里
Profile 与 Level
- Baseline:无 B 帧、无 CABAC,低延迟,用于视频通话
- Main:支持 B 帧、CABAC,用于标清广播
- High:8×8 变换等,用于高清、蓝光、主流点播直播
- Level:限制分辨率、帧率、码率上限(如 4.0 对应 1080p30)
码率控制
- CBR:恒定码率,适合直播
- VBR:可变码率,画质更均匀,适合点播
- CRF(x264):恒定质量,最常用
- ABR / CQP
优缺点与对比
- 优点:兼容性极好(软硬解全覆盖)、压缩率高、生态成熟
- 缺点:相比 H.265 / AV1 压缩率偏低;有专利费
- 对比:H.265 同画质省约 50% 码率但编码复杂、授权复杂;AV1 开源免费但编码慢
- 块结构对比:H.264 是固定 16×16 宏块再分区;H.265 是最大 64×64 的 CTU 四叉树递归划分(CU/PU/TU),高分辨率下更高效
实际经验
- 用 FFmpeg / x264 编码:
ffmpeg -i in.mp4 -c:v libx264 -crf 23 -preset medium out.mp4 - 直播里关键帧间隔通常设 1~2 秒,便于秒开和切换
- 低延迟场景去掉 B 帧,用
-tune zerolatency - 花屏 / 卡顿排查:看是否丢了 SPS/PPS 或 IDR 帧
回答模板(30 秒精简版)
H.264 是一种主流的视频压缩标准。它把每帧图像划分成 16×16 的宏块作为基本编码单位,若干宏块组成 Slice。然后通过帧内预测去除空间冗余,通过帧间预测(运动估计与补偿)去除时间冗余,再对残差做整数 DCT 变换和量化,最后用 CAVLC/CABAC 熵编码,并加上去块滤波提升画质。码流由 NALU 组成,包含 SPS、PPS、IDR 等;帧分为 I、P、B 三种,由 GOP 组织。按场景不同有 Baseline、Main、High 等 Profile。相比 H.265 压缩率稍低,但兼容性最好,所以目前仍是最广泛使用的编码。
面试常见追问
- IDR 和 I 帧区别?→ IDR 会清空参考帧缓存,之后的帧不能越过它参考
- SPS/PPS 作用?→ 存解码所需的全局参数(分辨率、profile、熵编码方式等),丢了无法解码
- 为什么有 B 帧会有延迟?→ 解码顺序与显示顺序不一致,需要缓存后续帧(DTS ≠ PTS)
- 花屏、马赛克怎么来的?→ 丢包导致参考帧错误,误差累积,直到下一个 IDR 才恢复
- 宏块是什么?→ 16×16 的基本编码单位,帧内帧间都以它为单位;P/B 帧里的宏块可逐块选帧内或帧间模式
- 宏块和 Slice 的关系?→ 多个宏块组成一个 Slice,Slice 是 NALU 承载的单元,可独立解码
H.265 / AV1 的改进
- H.265(HEVC):H.264 的继任者,同画质省约 50% 码率,但授权复杂
- AV1:开源免费,压缩率比 H.265 再好约 20%~30%,但编码慢、硬件支持仍在普及
| H.264 | H.265 | AV1 | |
|---|---|---|---|
| 发布 | 2003 | 2013 | 2018 |
| 制定方 | ITU-T + ISO | ITU-T + ISO | AOMedia 联盟 |
| 授权 | 有专利费 | 专利池多(MPEG LA、HEVC Advance、Velos 等),费用复杂 | 免专利费(开源) |
| 压缩效率 | 基准 | 比 H.264 省约 40%~50% | 比 H.264 省约 50% |
| 编码复杂度 | 低 | 高(约 H.264 的 2~10 倍) | 极高(软编很慢,需硬件编码器) |
| 解码复杂度 | 低 | 中 | 中高 |
| 兼容性 | 几乎所有设备 | 主流设备,浏览器支持较差 | 新设备和主流浏览器支持,老设备需软解 |
H.265 相对 H.264 的核心改进
1. 块结构:宏块 → CTU
- H.264:最大 16×16 宏块
- H.265:CTU 最大 64×64,用四叉树递归划分成 CU / PU / TU
- 大块适合高分辨率平坦区域,压缩效率显著提升,对 4K/8K 尤其明显
2. 帧内预测
- H.264:最多 9 种方向模式
- H.265:35 种模式(33 种方向 + DC + Planar),预测更精细
3. 帧间预测
- 更灵活的 PU 划分(含非对称划分)
- 运动矢量预测引入 Merge / AMVP 模式,减少 MV 开销
4. 变换
- 支持 4×4 到 32×32 的整数变换(H.264 只有 4×4 / 8×8)
5. 环路滤波
- 在去块滤波基础上新增 SAO(样本自适应偏移),进一步减少振铃效应
6. 熵编码
- 只保留 CABAC(去掉 CAVLC),并优化了并行性
7. 并行化
- 新增 Tile、WPP(波前并行),更适合多核编解码
8. 码流结构
- 仍是 NALU,但 NAL 头 2 字节,新增 VPS(视频参数集)
1
2
3
4VPS(整个视频,跨层/跨序列)
└── SPS(一个编码视频序列:分辨率、profile、帧率、参考帧数等)
└── PPS(单张或多张图像:熵编码模式、量化参数初值、tile 划分等)
└── Slice(具体的条带数据) - 常见类型:
32VPS、33SPS、34PPS、19/20IDR
AV1 相对 H.265 的核心改进
1. 块结构更灵活
- 最大 128×128 超级块,支持更多划分方式(含 T 形、4 路划分等)
2. 更丰富的预测工具
- 帧内:56 种方向模式,另有 CfL(色度预测亮度)、调色板模式、帧内块拷贝(利于屏幕内容)
- 帧间:复合预测(OBMC、楔形混合等)、全局运动 / 仿射运动、Warped Motion
3. 变换
- 更多变换类型(DCT、ADST、Identity 等组合),尺寸最大到 64×64
4. 环路滤波
- 去块 + CDEF(约束方向增强滤波)+ 环路恢复滤波,多级组合
5. 熵编码
- 多符号自适应算术编码,不再是二进制 CABAC
6. 其他特色
- 胶片颗粒合成(Film Grain Synthesis):只传参数,解码端还原颗粒
- 为 Web 设计,封装采用 OBU 而不是 NALU
选型建议
| 场景 | 推荐 |
|---|---|
| 要覆盖所有设备、老设备 | H.264 |
| 4K/HDR,追求节省带宽,设备较新 | H.265 |
| 大型点播平台、带宽成本敏感、可接受编码成本 | AV1(YouTube、Netflix 已大量使用) |
| 实时通信(WebRTC) | H.264 为主,AV1 逐步应用 |
| 直播 | H.264 为主,H.265 / AV1 逐步推进 |
面试回答模板(40 秒版)
H.265 在 H.264 的基础上做了几处关键升级:块结构从 16×16 宏块换成最大 64×64 的 CTU 四叉树,帧内预测方向从 9 种增加到 35 种,变换支持到 32×32,加入了 SAO 滤波,并行上支持 Tile 和 WPP,同画质下码率约省一半,代价是编码复杂度大幅上升,且专利授权复杂。
AV1 是 AOMedia 推出的免专利费编码,用 128×128 超级块、更多预测工具和 CDEF 等滤波,压缩率比 H.265 还能再好 20% 左右,但编码很慢,要靠硬件编码器普及。
所以现状是 H.264 保兼容、H.265 做高清和 4K、AV1 面向未来和大平台降本。
常见追问
- 压缩率提升的本质是什么? → 更大更灵活的块划分 + 更多预测模式 + 更强的滤波,用更高的计算复杂度换码率
- H.265 的 NAL 头和 H.264 有何不同? → H.264 是 1 字节,H.265 是 2 字节,且新增 VPS(整个视频的参数)

