打码后视频为什么变大:码率、画质与控制方法

解释打码成片体积膨胀的原因:成片必须重新编码,纯质量模式会把码率推到原片的两三倍;介绍按源片码率封顶和源规格匹配的做法与实测数据,以及 HLG 等色彩标记、预览代理片和成片的区别,便于企业评估存储和分发成本。

企业接入视频打码后,常见的第二个问题(第一个是漏检)是:成片比原片大了一倍甚至几倍,存储和分发成本跟着涨。这篇文章解释原因,以及我们现在是怎么控制的。

为什么成片一定要重新编码

视频文件里存的不是一帧帧完整画面,而是经过压缩的帧间差异。要改动画面里的任何一块像素,必须把帧解码成完整画面、修改、再重新编码。打码只改遮挡区域,但编码是对整条视频做的,所以成片的码率由编码器的设置决定,和"改了多少"关系不大。

体积膨胀的真正原因:纯质量模式

GPU 编码器有两类模式:

  • 固定质量(NVENC 的 CQ 模式):告诉编码器"保持这个质量",码率由它自己定。画面复杂、噪点多的片段会被分配很高的码率。
  • 码率受控:给定目标码率或上限,编码器在这个预算内分配。

我们早期用的是固定质量模式。它的好处是画质稳定,坏处是编码器不知道原片的码率:手机拍的 4K 原片码率可能只有 40 Mbps,编码器为了"保持质量"会给到 80 Mbps 以上。我们在 10 月对线上成片做过一次抽样:成片体积中位数是原片的 2.29 倍,最差的 10% 超过 5.6 倍。原片本身码率越低、噪点越多,膨胀越严重。

现在的做法:按源片封顶,按源规格输出

两条规则,都已经在线上生效:

  1. 码率按源片封顶。读取原片的平均码率,作为成片编码的上限。编码器仍然按质量分配,但不能超过原片。实测同一条 4K 手机原片,成片体积比封顶前小 34%,画面对比看不出差别。
  2. 源规格匹配。分辨率、帧率与原片一致;HEVC 原片输出 HEVC,H.264 原片输出 H.264;色彩空间和传输特性的标记原样带过去。

第二条里有一个容易被忽略的细节:色彩标记。部分手机(尤其是开了 HDR 的)拍出来的是 HLG 或 BT.2020 色彩空间,如果成片不带这些标记,播放器会按普通 SDR 解释,画面整体发灰。我们遇到过这个问题,修法就是把原片的色彩标记原样写进成片。

画质会不会受影响

只有遮挡区域的像素被改动;其余画面经历了一次"解码—原样—编码"。在码率封顶、分辨率帧率一致的前提下,这次重新编码带来的损失非常小,逐像素对比能测出差异,肉眼在正常播放下看不出。如果你的场景对画质极度敏感(比如还要二次剪辑),可以在接入时约定更高的封顶系数。

预览和成片是两个东西

打码流程里会出现两种视频,企业接入时要分清:

  • 预览代理片:给复核界面用的低码率版本(约 5 Mbps、1 秒一个关键帧),为的是拖进度条时能立刻定位。它不是交付物。
  • 成片:按上面的规则编码的交付文件。

对象清单、复核操作都基于同一套时间轴,预览里确认的保留和补画会落到成片上。

接入时可以约定的参数

参数 默认 说明
码率上限 原片平均码率 可约定为原片的 1.2 倍等
编码格式 与原片一致 可强制 H.264 以兼容旧播放器
分辨率 / 帧率 与原片一致 标准档 1080p 以内,帧率不限;2K、4K 按档计费
音轨 原样保留 不重新编码

给存储预算的建议

按"成片 ≈ 原片体积"做预算,再留 10% 余量。如果你的原片本身码率很高(专业设备、高码率档位),成片通常会比原片略小;手机拍摄的中低码率原片,成片接近原片。不会再出现两三倍的情况。

把打码接进你的系统

注册即可用你的素材免费验证效果,再谈接入和费用;自己处理用打码鸭。