1. 课程导入

欢迎来到《从零吃透 H.264 与 H.265 编码原理》。在正式进入宏块、变换、量化、熵编码这些细节之前,本章先解决三个问题:我们要学什么、这些知识在多媒体技术中处于什么位置、以及如何搭建一套能动手验证的学习环境。只有把整体框架建立起来,后面的每个技术点才能找到自己的坐标。

一、学习目标:从“会用”到“懂原理”

本课程的目标不是让你记住一堆参数,而是建立一条完整的因果链:原始视频数据 → 预测去除空间/时间冗余 → 变换集中能量 → 量化丢弃感知不敏感信息 → 熵编码压缩符号 → 码流封装与传输 → 解码重建。学完之后,你应当能够:

  • 说清 H.264 与 H.265 各自的分层结构(VCL 与 NAL)以及它们解决的核心问题;
  • 理解帧内预测、帧间预测、残差、变换、量化、环路滤波、熵编码之间的数据流关系;
  • 读懂常见编码参数(QP、GOP、参考帧数、码率控制模式)对画质与码率的影响;
  • 使用 FFmpeg、x264、x265 等工具完成编码、解码、码流分析与简单对比实验;
  • 为后续深入 H.265 的 CTU、四叉树、SAO、WPP 等新特性打下基础。

二、H.264 与 H.265 的整体框架

两代标准共享同一套“混合编码”思想,但 H.265 在块划分、预测精度和滤波环节做了显著升级。可以用下面的结构关系图理解它们的共同骨架与差异点。

H.264 / H.265 混合编码整体框架 原始视频帧 YUV 4:2:0 预测 帧内 / 帧间 残差计算 原图 − 预测 变换 + 量化 DCT / DST 熵编码 CAVLC / CABAC NAL 封装 SPS / PPS / Slice 码流输出 .h264 / .h265 H.264 关键特征 • 宏块 16×16,子块最小 4×4 • 帧内 9 种 4×4 / 4 种 16×16 模式 • 去块滤波 Deblocking • CAVLC / CABAC 熵编码 • 应用:直播、会议、蓝光 H.265 关键升级 • CTU 最大 64×64,四叉树划分 • 帧内 35 种角度预测模式 • 去块滤波 + SAO 样点自适应补偿 • 仅 CABAC,WPP 并行加速 • 应用:4K/8K、HDR、VR

可以看到,H.265 并没有推翻 H.264 的框架,而是在每个环节“加大粒度、增加模式、提升并行度”。理解这条主线,后续学习就不会迷失在细节里。

三、视频编码在多媒体技术中的位置

多媒体系统可以粗略分为采集、编码、封装、传输、解码、渲染六个阶段。视频编码处在“承上启下”的位置:向上承接摄像头或文件中的原始 YUV 数据,向下输出可被封装进 MP4、TS、FLV 的压缩码流。没有编码,1 小时 1080p 原始视频约 600 GB,根本无法存储和传输。

阶段 典型任务 常见技术/工具 与编码的关系
采集 摄像头、屏幕捕获 V4L2、DirectShow 提供 YUV/RGB 原始帧
编码 压缩冗余信息 x264、x265、硬件编码器 本课程核心
封装 组织音视频轨道 MP4、TS、MKV 承载 NAL 单元
传输 网络分发 RTMP、HLS、RTP 依赖码流分层与抗丢包
解码 重建图像 FFmpeg、硬解 GPU 编码的逆过程
渲染 显示与后处理 OpenGL、播放器 消费解码输出
学习提示:如果你只做应用开发,可以只调用编码器 API;但一旦遇到花屏、卡顿、码率异常,就必须回到编码原理层面定位问题。本课程的价值正在于此。

四、从零吃透的学习路径与实战环境搭建

建议按“概念 → 工具 → 码流 → 参数 → 对比”的顺序推进,每学一个原理就用工具验证一次。推荐环境如下:

# 1. 安装 FFmpeg(含 libx264 / libx265)
sudo apt install ffmpeg

# 2. 查看编码器支持情况
ffmpeg -encoders | grep -E "264|265"

# 3. 生成测试视频(10 秒 1280x720 测试源)
ffmpeg -f lavfi -i testsrc=size=1280x720:rate=30 -t 10 test.yuv

# 4. 用 H.264 编码
ffmpeg -f rawvideo -pix_fmt yuv420p -s 1280x720 -r 30 -i test.yuv \
  -c:v libx264 -preset medium -crf 23 -g 30 out_h264.mp4

# 5. 用 H.265 编码
ffmpeg -f rawvideo -pix_fmt yuv420p -s 1280x720 -r 30 -i test.yuv \
  -c:v libx265 -preset medium -crf 23 -g 30 out_h265.mp4

# 6. 查看码流基本信息
ffprobe -show_streams out_h264.mp4
ffprobe -show_streams out_h265.mp4

完成上述命令后,你会得到两个文件,可以对比它们的体积、编码耗时和主观画质。这就是本课程后续所有实验的起点。

常见误区:很多初学者一上来就调 CRF、preset、GOP,却不知道这些参数作用在编码流程的哪一步。结果参数越调越乱,画质和码率反而失控。正确做法是先理解“预测—变换—量化—熵编码”这条链,再回头看参数,才能做到心中有数。

五、本章小结与实战检查清单

本章建立了整体认知:H.264 与 H.265 都基于混合编码框架,区别主要在块划分粒度、预测模式数量、滤波工具和并行能力。视频编码位于多媒体系统的中间环节,是连接采集与传输的桥梁。学习路径应当“原理与工具并重”,每学一个概念就动手验证一次。

  • 能用自己的话复述混合编码的五个核心步骤;
  • 能说出 H.264 与 H.265 至少三点关键差异;
  • 已安装 FFmpeg 并能成功编码出 H.264 与 H.265 文件;
  • 能用 ffprobe 查看码流的分辨率、帧率、码率和编码格式;
  • 准备好一个可反复使用的测试视频源,供后续章节实验。

完成以上检查,你就具备了继续深入的技术底座。接下来,我们将从视频的数字化表示开始,一步步拆开编码器的内部结构。