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.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、播放器 | 消费解码输出 |
四、从零吃透的学习路径与实战环境搭建
建议按“概念 → 工具 → 码流 → 参数 → 对比”的顺序推进,每学一个原理就用工具验证一次。推荐环境如下:
# 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
完成上述命令后,你会得到两个文件,可以对比它们的体积、编码耗时和主观画质。这就是本课程后续所有实验的起点。
五、本章小结与实战检查清单
本章建立了整体认知:H.264 与 H.265 都基于混合编码框架,区别主要在块划分粒度、预测模式数量、滤波工具和并行能力。视频编码位于多媒体系统的中间环节,是连接采集与传输的桥梁。学习路径应当“原理与工具并重”,每学一个概念就动手验证一次。
- 能用自己的话复述混合编码的五个核心步骤;
- 能说出 H.264 与 H.265 至少三点关键差异;
- 已安装 FFmpeg 并能成功编码出 H.264 与 H.265 文件;
- 能用 ffprobe 查看码流的分辨率、帧率、码率和编码格式;
- 准备好一个可反复使用的测试视频源,供后续章节实验。
完成以上检查,你就具备了继续深入的技术底座。接下来,我们将从视频的数字化表示开始,一步步拆开编码器的内部结构。