如果您使用 QuickTime 从 your demo 打开 this video,您将看到一个具有单独 RGB 和 A 区域的视频:
如果您随后查看演示代码,您会发现它使用一个屏幕外 HTML5 Canvas 来绘制每个视频帧,从该画布的后半部分读取 alpha 像素以设置显式的每像素 alpha前半部分的值,然后使用putImageData 将结果推送到另一个实际显示视频的 HTML5 Canvas。
function processFrame() {
buffer.drawImage(video, 0, 0);
var image = buffer.getImageData(0, 0, width, height),
imageData = image.data,
alphaData = buffer.getImageData(0, height, width, height).data;
for (var i=3, len=imageData.length; i<len; i += 4){
imageData[i] = alphaData[i-1];
}
output.putImageData(image, 0, 0, 0, 0, width, height);
}
再加上网络上的各种说法,即 H.264 不支持 alpha,我几乎确信 H.264 不支持 alpha。我这样说是因为我在 Apple 计算机的“Leopard”版本的 OS X 中找到了多次引用 Apple 计算机关于更新 QuickTime 的 2006 年报价:
QuickTime 的管道在 Leopard 中得到了重大升级。在处理 H.264 编码方面已经有了显着的改进。此外,基于 H.264 的 QuickTime 电影现在支持 透明 alpha 层,这是 H.264 规范的可选部分。最后,QuickTime 支持 64 位。
然而,我发现与此营销报价相关的唯一内容是 this document 展示了如何在 QuickTime Pro 中更改视频层的整体不透明度。