我有一个应用程序可以生成一堆我需要转换成 webm 视频的 jpg。我正在尝试将我的 rgb 数据从 jpeg 中获取到 vpxenc 示例中。我可以在输出视频中看到原始 jpg 的基本形状,但一切都染成绿色(即使应该是黑色的像素也大约是绿色的一半),并且每条其他扫描线都有一些垃圾。
我正在尝试为其提供 VPX_IMG_FMT_YV12 数据,我假设其结构如下:
每帧 8 位 Y 数据 每个 2x2 V 块的 8 位平均值 每个 2x2 U 块的 8 位平均值
这是源图像和即将发布的视频的屏幕截图:
我完全有可能错误地进行 RGB->YV12 转换,但即使我只编码 8 位 Y 数据并将 U 和 V 块设置为 0,视频看起来也差不多。我基本上是通过这个等式运行我的 RGB 数据:
// (R, G, and B are 0-255)
float y = 0.299f*R + 0.587f*G + 0.114f*B;
float v = (R-y)*0.713f;
float u = (B-v)*0.565f;
.. 然后为了生成我写入 vpxenc 的 U 和 V 的 2x2 过滤值,我只需执行 (a + b + c + d) / 4,其中 a,b,c,d 是 U 或 V 值每个 2x2 像素块。
所以我想知道:
有没有更简单的方法(在代码中)获取 RGB 数据并将其提供给 vpx_codec_encode 以获得漂亮的 webm 视频?
我的 RGB->YV12 转换是否有问题?
任何帮助将不胜感激。