无损RGB24到YUV444的转换



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

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

这有可能吗?

这是我在这里的回答的复制/粘贴:rgb帧编码- 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色彩空间的颜色。因此,根据定义,转换是有损的。

最新更新