视频混剪 -WebCodecs 导出视频
整体流程
先把导出流程画出来:
逐帧渲染 → 创建 VideoFrame → 编码 → 封装成 MP4 → 下载。这个流程跑一遍,就能把时间轴上的内容变成一个可分享的视频文件。
视频编码基础知识
在讲 WebCodecs 之前,先补一些视频编码的背景知识。
为什么视频需要压缩
一帧 1080p 画面有多大?
1920 × 1080 × 3 bytes (RGB) = 6.2 MB
一秒 30 帧:6.2 × 30 = 186 MB/s
一分钟视频:186 × 60 = 11.2 GB
没有压缩的话,一分钟视频就要 10GB,根本没法传播。
压缩的核心思路
视频压缩利用两种冗余:
1. 空间冗余(Spatial Redundancy)
一帧画面里,相邻像素往往颜色相近。比如蓝天部分,几千个像素都是差不多的蓝色。
不需要存每个像素的颜色,可以存"这一块区域都是这个颜色"。
2. 时间冗余(Temporal Redundancy)
相邻帧之间差异很小。比如一个人讲话,背景完全没动。
不需要存完整的每一帧,可以存"相对于上一帧,哪里变了"。
I/P/B 帧
视频编码把帧分成三类:
| 类型 | 全称 | 作用 |
|---|---|---|
| I 帧 | Intra-coded | 完整画面,不依赖其他帧 |
| P 帧 | Predictive | 存储与前一帧的差异 |
| B 帧 | Bidirectional | 存储与前后两帧的差异 |
典型的帧序列:I P B B P B B P B B I P B B ...
│ │ └──────── GOP ───────────────┘ (一组画面)
I 帧最大,但可以独立解码(用于快进拖拽)。 B 帧最小,但解码时需要前后帧。
H.264/AVC
H.264 是目前最通用的视频编码标准,几乎所有设备都支持。
它的压缩率非常高:原本 10GB 的视频可以压到几百 MB,肉眼几乎看不出画质损失。

