Ffmpeg 无损RGB24到YUV444转换

Ffmpeg 无损RGB24到YUV444转换,ffmpeg,h.264,yuv,color-space,Ffmpeg,H.264,Yuv,Color Space,我目前正在尝试使用FFMPEG上的H264对RGB24文件进行无损压缩。然而,H264压缩(RGB24->YUV444)中使用的颜色空间变换被证明是有损的(我猜是由于量化错误)。 在使用无损H264压缩RGB24文件之前,我还可以使用其他方法(如程序)将RGB24文件无损转换为YUV吗 最终目标是压缩RGB24文件,然后对其进行解压缩,解压缩后的文件与原始文件完全匹配。例如RGB24->YUV444->压缩YUV44->解压缩YUV444->RGB24 这可能吗?这是我的答案的复制/粘贴: 让

我目前正在尝试使用FFMPEG上的H264对RGB24文件进行无损压缩。然而,H264压缩(RGB24->YUV444)中使用的颜色空间变换被证明是有损的(我猜是由于量化错误)。 在使用无损H264压缩RGB24文件之前,我还可以使用其他方法(如程序)将RGB24文件无损转换为YUV吗

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


这可能吗?

这是我的答案的复制/粘贴:

让我们看一下颜色空间转换

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颜色空间中不存在的颜色。因此,根据定义,转换是有损的。

如果您想保持在RGB范围内,编码器
libx264rgb
可能很有用。这是一个好主意!我不知道ffmpeg有这个选择。谢谢你!我明白你的意思,我认为JPEG2000使用了YUV颜色空间,但它是完全可逆的,因此我认为可能有一种方法。谢谢你澄清。我这里使用的系数来自ITU-R BT.601标准。HDTV使用ITU-R BT.709。JPEG使用的是ITU-R BT.2020,我认为它是无损的(但我从未做过所有的计算来证实)。您可以尝试在x264中使用ITU-R BT.2020。我不确定会发生什么。总有一天我要测试一下:)好的,谢谢你的帮助!总有一天我会试试的,但现在有人建议只使用libx264rgb编码器,它在RGB颜色空间中编码,使它非常适合我。我的下一个任务是研究如何在C++中使用LIX264RGB。