VOD 深度剖析(一):视频基础——视频到底是什么?
VOD 流媒体系列(共 12 篇)的开篇之作。从字节层面理解视频究竟是什么——像素、分辨率、帧率、码率、I/P/B 帧、GOP、色彩空间与 HDR。

这是 VOD 流媒体深度剖析系列的第 1 篇——一份共 12 篇的技术指南,涵盖从原始像素到全球规模分发的方方面面。
那些你或许从未想过的问题
你每天都在看视频,但你有没有想过:
- 从点击”播放”到看到第一帧画面,中间到底发生了什么?
- 为什么一部 2 小时的 Netflix 电影只有 2 GB,而 2 小时的 iPhone 原始素材却有 20 GB?
- 为什么网络差的时候视频会”变糊”,而不是直接卡住不动?
- 为什么 iPhone 只能原生播放 HLS,却播不了 DASH?
- 为什么你没法把下载好的 Netflix 电影拷给别人的手机?
- 短视频 App 是怎么做到你一滑就几乎瞬间开播的?
读完这个系列,上面每一个问题你都能答上来。
什么是视频点播(VOD)?
视频点播——VOD——顾名思义:用户想看什么就看什么,想什么时候看就什么时候看。视频文件早在播放之前就已经录制好并存放在服务器上了。
与之相对的是直播:
| VOD(点播) | 直播 | |
|---|---|---|
| 内容来源 | 预先录制好的文件 | 摄像机/编码器实时产出 |
| 能否拖动进度? | 能 | 不能(或仅有限的 DVR 时移窗口) |
| 举例 | Netflix、YouTube、Bilibili、在线课程 | 体育转播、电商直播、游戏直播 |
| 工程难点 | 以最低成本触达最多用户 | 保持低延迟、实时编码 |
短视频(TikTok、YouTube Shorts)也属于 VOD。虽然它感觉上是实时的,但每一个片段其实都是预先上传好的录制内容。它被切成秒级的分片,再由推荐算法投喂给你——这正是信息流看起来永无尽头的原因。
本系列聚焦于 VOD,但其中的大多数技术(编解码器、封装容器、传输协议、DRM)同样适用于直播。
VOD 的旅程:从摄像机到你的屏幕
一段视频要经过六个阶段才能到达你的手机:
①Capture/Upload ②Transcode ③Package
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Director │ ────► │ Compress │ ──────► │ Cut into │
│ uploads │ │ into many│ │ small │
│ raw file │ │ qualities│ │ segments │
└─────────┘ └─────────┘ └─────────┘
│
┌───────────────────────────────────────┘
│
▼
④Store in Cloud ⑤CDN Distribution ⑥Playback
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Put into │ ────► │ Copy to │ ──────► │ Auto- │
│ object │ │ nearest │ │ select │
│ storage │ │ data │ │ quality │
│ (S3 etc) │ │ center │ │ & play │
└─────────┘ └─────────┘ └─────────┘
每个阶段都对应本系列的一个章节:
| 阶段 | 它解决的问题 | 对应篇章 |
|---|---|---|
| ①采集/上传 | 如何可靠地把大文件传到服务器 | 第 11 篇 |
| ②转码 | 如何把 20 GB 的母版压到 200 MB,还依然清晰好看 | 第 2 篇、第 3 篇 |
| ③封装 | 如何把视频 + 音频 + 字幕组合起来并切成分片 | 第 4 篇、第 5 篇 |
| ④存储 | 如何低成本地存放海量视频 | 第 11 篇、第 12 篇 |
| ⑤CDN | 如何让全球用户都能快速访问 | 第 7 篇 |
| ⑥播放 | 如何自适应网速并防盗版 | 第 6 篇、第 8 篇、第 9 篇 |
而贯穿始终的那条主线——你如何知道用户的体验好不好?——就是第 10 篇:QoE 指标。
视频不过是一叠照片
这是本章最重要的一句话:
视频 = 一连串快速播放的图像 + 一条音轨。
当你看视频时,你的大脑看到的是:
Frame 1 Frame 2 Frame 3 Frame 4 Frame 5 ...
┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐
│ │ │ │ │ │ │ │ │ │
│ 🚗 │ │ 🚗 │ │ 🚗 │ │ 🚗 │ │ 🚗 │
│ │ │ │ │ │ │ │ │ │
└────┘ └────┘ └────┘ └────┘ └────┘
(car shifts slightly right)
┃
▼ Play 30 images per second → you see "smooth driving"
每一张图像都称为一帧(frame)。
像素与分辨率
把任意一张图片放得足够大,你就会看到一个个小方块——每一个方块记录一种颜色。这个方块就是像素(pixel)。
- 一张 1920×1080 的图像有 1920 列 × 1080 行 = 2,073,600 个像素(约 200 万像素)。
- 每个像素存储一个颜色值,占用几个字节。
分辨率就是像素的尺寸。常见的标识有:
| 标识 | 分辨率 | 总像素 | 相对大小 |
|---|---|---|---|
| 240p | 426 × 240 | ~10 万 | 1x(基准) |
| 360p | 640 × 360 | ~23 万 | 2.3x |
| 480p (SD) | 854 × 480 | ~41 万 | 4.1x |
| 720p (HD) | 1280 × 720 | ~92 万 | 9.2x |
| 1080p (FHD) | 1920 × 1080 | ~200 万 | 20x |
| 1440p (2K) | 2560 × 1440 | ~370 万 | 37x |
| 2160p (4K UHD) | 3840 × 2160 | ~830 万 | 83x |
| 4320p (8K) | 7680 × 4320 | ~3320 万 | 332x |
注意:“4K”有两种版本——UHD 4K(消费级:3840×2160)和 DCI 4K(电影级:4096×2160)。
竖屏手机视频采用 9:16 比例(例如 720×1280),正好是横屏 16:9(1920×1080)的倒置。
像素如何存储颜色:RGB、YUV 与位深
RGB
最直观的方式:为每个像素分别存储红、绿、蓝三种颜色的强度。
- 黑色 = R:0 G:0 B:0
- 白色 = R:255 G:255 B:255
- 每个通道占 8 位(1 字节,0–255),因此一个 RGB 像素 = 3 字节。
算笔账:单张 1080p 的 RGB 帧 = 1920 × 1080 × 3 字节 ≈ 6.2 MB。按 30 fps 计算,就是 186 MB/秒——一部 2 小时的电影如果不压缩将高达 1.3 TB!
这正是视频必须压缩的原因。
YUV(视频行业标准)
视频使用 YUV(也写作 YCbCr):
- Y(亮度 Luma):像素有多亮(0 = 黑,255 = 白)
- U、V(色度 Chroma):像素是什么颜色
为什么不直接用 RGB?因为:
人眼对亮度的敏感程度远高于对颜色的敏感程度。
YUV 正是利用了这一点:你可以记录更少的颜色信息,而肉眼几乎察觉不到差别。
色度二次采样(Chroma Subsampling)
| 方案 | 说明 | 相对 4:4:4 的数据量 | 应用场景 |
|---|---|---|---|
| 4:4:4 | 每个像素都有完整的 Y/U/V | 100% | 影视后期制作 |
| 4:2:2 | 相邻两个像素共用一组 U/V | 67% | 广播、专业级 |
| 4:2:0 | 相邻四个像素共用一组 U/V | 50% | 几乎所有消费级流媒体 |
Luma Y (all kept) Chroma U/V (one per 2×2 block)
┌──┬──┬──┬──┐ ┌─────┬─────┐
│Y │Y │Y │Y │ │ │ │
├──┼──┼──┼──┤ │ UV │ UV │
│Y │Y │Y │Y │ │ │ │
├──┼──┼──┼──┤ ├─────┼─────┤
│Y │Y │Y │Y │ │ │ │
├──┼──┼──┼──┤ │ UV │ UV │
│Y │Y │Y │Y │ │ │ │
└──┴──┴──┴──┘ └─────┴─────┘
16 Y values 4 UV pairs
RGB 4:4:4 = 16 × 3 = 48 bytes
YUV 4:2:0 = 16 + 4 + 4 = 24 bytes (half the data)
代价是:纯黑背景上的鲜红色文字可能会出现轻微的色彩溢出。但 99% 的自然场景看起来毫无差别。
位深(Bit Depth)
即每个通道用多少位来表示:
| 位深 | 每通道取值范围 | 每像素可表示的颜色 | 应用场景 |
|---|---|---|---|
| 8 位 | 0–255 | 1670 万 | 大多数消费级流媒体 |
| 10 位 | 0–1023 | 10.7 亿 | HDR 必备;Netflix 4K、蓝光 |
| 12 位 | 0–4095 | 687 亿 | 影视母版、Dolby Vision |
8 位通常够用,但在平滑的渐变上(例如从深蓝逐渐过渡到浅蓝的天空),会出现明显的色带(banding)——不自然的阶梯状分界。HDR 内容需要 10 位来消除这种现象。
帧率(fps)
fps = 每秒帧数(frames per second)。
- 24 fps:自 1920 年代以来的电影标准,带来那种”电影感”。
- 25 / 50 fps:PAL 制式电视(欧洲、中国)。
- 29.97 / 30 fps:NTSC 制式(北美、日本)。大多数手机录制的默认值。
- 60 fps:游戏、体育、YouTube 高帧率视频。
- 120 / 240 fps:慢动作、专业级拍摄。
为什么电影 24 fps 就够了?人的”视觉暂留”效应在大约 16 fps 时便会起作用——你的大脑此时已经看到连续的运动了。24 fps 是 1920 年代”足够流畅 + 最省胶片”的甜蜜点。但对于快速动作(体育、游戏),则需要 60 fps 以上来避免运动模糊。
留意一下 29.97 fps——这可不是打错了。NTSC 彩色电视故意把频率偏移了一点,以避免与黑白信号相互干扰。
帧率越高,文件越大。在相同分辨率和画质下,60 fps 的体积大约是 30 fps 的 1.7 倍。
码率:每秒消耗多少数据
码率(Bitrate)是指每秒视频所消耗的比特数。
- kbps(千比特/秒):1 Mbps = 1000 kbps
- Mbps(兆比特/秒):常用单位
文件大小 ≈ 码率 × 时长:
1 Mbps × 60 seconds ÷ 8 (bits to bytes) ≈ 7.5 MB
典型码率(H.264)
| 分辨率 | 推荐码率 | 1 分钟文件大小 |
|---|---|---|
| 240p | 0.3–0.5 Mbps | ~3 MB |
| 360p | 0.5–0.8 Mbps | ~5 MB |
| 480p | 0.8–1.2 Mbps | ~8 MB |
| 720p | 1.5–3 Mbps | ~15 MB |
| 1080p | 3–6 Mbps | ~30 MB |
| 4K | 15–30 Mbps | ~150 MB |
CBR / VBR / CRF
三种码率控制模式:
| 模式 | 含义 | 类比 |
|---|---|---|
| CBR(恒定码率) | 每秒固定比特数 | 每次都正好点 2 个菜 |
| VBR(可变码率) | 复杂场景多给比特,简单场景少给 | 饭量大的多点,饭量小的少点 |
| CRF(恒定质量因子) | 质量保持恒定,码率随之变化 | 不管点什么,都吃到八分饱为止 |
VOD 偏好 VBR 或 CRF——在相同文件大小下画质更好。直播偏好 CBR——码率可预测,网络传输更稳定。
I 帧、P 帧、B 帧:视频压缩的核心
这是本章最关键的概念。理解了它,编解码器那一章的内容便会豁然开朗。
视频为什么能被如此激进地压缩?
想象一段视频:一个人坐在沙发上看电视:
Frame 1: Person on couch, TV playing animation
Frame 2: Person on couch, TV playing animation (TV image changes slightly)
Frame 3: Person blinks, TV playing animation
Frame 4: Person on couch, TV playing animation
**相邻两帧之间 99% 的像素都是完全相同的。**把每一帧都完整存下来是巨大的浪费。
聪明的做法是:
- 偶尔存一张”完整快照”
- 其余时间只存”相比上一帧发生了什么变化”
三种帧类型
| 类型 | 全称 | 内容 | 大小 | 能否独立解码? |
|---|---|---|---|---|
| I 帧(关键帧) | 帧内编码(Intra-coded) | 一张完整图像(类似 JPEG) | 大 | 能 |
| P 帧 | 预测帧(Predicted) | “与前面某一帧的差异” | 小 | 不能——需要先有参考帧 |
| B 帧 | 双向预测帧(Bidirectional) | “与前一帧和后一帧的差异” | 最小 | 不能——需要前后两个参考帧 |
Timeline →
I - P - P - P - B - P - P - B - I - P - P - P ...
▲ ▲
Keyframe Next keyframe
(appears every N frames)
IDR 帧
IDR 帧(Instantaneous Decoder Refresh,即时解码刷新)是一种特殊的 I 帧:它之后的所有帧都被禁止引用它之前的任何内容。IDR 帧是”安全的起始点”。当你把进度拖到视频中间时,播放器会跳到最近的 IDR 帧开始解码。
GOP(图像组,Group of Pictures)
GOP 是两个 I 帧之间的那一组帧:
┌──── GOP 1 ────┐ ┌──── GOP 2 ────┐ ┌──── GOP 3 ...
I P B P P B I P B P P B I P ...
▲
New IDR starts here
GOP 长度决定了分片的粒度:
- 短 GOP(1–2 秒):分片更细,拖动和起播更快;文件略大(I 帧更多)
- 长 GOP(4–10 秒):文件更小,但拖动更慢
短视频 App 通常采用短 GOP(1–2 秒),因为用户会在不同片段之间频繁滑动切换。长片 VOD 则可以采用更长的 GOP 来节省带宽。
色彩空间与 HDR
色彩空间
同一组 RGB 数值,在不同标准下会显示出不同的实际颜色:
| 标准 | 应用场景 | 色域大小 |
|---|---|---|
| sRGB | 网页、电脑 | 基准 |
| BT.709 | 高清电视、1080p 流媒体 | ≈ sRGB |
| BT.2020 | HDR、4K/8K | 比 BT.709 大约 72% |
| DCI-P3 | 电影、Apple 生态 | 介于 BT.709 与 BT.2020 之间 |
HDR:更亮的亮部、更暗的暗部、更丰富的色彩
传统 SDR 的峰值亮度约为 100 尼特(nits)。HDR 可达到 1,000–4,000 尼特的峰值亮度,再结合 10 位位深 + BT.2020 色域:
- 夜空中的星星显得更亮
- 阴影中的细节得以保留
- 颜色更饱和且不会溢出(clipping)
主流 HDR 格式:
| 格式 | 出品方 | 关键特性 |
|---|---|---|
| HDR10 | 蓝光光盘协会 | 免版税;每部电影使用静态元数据 |
| HDR10+ | 三星 / Amazon | 每个场景使用动态元数据 |
| Dolby Vision | Dolby | 12 位、动态元数据;画质最高;需付版税 |
| HLG | BBC / NHK | 兼容 SDR 显示器;广播首选 |
请注意:HDR 视频在 SDR 显示器上并不会神奇地更好看。如果不做色调映射(tone mapping),它看起来会灰蒙蒙、发白。
动手实践:用 ffprobe 检查一段视频
# macOS / Linux
brew install ffmpeg # or: apt install ffmpeg
# Inspect a video
ffprobe -v error -show_streams -select_streams v:0 myvideo.mp4
典型输出:
codec_name=h264 # Codec (H.264) — see Part 2
profile=High # Encoding profile
width=1920
height=1080 # Resolution: 1080p
r_frame_rate=30000/1001 # Frame rate: 29.97 fps
pix_fmt=yuv420p # Pixel format: YUV 4:2:0, 8-bit
color_space=bt709 # Color space: SDR
bit_rate=4500000 # Bitrate: 4.5 Mbps
读完本章,上面每一行你都应该能看懂。
核心要点
- 视频 = 一连串图像 + 音频。每一张图像就是一帧。
- 每一帧由像素组成;分辨率就是像素的尺寸。
- 视频世界使用 YUV 4:2:0(数据量只有 RGB 的一半,肉眼无差别)。
- 位深:8 位是标准;HDR 需要 10 位。
- 帧率:24 fps(电影)/ 30 fps(电视)/ 60 fps(游戏/体育)。
- 码率 = 每秒数据量。VOD 首选 VBR/CRF。
- I/P/B 帧是视频实现 50–100 倍压缩的方式。
- GOP = 关键帧之间的那组帧。短视频使用短 GOP(1–2 秒)。
- HDR = 10 位 + 更宽色域 + 更高亮度——与 SDR 有着本质区别。
三对处处可见的概念
在深入之前,先把这三对概念钉牢:
-
编解码器 ≠ 封装容器——H.264 是一种压缩算法(编解码器);MP4 是一种文件格式(封装容器)。一个
.mp4文件里可以装 H.264,也可以装 H.265,或装 AV1。 -
协议 ≠ 封装——HLS 和 DASH 是”如何分发”的规则(协议);fMP4 和 TS 是”如何切片和封装”的格式(封装)。
-
加密 ≠ DRM——HLS AES-128 是轻量级加密(密钥一旦泄露就全盘皆输)。DRM 则是一整套体系:密钥分发 + 设备限制 + 输出保护。
这三对概念都会在本系列中详细展开。
下一篇:一部 4K 电影是如何塞进 5 GB 的? → 第 2 篇:视频编解码器——H.264、H.265 与 AV1
参考资料
- FFmpeg documentation — FFmpeg
- H.264: Advanced video coding — ITU-T