【问题标题】:How to set a transparent background for an AVVideoComposition?如何为 AVVideoComposition 设置透明背景?
【发布时间】:2011-10-04 10:59:57
【问题描述】:

更新 - 我为回答这个问题添加了 50 声望奖励!

我有一个应用程序,它需要将一些视频和照片放在一起,然后用它们制作电影。我为此使用 AVMutableComposition。为了能够指导它如何合成视频,我必须使用 AVMutableVideoComposition。这东西有一个名为backgroundColor 的属性,Apple 文档说:

仅支持纯 BGRA 颜色;模式和其他支持 颜色被忽略。如果渲染的像素缓冲区没有 alpha, 背景颜色的 alpha 值被忽略。

我从中了解到的是,有一种方法可以将 alpha 通道添加到 backgroundColor,但我只是不明白如何。 If the rendered pixel buffer does not have alpha, the alpha value of the background color is ignored. 是什么意思?以及如何添加这样的东西?

如果我只做myVideoCompositionInstruction.backgroundColor = [[UIColor colorWithWhite:1 alpha:0] CGColor];,它就不起作用 - 背景保持白色并且不透明。

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 有人吗?我真的需要这个,但我不知道该怎么做。
  • 你试过 myVideoCompositionInstruction.backgroundColor = [[UIColor clearColor] CGColor] 吗?
  • 是的 - 也不这样做:(
  • [UIColor redColor].CGColor 怎么样?会变红吗?这至少会消除您没有正确使用该属性的可能性。
  • 它会变成红色或我应用的任何其他颜色。无论我对它做什么,它都不会变得透明:(

标签: iphone avfoundation transparent background-color avcomposition


【解决方案1】:

在 Apple 的 AVVideoCompositionInstruction 文档中,您要设置的属性 backgroundColor 的类型为 CGColorRef

我敢打赌,因为您使用 UIColor 设置backgroundColor,然后才通过 CGColor 属性获取它的值,由于某种原因,alpha 值不会'不要被传递到 CGColorRef 对象中。你知道白色值被传递了,因为默认颜色是黑色。

UIColor 有一些限制。我建议您阅读以下article。请特别注意文章的“UIColor 的问题”部分。

我猜你的问题的最佳解决方案是直接用 CGColor 定义 backgroundColor(例如使用 CGColorCreate),而不是 UIColor。

【讨论】:

  • 感谢您的提示。我明天一到办公室就试试这个,如果可行,我会告诉你...
  • 我这样做了CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); float transparentWhite[] = { 1, 1, 1, 0 }; CGColorRef backgroundColor = CGColorCreate(colorSpace, transparentWhite); _videoInstruction.backgroundColor = backgroundColor;,但它仍然不起作用......
  • 我试过了,用这种方法可以看到白色,但忽略 alpha,即使我为渲染的像素缓冲区设置了不透明度。任何想法为什么会发生这种情况以及任何解决方法?