我目前正在尝试使用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色彩空间的颜色。因此,根据定义,转换是有损的。