Premiere Pro 透明视频边缘有白边/亮点?可能是 Alpha 预乘问题

| .NET | 1 Reads

最近我在做一个很简单的角色动画工具:用几张 PNG 图片叠加,再根据音频音量切换张嘴和闭嘴图,最后输出带透明通道的视频,方便放进 Premiere Pro 里继续剪辑。

一开始逻辑都对了,但输出视频后出现了一个很烦的问题:角色边缘会有一些 1 到 2 像素的亮点,看起来像图片没扣干净,或者边缘有白色杂边。

奇怪的是,原始 PNG 是干净的,在图片查看器和 Photoshop 里看都没有问题。工具里的预览 PNG 也没有明显脏边。问题只在输出成透明视频,再导入剪辑软件之后出现。

后来确认,这不是图片本身的问题,也不是单纯 MOV 或 AVI 容器的问题,而是 Alpha 解释方式的问题。

Straight Alpha 和 Premultiplied Alpha

透明图像除了 RGB 颜色,还有 Alpha 通道。Alpha 决定这个像素有多透明。

问题在于,RGB 和 Alpha 有两种常见存法。

一种是 Straight Alpha,也叫 Unpremultiplied Alpha。
它的 RGB 还是原本颜色,透明度单独存在 Alpha 里。

另一种是 Premultiplied Alpha,也就是预乘 Alpha。
它会提前把 RGB 乘上 Alpha。越透明的地方,RGB 也会被压得越低。

这两种格式本身都没错,但关键是:输出和读取必须使用同一种解释方式。

如果视频实际是 Straight Alpha,但 Premiere Pro 或 AE 按 Premultiplied Alpha 去解释,那么半透明边缘里的 RGB 颜色就可能被错误露出来。于是角色边缘就会出现白点、亮边、彩边,看起来像 PNG 没扣干净。

反过来,如果 Premultiplied Alpha 被当成 Straight Alpha 解释,也可能出现黑边或边缘变脏。

为什么 PNG 预览是干净的,视频却脏了?

PNG 预览一般会按正确的透明合成方式显示,所以看起来没问题。

但透明视频进入剪辑软件后,软件要判断这个素材的 Alpha 类型。如果这个判断和视频实际数据不一致,边缘像素就会暴露问题。

透明边缘通常不是“完全透明”或者“完全不透明”,而是一圈半透明像素。这一圈像素最容易出问题。它们的 Alpha 很低,但 RGB 可能仍然比较亮。如果没有按正确方式处理,就会在黑底或深色背景上变成明显亮点。

这也是为什么问题通常只有 1 到 2 像素,却沿着角色轮廓到处都是。

AE 旧工程为什么没问题?

我以前用 AE 输出时,设置里是 RGB + Alpha,并且颜色是“预乘”。

这意味着 AE 输出的视频本来就是按 Premultiplied Alpha 的思路来的。Premiere Pro 再读取它时,解释方式和数据是匹配的,所以边缘看起来正常。

而新工具最开始输出的视频虽然有 Alpha,但更接近 Straight Alpha。导入到同一个剪辑环境里后,就和旧 AE 输出的素材表现不一样。

所以问题不是“新工具把图片弄坏了”,而是“新工具输出的 Alpha 语义和旧 AE 不一致”。

最后的处理方式

解决方式不是给图片描边,也不是清理 PNG 边缘,更不是强行扩色。之前尝试处理边缘像素,反而容易把轮廓变厚,让问题更明显。

正确方向是:在视频编码前,把 RGB 按 Alpha 预乘。

现在工具里增加了一个 Alpha 选项:

  • Premultiplied (AE):默认选项,模拟 AE 的预乘 Alpha 输出。
  • Straight:保留之前的输出方式,方便对比或给需要 Straight Alpha 的流程使用。

实际编码前会先做 premultiply,让透明边缘的 RGB 被 Alpha 压下去。这样 Premiere Pro / AE 按预乘方式解释时,边缘就不会把原始亮色 RGB 错误显示出来。

结论

透明视频边缘出现亮点,不一定是图片没扣干净,也不一定是 MOV 或 AVI 格式的问题。

更常见的原因是:

素材的 Alpha 存储方式,和剪辑软件的 Alpha 解释方式不一致。

如果旧 AE 工程使用的是“预乘”输出,那么新工具最好也输出 Premultiplied Alpha。这样才能让透明边缘在 Premiere Pro 里保持和旧素材一致的观感。

This article was last edited at