我目前正试图在FFMPEG上使用H264对RGB24文件进行无损压缩。然而,在H264压缩中使用的颜色空间变换(RGB24-> YUV444)已被证明是有损的(由于量化误差我猜测)。 还有什么我可以使用(例如程序)将我的RGB24文件无损地转换为YUV,然后用无损H264压缩它们?
最终目标是压缩RGB24文件然后解压缩,解压缩文件与原始文件完全匹配。例如RGB24 - > YUV444 - >压缩的YUV44 - >解压缩YUV444 - > RGB24。
这一切都可能吗?
答案 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颜色空间中不存在的颜色。因此,根据定义,转换是有损的。