通过 HDMI 保持视频的 alpha 透明度

Posted

技术标签:

【中文标题】通过 HDMI 保持视频的 alpha 透明度【英文标题】:Keep alpha-transparency of a video through HDMI 【发布时间】:2013-04-15 04:52:42 【问题描述】:

我正在处理的场景实际上如下:我需要获取 OpenGL 生成的屏幕并通过 HDMI 将其发送到 FPGA 组件,同时保持 alpha 通道。但是现在通过 HDMI 发送的数据只有 RGB(没有 alpha 通道的 24 位)所以我需要一种方法来强制通过这个端口发送 Alpha 位。

查看图片:http://i.imgur.com/hhlcbb9.jpg

我能想到的一个解决方案是将屏幕缓冲区从 RGBA 模式转换为 RGB,同时在 RGB 缓冲区中混合 Alpha 通道。

例如:

The original buffer: [R G B A][R G B A][R G B A]
The output i want: [R G B][A R G][B A R][G B A] 

重点是不必遍历每个像素。 但我不确定是否可以使用 OpenGL 或任何技术(VideoCore 内核?)

【问题讨论】:

您找到解决方案了吗?如何确定为什么您的 Alpha 通道没有通过您的 HDMI 链接?您需要 HDMI 规格 1.3+ 才能支持 > 24 位颜色。 @kevinf,我目前正在开发一个可以使用它的项目。有人找到解决方案了吗? @PaulKnopf 我对这个项目进行了另一个方向。不过,我仍然希望了解更多关于视频处理路径中的 Alpha 通道的信息。 【参考方案1】:

opengl 帧缓冲区

您实际上是指 framebuffer,还是某种纹理?因为帧缓冲区无法调整大小,因此生成的图像的大小将更大像素数为 25%。你实际上不能这样做。

您可以使用纹理来做到这一点,但只能通过调整其大小来实现。您必须将带有glGetTexImage 的纹素数据放入某个缓冲区,然后使用glTexImage2D 将纹素数据上传到另一个纹理。您只需适当更改pixel transfer format 和纹理宽度即可。读取使用GL_RGBA,写入使用GL_RGB,内部格式为GL_RGB8

这个性能几乎肯定不会很好。但它应该工作

但是不,没有简单的调用可以导致这种情况发生。

【讨论】:

您好,感谢您的回复。我正在处理的场景实际上如下:我需要获取 OpenGL 生成的屏幕并通过 HDMI 将其发送到 FPGA 组件,同时保持 alpha 通道。但是现在通过 HDMI 发送的数据只有 RGB(没有 alpha 通道的 24 位)所以我需要一种方法来强制通过这个端口发送 Alpha 位。你有什么建议吗?反正有没有得到 Alpha 缓冲区(如 Stencil 缓冲区)?谢谢 @AkitoEki:如果所有这些都是相关的,你应该把它放在你的问题中。而且没有“阿尔法缓冲区”之类的东西。颜色仅由最多四个独立通道组成,其中一个是 alpha。 谢谢 Nicol,我也会用一些图片来更新我的问题。 :) 我已经完成了更新问题并解释了我想要实现的目标。 @AkitoEki,我现在正在尝试做同样的事情。我真的可以利用你的帮助/经验。你能给我发电子邮件到 theonlylawislove@gmail.com 吗?如果您有任何可以帮助我的东西,我愿意为咨询付费。你用过Qt吗?【参考方案2】:

您可以通过显卡上的不同 rgb 或 hdmi 视频输出在 opengl 中单独发送 alpha 通道。 所以你的电脑现在通过一根电缆输出 RGB,然后从另一根电缆输出 Alpha。您的 alpha 可能需要转换为灰度,以便它仍然是 24 位。 然后您选择哪个信号是您的 fpga 中的关键。 我假设你的 fpga 支持色度键。

我之前做过类似的事情,但使用了一个名为 Brainstorm 的程序,该程序使用支持 SDI 输出的特定视频卡并将 RGB 和 Alpha 拆分为单独的视频通道(电缆),然后视觉混合器进行键控.

然而,今天,我创建了一个新的解决方案,它首先在 pc 上混合多个视频通道,然后将最终混合的视频直接输出到 RTMP 流服务器或 DVI 到 SDI 扫描转换器。

【讨论】:

以上是关于通过 HDMI 保持视频的 alpha 透明度的主要内容,如果未能解决你的问题,请参考以下文章

用Premiere如何将带Alpha透明通道的视频文件压缩为同效果mp4文件

PyGame:具有每像素 alpha 的半透明精灵

使用“-ms-filter”属性时如何保持 PNG alpha 透明度

带alpha透明通道视频—网页播放带alpha通道视频叠加合成方案

透明视频,如何在每台设备上正确显示 webm 文件的 alpha 通道; VP9 还是 VP8 编码?

Unity 播放透明视频新思路