编解码入门:为什么一部 4K 电影只要 5GB?

第 2 章 · VOD 流媒体技术全解(2/12)

本章你会理解:视频编码到底是什么、为什么能压缩几十倍、H.264 / H.265 / AV1 / VP9 到底谁更好、怎么用 ffmpeg 压一段视频。

预计阅读时间:25 分钟

• • •

2.1先算个账:不压缩的视频有多大

回忆上一章算过的:

一段 1080p、30fps、YUV 4:2:0、8-bit 的未压缩视频:

每秒大小 = 1920 x 1080 x 1.5(YUV 4:2:0 是 RGB 的一半) x 30 / 1024² ≈ 89 MB/秒

所以:

- 1 分钟视频5.3 GB

- 90 分钟电影480 GB

- 4K 电影(4 倍像素、30fps)1.9 TB

Netflix 真实的 4K 电影文件一般 5-15 GB。也就是说——

编码把视频压缩到了原始大小的 1% 以下

这不是魔法,是几十年的数学成果。我们来看它怎么做到的。

• • •

2.2编码与解码:两个对称的过程

原始视频 (89 MB/s)          压缩后的视频 (2 MB/s)         播放画面
    ┃                             ┃                         ┃
    ▼                             ▼                         ▼
 ┌──────┐    编码 encode      ┌──────┐    解码 decode    ┌──────┐
 │ 拍摄  │  ─────────────►   │ 压缩  │  ────────────►   │ 播放  │
 │ 素材  │    (x264/x265)    │ 文件  │   (播放器自带)   │ 屏幕  │
 └──────┘                   └──────┘                   └──────┘

- 编码(Encode):把大文件压成小文件 → 慢,要消耗大量 CPU/GPU

- 解码(Decode):把小文件还原成画面 → 快,手机芯片一般都有专门硬件

编码器(Encoder)解码器(Decoder) 合称 Codec(编解码器)

为什么编码比解码慢那么多?

编码要"尝试所有可能性找最佳压缩方案",解码只要"按压缩方案的说明还原"。

这就像快递打包一件异形物品——打包的人要精心折叠省空间,开箱的人撕开胶带就行。

• • •

2.3视频压缩的两把斧

压缩视频主要靠两种方式:

斧 1:帧内压缩(Intra-frame)

一张图片本身压缩。原理和 JPEG 基本一样:

- 人眼对低频信息(大面积色块)敏感、对高频信息(细节噪点)不敏感

- 用 DCT(离散余弦变换) 把图片从像素域转到频率域

- 把不重要的高频系数扔掉或用少的 bit 存

类比:就像你记电话号码"13912345678"时,前面"139"是运营商前缀(重要),后面数字随机(可以精确记忆)。一张图片里大面积的蓝天也类似——主色调很重要,每朵云的边缘细节可以概括。

这种压缩对每一帧独立进行,得到的帧就是 I 帧

斧 2:帧间压缩(Inter-frame)

利用"相邻帧之间几乎一样"这个特点,只存差异。

第 N 帧 (I 帧):完整图片
┌─────────────┐
│   🚗         │
│  ___________ │  ← 完整保留
└─────────────┘

第 N+1 帧 (P 帧):只存"差异"
"把第 N 帧里那辆车往右移 15 像素"
─────────► 几个字节就能描述

具体做法叫 运动估计(Motion Estimation)+ 运动补偿(Motion Compensation)

1. 把画面切成小方块(宏块 Macroblock,典型 16x16 或 8x8 像素)

2. 对每一个方块,在前一帧里搜索"最像它的"位置

3. 只记录运动向量(向左/右/上/下偏了多少像素)+ 残差(细微差异)

类比:摄像师拍摇头镜头,画面整体向右平移 → 编码器发现所有方块都向右移 20 像素,只要记录一次"20 像素"而不是重新存每个方块。

帧间压缩效率远远高于帧内压缩,视频比 JPEG 图片序列小几十倍就是这个原因

• • •

2.4编码的其他技巧(不用细记,了解即可)

现代编码器还会:

技巧 做什么 效果
变换(Transform) DCT / Integer Transform 把像素变成频率系数 方便后续量化
量化(Quantization) 把频率系数除以一个整数、四舍五入 画质主要损失点、也是压缩主力
熵编码(Entropy Coding) CABAC / CAVLC:用更少的 bit 存常见符号 无损压缩最后一步
环路滤波(In-loop Filter) 去除块效应(Blocking Artifact) 画面更平滑
SAO / ALF(H.265+) 自适应采样偏移 减少锐利边缘的伪影
Multi-reference P/B 帧可参考多张历史帧 更准的预测 → 更小的残差

这些你在实际工程中只要通过参数开关就可以,不需要自己实现。

• • •

2.5五大主流编码一览

从老到新:

H.264 / AVC(2003):全球通用的"老黄金标准"

- 全名:H.264 / MPEG-4 Part 10 / Advanced Video Coding (AVC)

- 谁定的:ITU-T + ISO/IEC MPEG 联合

- 兼容性:几乎所有能播视频的设备都支持

- 压缩效率:基准(我们用它作为比较基线)

- 专利:付费(MPEG LA 专利池),但已成行业默认

- 适合:兼容性第一、算力受限的场景

H.264 已经 20 多年了,依然是 YouTube、Facebook、Zoom 的首选兜底编码。

H.265 / HEVC(2013):压得更狠,但授权让人头大

- 全名:H.265 / MPEG-H Part 2 / High Efficiency Video Coding (HEVC)

- 压缩效率:相同画质下比 H.264 省约 37% 码率(高分辨率场景研究数据)

- 专利混乱且昂贵——三个专利池(MPEG LA、HEVC Advance、Velos Media)+ 很多未池化专利

- 硬解:iPhone 7+(2016)、安卓 6+ 主流新机、大部分 4K 电视

- 适合:苹果生态、4K 流媒体、对存储/带宽成本敏感的场景

HEVC 授权乱象是它在 Web 端推行缓慢的根本原因。Chrome、Firefox 都曾经拒绝支持。

VP9(2013):Google 的免费替代

- 全名:VP9,不是字母缩写

- 谁做的:Google(买了 On2 Technologies 后自研)

- 压缩效率:接近 H.265

- 专利免版税

- 主要用途:YouTube、Google Meet

- 硬解:安卓、Chromecast、部分智能电视;iOS 不原生支持

AV1(2018):免版税下一代

- 全名:AOMedia Video 1

- 谁做的:AOMedia 联盟(Google、Netflix、Meta、Amazon、Cisco、微软、Intel、苹果等巨头)

- 压缩效率比 H.264 省约 53%、比 H.265 再省约 25%(同研究数据集)

- 专利免版税

- 硬解:iPhone 15 Pro+(2023)、Pixel 6+、骁龙 8 Gen 2+、Intel Arc、NVIDIA RTX 40 系;2024 后大量普及

- 编码速度:早期 SVT-AV1 等工程实现大幅改善;现在 CPU 编码成本约是 H.265 的 2-5 倍

Netflix、YouTube、TikTok、Meta 都在把 AV1 作为未来主流。

H.266 / VVC(2020):最新一代,还没普及

- 压缩效率:比 H.264 省约 78%、比 AV1 再省约 25-30%

- 硬解:2024 起旗舰手机开始带,消费级设备覆盖率仍很低

- 适合:观望

对比表

H.264 H.265 VP9 AV1 H.266
年份 2003 2013 2013 2018 2020
压缩效率(vs H.264) 基准 +37% ~+30% +53% +78%
编码速度 最快 极慢
解码负担 最轻 较重
兼容性 极高 中(Web) 中且增长中
专利费 付费 高且乱 付费

37%、53%、78% 都不是"普适保证"!

这些数字来自特定测试集、特定分辨率、特定质量指标(如 BD-rate with VMAF/PSNR)。不同内容类型(动画 vs 实拍 vs 游戏录屏)下差距很大。不要拿来当产品宣传的绝对值。

数据来源:Topiwala, Kulupana, Krishnan, Performance Comparison of VVC, AV1, HEVC and AVC for High Resolutions (ResearchGate 2024)。

• • •

2.6实际项目怎么选编码?

一个实用的决策树:

你的用户主要在哪里看视频?

├── ① Web 浏览器 + 所有手机 + 老机顶盒
│     → 必须有 H.264 档位(兜底)
│     → 若带宽是主要成本,可追加 H.265(iOS 覆盖)+ AV1(安卓旗舰/新 Chrome)

├── ② 只在自家 APP(iOS + Android + 可选 TV)
│     → H.264 + H.265 主力;AV1 按设备能力灰度下发

├── ③ Web 为主,且在意全球带宽成本(YouTube/Netflix 场景)
│     → AV1 为主 + H.264 兜底(老设备)

└── ④ 4K / HDR 高价值内容
      → H.265 / AV1 + Dolby Vision

实际常见组合(Bitrate Ladder + 编码组合)

一份常见的短剧 APP 编码策略:

档位 分辨率 H.264 码率 H.265 码率 AV1 码率(旗舰机)
Low 360p 500 kbps 350 kbps 250 kbps
Mid 540p 900 kbps 650 kbps 480 kbps
Main 720p 1.5 Mbps 1.0 Mbps 750 kbps
High 1080p 3.5 Mbps 2.2 Mbps 1.6 Mbps
• • •

2.7动手:用 ffmpeg 压一段视频

动手试一试:下面每个命令你都可以复制到终端试跑。

准备一个输入文件 input.mov

① 最简:H.264 默认参数

ffmpeg -i input.mov -c:v libx264 output.mp4

- -i input.mov:输入

- -c:v libx264:视频编码用 x264(H.264 的开源实现)

- output.mp4:输出文件

② 用 CRF 控制质量

ffmpeg -i input.mov \
  -c:v libx264 -preset medium -crf 23 \
  -c:a aac -b:a 128k \
  output.mp4

参数解释:

参数 含义
-preset medium 编码速度档位。可选 ultrafast/superfast/veryfast/faster/fast/medium/slow/slower/veryslow。越慢 = 压得越狠(同质量下文件更小)
-crf 23 质量目标,范围 0-51。数字越小画质越好、文件越大。日常 18-28 之间,23 是默认。
-c:a aac -b:a 128k 音频用 AAC、128 kbps

CRF 速记:

- CRF 18:视觉无损(普通人看不出差异)

- CRF 23:高质量(推荐日常使用)

- CRF 28:能接受(明显可见的压缩痕迹)

③ 为流媒体做"关键帧对齐 + faststart"

做 VOD 发布时一定要加:

ffmpeg -i input.mov \
  -c:v libx264 -preset slow -crf 22 \
  -profile:v high -level 4.0 \
  -g 60 -keyint_min 60 -sc_threshold 0 \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  output.mp4

新增参数:

参数 为什么
-g 60 -keyint_min 60 每 60 帧一个 I 帧。30fps 就是 2 秒一个 GOP,方便切片。
-sc_threshold 0 禁用场景切换自动插 I 帧;保证所有码率档位 I 帧位置一致。
-movflags +faststart 把 MP4 的"目录表"(moov box)放到文件开头,支持边下边播
-profile:v high -level 4.0 兼容性设置;Level 4.0 支持到 1080p30。

④ H.265 压同样一段

ffmpeg -i input.mov \
  -c:v libx265 -preset medium -crf 26 \
  -tag:v hvc1 \
  -c:a aac -b:a 128k \
  -movflags +faststart \
  output_hevc.mp4

注意:

- H.265 的 CRF 要比 H.264 加大约 3-5 才得到相近画质(26 ≈ H.264 的 22)

- -tag:v hvc1 让 Apple 设备能正确识别。否则 iOS/Safari 可能拒绝播放。

⑤ 对比实验:量化压缩效果

假设原片 1 分钟 4K mov 大约 2 GB。你压出来:

命令 输出大小 相对
不压缩 YUV ~2 GB(源) 100%
H.264 CRF 23 ~30 MB 1.5%
H.264 CRF 18 ~80 MB 4%
H.265 CRF 26 ~18 MB 0.9%
AV1(SVT-AV1 preset 8) ~12 MB 0.6%

压缩率高达 100-500 倍,但在手机屏幕上肉眼几乎看不出差别。

• • •

2.8Per-Title、Per-Shot 编码:Netflix 的黑科技

默认做法是"所有视频都用同一套码率阶梯":所有电影都出 360p@500k / 720p@1500k / 1080p@4000k。但:

- 一部卡通片(大色块、少细节)在 1080p@1000k 就够好看

- 一部演唱会(闪烁灯光、快速运动)1080p@5000k 可能还有压缩痕迹

让每一部电影有自己的最优码率阶梯,就是 Per-Title Encoding(Netflix 2015 年提出):

传统:     所有电影都用相同阶梯
       360p@500k / 720p@1500k / 1080p@4000k

Per-Title:针对每部电影的复杂度测算最优阶梯
       卡通:     360p@300k / 720p@800k / 1080p@1800k    (省钱)
       演唱会:   360p@700k / 720p@2200k / 1080p@5500k   (加钱)

Per-Shot / Dynamic Optimizer(Netflix 2018)更狠:

把一部电影按"镜头"切开(场景检测),每个镜头都用自己最优的码率和编码参数

Netflix 用 VMAF(他们自研的感知质量分数)作为优化目标,声称做到同质量再省 17% 码率。

这需要你做吗?

中小平台用云厂商的"智能转码模板"(阿里云 "窄带高清"、腾讯云 "极速高清"、AWS MediaConvert "QVBR")就能享受大部分收益,不用自研。Netflix 那套是针对数亿订阅用户规模才值得。

• • •

2.9硬编码 vs 软编码

方式 说明 速度 画质 适合场景
软编码(CPU) libx264/libx265/SVT-AV1 最好 VOD 离线转码、需要极致质量
硬编码(GPU/ASIC) NVIDIA NVENC、Intel QSV、Apple VideoToolbox 快 5-50 倍 略差 直播、实时转码、低延迟

VOD 优先用软编码:你不用赶时间,多花几小时压一次能永久省带宽。

直播必须硬编码:不能让 1 秒的直播花 10 秒去编码。

• • •

2.10VMAF、PSNR、SSIM:衡量"画质"的三把尺子

怎么知道压缩后的视频"好不好看"?不能全靠人眼。

指标 全称 原理 范围 和人眼相关性
PSNR Peak Signal-to-Noise Ratio 像素级差异 0-∞ dB(越大越好)
SSIM Structural Similarity 考虑亮度/对比度/结构 0-1(越大越好)
VMAF Video Multi-Method Assessment Fusion 机器学习融合多特征 0-100(越大越好)

VMAF 是 Netflix 开源的,工业界公认与人眼感知相关性最高。经验值:

- VMAF ≥ 93:视觉无损

- VMAF ≈ 80:高质量

- VMAF ≈ 60:可接受

- VMAF ≤ 40:明显压缩痕迹

• • •

本章要点回顾

1. 视频能压缩到原始大小 1% 以下,靠两把斧:帧内压缩(压每张图)+ 帧间压缩(只存帧间差异)。

2. 编码慢、解码快;编码器 + 解码器 = Codec

3. H.264 是通用兜底,H.265 省 37% 带宽但授权贵,AV1 免费且压缩更强但编码慢,VVC 是未来但还没普及。

4. 别照抄"H.265 比 H.264 省 50%" 这类绝对数据,实际效率随内容变化很大。

5. VOD 转码 4 件必做:CRF 控质量、GOP 对齐、faststart、关闭 scene-cut

6. Per-title / per-shot 编码是高阶优化,云厂商的智能转码模板已覆盖大多数收益。

7. VMAF 是衡量画质的主流工业指标。

← 上一章:视频基础 目录 下一章:音频基础 →

© 2026 Zmead · VOD 流媒体技术全解