本节摘要:视频编码的本质是去除空间与时间冗余。本节沿 H.264 → HEVC → AV1 的演进主线,讲清每一代「凭什么更省流量」,并用 ffmpeg 命令演示三种编码的实际用法与兼容性取舍。
本节目标:阅读完本节,你应当能够:
最早的视频编码思路很笨:把每一帧当独立图片压缩。问题在于,一段对话场景里连续 100 帧几乎一模一样,每帧都完整存一遍纯属浪费。工程师们很快发现两个「作弊」机会:
H.264(2003 年)把这套「分块 + 帧间参考」做到极致,成为统治十几年的主流。HEVC(2013 年)把分块从 16×16 扩大支持到 64×64,同样的画质能再省约一半流量。AV1(2018 年,开源阵营)在 HEVC 基础上继续打磨,是新一代流媒体的宠儿。
| 编码 | 出生年代 | 核心手段 | 相对 H.264 的省流量 | 兼容性 |
|---|---|---|---|---|
| H.264 | 2003 | 16×16 宏块 + 帧间预测 | 基准 | 最广,所有设备支持 |
| HEVC | 2013 | 更大块 + 更多帧内预测模式 | 约省一半 | 广泛但旧设备有坑 |
| AV1 | 2018 | 开源 + 更细的帧内帧间预测 | 再省 20–30% | 靠软件解码,硬解有限 |
关键认知:「省流量」不等于「压缩率数字好看」,而是「同样观感下比特更少」。H.264 用了 8 Mbps 的码率,HEVC 可能 4 Mbps 就达到接近观感,AV1 再压到 3 Mbps。但这三者在「编码耗时」上天差地别:AV1 软编最慢,H.264 软编最快。选型从来不是「最省的最好」,而是体积、速度、兼容性的三角。
# H.264(最通用) ffmpeg -i input.mp4 -c:v libx264 -crf 23 -preset medium -c:a aac output_h264.mp4 # HEVC(省流量,兼容性略降) ffmpeg -i input.mp4 -c:v libx265 -crf 26 -preset medium -c:a aac output_hevc.mp4 # AV1(最省,但慢且硬解有限) ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -b:v 0 -c:a opus output_av1.mkv
三条命令对比:同样一段 1080p 视频,产物体积通常 HEVC 比 H.264 小近一半,AV1 再小一点,但编码耗时 AV1 可能比 H.264 慢 5–10 倍。crf 值在不同编码器语义不同(H.264 的 23 ≈ HEVC 的 26 ≈ AV1 的 30),这是各编码器的「画质档位」对应关系,直接照搬即可。
ffprobe -v error -select_streams v:0 -show_entries stream=codec_name,bit_rate -of csv=p=0 output_h264.mp4
如果命令行里没指定编码器,ffmpeg 会按容器「猜」一个默认编码器(比如 MP4 默认 H.264),但猜的不一定是你想要的。显式写 -c:v 永远是更稳的做法。
# 查看当前 FFmpeg 支持哪些编码器 ffmpeg -encoders | grep -E "libx264|libx265|libaom"
如果 libx265 没出现在列表里,说明你的 FFmpeg 编译时没带它,命令会报 Unknown encoder。
用一张图记住三代编码的定位:

三代编码是「兼容性递减、省流量递增」的阶梯。选型先问两个问题:目标设备支持什么?能接受多长的编码耗时?答案组合决定选哪代。
常见坑:HEVC 有专利费争议,商用转码服务用 HEVC 前先确认授权策略(第 10 章会展开);AV1 虽然开源免专利,但很多终端(尤其老手机)只能软解,4K 下软解容易发热卡顿。
💡 关键直觉:选编码就是选「兼容性、体积、速度」三者的交集。没有「最好」的编码,只有「这个场景最合适」的编码——先定场景,再选编码,别被「越新越省」冲昏头。
编码效率的差异,根源在帧类型。I 帧是完整画面,体积最大;P 帧只记录与前一帧的差异;B 帧会同时参考前后两帧,体积最小但解码顺序与显示顺序不同。一个 GOP(图像组)通常以一个 I 帧开头,后面跟着一串 P 和 B 帧。
# 查看帧类型分布,直观感受三种帧的体积差异 ffprobe -v error -show_frames -select_streams v:0 -show_entries frame=pict_type -of csv=p=0 input.mp4 | sort | uniq -c
这个命令统计出的 I/P/B 比例,直接对应压缩率。剪辑视频时,切割点对齐到 I 帧最省事;直播推流时,-g 参数控制关键帧间隔,间隔越大压缩率越高,但丢包恢复越慢。理解帧类型,你就理解了很多「为什么转出来体积这么大」「为什么直播花屏后半天缓不过来」的问题。
下一节看声音那半边——音频编码标准和场景怎么配。