Chrome 视频的 Alpha 透明度

Chrome 视频中的 Alpha 透明度

Chrome 31 现在支持 WebM 中的视频 Alpha 透明度。

换句话说,在播放使用 Alpha 通道编码为 WebM (VP8VP9) 的“绿幕”视频时,Chrome 会考虑 Alpha 通道。也就是说,您可以播放具有透明背景的视频:在网页、图片甚至其他视频上播放。

您可以访问 simpl.info/videoalpha 查看演示。有点超现实,而且有点粗糙(字面意思),但您能明白我的意思!

如何制作 Alpha 版视频

我们介绍的方法使用开源工具 Blender 和 ffmpeg:

  1. 在单色背景(例如亮绿色窗帘)前拍摄正文。
  2. 处理视频,以构建包含透明度数据的 PNG 静态图片数组。
  3. 编码为视频格式(在本例中为 WebM)。

还有一些专有工具可以执行相同的工作,例如 Adobe After Effects,您可能会发现它更简单。

1. 制作绿幕视频

首先,您需要以某种方式拍摄正文,以便后续处理时可以“移除”(使其透明)背景中的所有内容。

最简单的方法是在单色背景(例如屏幕或窗帘)前拍摄。绿色或蓝色是最常用的颜色,这主要是因为它们与肤色不同。

网上多个 指南可供您参考,教您如何拍摄绿幕视频(也称为“色键”),而且很多地方都出售绿色和蓝色屏幕背景。或者,您也可以使用色度键绘制来绘制背景。

《了不起的盖茨比》特效影片展示了绿幕技术的强大功能。

有关拍摄的提示:

  • 确保拍摄对象的衣服或物品与背景颜色不同,否则这些物品在最终视频中会显示为“空洞”。即使是小徽标或珠宝也可能会造成问题。
  • 使用均匀一致的光线,并避免阴影:目的是尽可能缩小后续需要设为透明的背景颜色范围。
  • 使用多个漫射光有助于避免阴影和背景颜色变化。
  • 避免使用亮光背景:哑光表面可以更好地漫射光线。

2. 使用绿幕视频制作原始 Alpha 视频

以下步骤介绍了一种从绿幕视频创建原始 Alpha 视频的方法:

  1. 拍摄好绿幕视频后,您可以使用 Blender 等开源工具将视频转换为包含 Alpha 数据的 PNG 文件数组。使用 Blender 的颜色键控功能移除绿幕并使其透明。(请注意,PNG 并非强制性要求:任何可保留 Alpha 通道数据的格式均可。)
  2. 使用 ffmpeg 等开源工具将 PNG 文件数组转换为原始 YUVA 视频:

    ffmpeg -i image%04d.png -pix_fmt yuva420p video.raw

    或者,您也可以使用 ffmpeg 命令直接将文件编码为 WebM,如下所示:

    ffmpeg -i image%04d.png output.webm

如果您想添加音频,可以使用 ffmpeg 通过以下命令进行混合:

ffmpeg -i image%04d.png -i audio.wav output.webm

3. 将 Alpha 视频编码为 WebM

原始 Alpha 视频可以通过两种方式编码为 WebM。

  1. ffmpeg:我们为 ffmpeg 添加了对 WebM Alpha 视频编码的支持。

    将 ffmpeg 与包含 Alpha 数据的输入视频搭配使用,将输出格式设置为 WebM,系统就会根据规范自动以正确的格式进行编码。请注意,目前您需要确保从 git 树中获取最新版 ffmpeg,这样才能正常运行。

    示例命令:

    ffmpeg -i myAlphaVideo.webm output.webm

  2. 使用 webm-tools:

    git clone https://chromium.googlesource.com/webm/libvpx

    webm-tools 是一组与 WebM 相关的简单开源工具,由 WebM 项目作者维护,其中包括用于创建具有 Alpha 透明度的 WebM 视频的工具。

    使用 --help 运行二进制文件,查看 alpha_encoder 支持的选项列表。

4. 在 Chrome 中播放

如需在 Chrome 中播放编码的 WebM 文件,只需将该文件设置为视频元素的来源即可。

他们是如何做到的?

我们与 Google 工程师 Vignesh Venkatasubramanian 进行了对话,了解了他在这项项目中的工作。他总结了其中的关键挑战:

  • VP8 比特流不支持 Alpha 通道。因此,我们必须在不破坏 VP8 比特流和现有播放器的情况下集成 Alpha 通道。
  • Chrome 的渲染程序无法渲染带有 Alpha 通道的视频。
  • Chrome 针对多种硬件/GPU 设备提供了多条渲染路径。必须更改每个渲染路径,才能支持渲染 Alpha 视频。

我们可以想到许多有趣的视频 Alpha 透明度用例:游戏、互动视频、协作故事讲述(将您自己的视频添加到背景视频/图片中)、包含备选角色或情节的视频、使用叠加视频组件的 Web 应用。

祝您制作愉快!如果您使用 Alpha 版透明度功能构建了一些出色的应用,请告诉我们。

实用资源