Why redacted video files grow: bitrate, quality and how we cap it
Why redacted video files used to come out two to three times larger than the source, how re-encoding in pure quality mode inflates bitrate, what capping at the source bitrate and matching the source specification changed in measured output, and how colour tags and preview proxies fit into the pipeline.
Articles in this section are written in Chinese; the title and abstract are in English.
企业接入视频打码后,常见的第二个问题(第一个是漏检)是:成片比原片大了一倍甚至几倍,存储和分发成本跟着涨。这篇文章解释原因,以及我们现在是怎么控制的。
为什么成片一定要重新编码
视频文件里存的不是一帧帧完整画面,而是经过压缩的帧间差异。要改动画面里的任何一块像素,必须把帧解码成完整画面、修改、再重新编码。打码只改遮挡区域,但编码是对整条视频做的,所以成片的码率由编码器的设置决定,和"改了多少"关系不大。
体积膨胀的真正原因:纯质量模式
GPU 编码器有两类模式:
- 固定质量(NVENC 的 CQ 模式):告诉编码器"保持这个质量",码率由它自己定。画面复杂、噪点多的片段会被分配很高的码率。
- 码率受控:给定目标码率或上限,编码器在这个预算内分配。
我们早期用的是固定质量模式。它的好处是画质稳定,坏处是编码器不知道原片的码率:手机拍的 4K 原片码率可能只有 40 Mbps,编码器为了"保持质量"会给到 80 Mbps 以上。我们在 10 月对线上成片做过一次抽样:成片体积中位数是原片的 2.29 倍,最差的 10% 超过 5.6 倍。原片本身码率越低、噪点越多,膨胀越严重。
现在的做法:按源片封顶,按源规格输出
两条规则,都已经在线上生效:
- 码率按源片封顶。读取原片的平均码率,作为成片编码的上限。编码器仍然按质量分配,但不能超过原片。实测同一条 4K 手机原片,成片体积比封顶前小 34%,画面对比看不出差别。
- 源规格匹配。分辨率、帧率与原片一致;HEVC 原片输出 HEVC,H.264 原片输出 H.264;色彩空间和传输特性的标记原样带过去。
第二条里有一个容易被忽略的细节:色彩标记。部分手机(尤其是开了 HDR 的)拍出来的是 HLG 或 BT.2020 色彩空间,如果成片不带这些标记,播放器会按普通 SDR 解释,画面整体发灰。我们遇到过这个问题,修法就是把原片的色彩标记原样写进成片。
画质会不会受影响
只有遮挡区域的像素被改动;其余画面经历了一次"解码—原样—编码"。在码率封顶、分辨率帧率一致的前提下,这次重新编码带来的损失非常小,逐像素对比能测出差异,肉眼在正常播放下看不出。如果你的场景对画质极度敏感(比如还要二次剪辑),可以在接入时约定更高的封顶系数。
预览和成片是两个东西
打码流程里会出现两种视频,企业接入时要分清:
- 预览代理片:给复核界面用的低码率版本(约 5 Mbps、1 秒一个关键帧),为的是拖进度条时能立刻定位。它不是交付物。
- 成片:按上面的规则编码的交付文件。
对象清单、复核操作都基于同一套时间轴,预览里确认的保留和补画会落到成片上。
接入时可以约定的参数
| 参数 | 默认 | 说明 |
|---|---|---|
| 码率上限 | 原片平均码率 | 可约定为原片的 1.2 倍等 |
| 编码格式 | 与原片一致 | 可强制 H.264 以兼容旧播放器 |
| 分辨率 / 帧率 | 与原片一致 | 标准档 1080p 以内,帧率不限;2K、4K 按档计费 |
| 音轨 | 原样保留 | 不重新编码 |
给存储预算的建议
按"成片 ≈ 原片体积"做预算,再留 10% 余量。如果你的原片本身码率很高(专业设备、高码率档位),成片通常会比原片略小;手机拍摄的中低码率原片,成片接近原片。不会再出现两三倍的情况。