我有一个应用程序,可以生成一堆jpg文件,我需要将它们转换成webm视频。我正在尝试从JPEG文件中获取RGB数据并将其输入到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是每个2x2像素块的U或V值。
所以我想知道:
有没有更简单的方法(在代码中)将RGB数据输入到vpx_codec_encode中,以获得漂亮的webm视频?
我的RGB->YV12转换有问题吗?
任何帮助都将不胜感激。