无损RGB24到YUV444转换

时间:2014-03-19 05:22:18

标签: ffmpeg h.264 yuv color-space

我目前正试图在FFMPEG上使用H264对RGB24文件进行无损压缩。然而,在H264压缩中使用的颜色空间变换(RGB24-> YUV444)已被证明是有损的(由于量化误差我猜测)。 还有什么我可以使用(例如程序)将我的RGB24文件无损地转换为YUV,然后用无损H264压缩它们?

最终目标是压缩RGB24文件然后解压缩,解压缩文件与原始文件完全匹配。例如RGB24 - > YUV444 - >压缩的YUV44 - >解压缩YUV444 - > RGB24。

这一切都可能吗?

1 个答案:

答案 0 :(得分:2)

这是我在这里的答案的复制/粘贴: RGB-frame encoding - FFmpeg/libav

让我们看看颜色空间转换。

void YUVfromRGB(double& Y, double& U, double& V, const double R, const double G, const double B)
{
    Y =  0.257 * R + 0.504 * G + 0.098 * B +  16;
    U = -0.148 * R - 0.291 * G + 0.439 * B + 128;
    V =  0.439 * R - 0.368 * G - 0.071 * B + 128;
}

插入一些虚拟值:

R = 255, G = 255, B = 255
Y = 235

R = 0, G = 0, B = 0
Y = 16

如您所见,范围0 - > 255被压缩到16 - > 235.因此,我们已经证明RGB颜色空间中存在一些在(数字)YUV颜色空间中不存在的颜色。因此,根据定义,转换是有损的。