Image processing 使用ImageMagick将有限范围YUV转换为sRGB
我正在尝试使用ImageMagick将一组原始视频帧从YUV444转换为sRGB 输入格式:原始YUV444有限范围,平面数据顺序为BT.709。Image processing 使用ImageMagick将有限范围YUV转换为sRGB,image-processing,ffmpeg,imagemagick,rgb,yuv,Image Processing,Ffmpeg,Imagemagick,Rgb,Yuv,我正在尝试使用ImageMagick将一组原始视频帧从YUV444转换为sRGB 输入格式:原始YUV444有限范围,平面数据顺序为BT.709。 所需输出格式:sRGB(PNG图像集) 主要问题:ImageMagick转换始终适用 关于“有限范围”YUV格式的备注: 在8位有限范围YUV格式中,Y的范围为[16235],U的范围为[16240]。(有限范围BT.709用于HTDV系统)。 JPEG使用“全范围”YUV格式,其中Y、U、V范围为[0255]。 sRGB用于PC系统,R、G、B的
所需输出格式:sRGB(PNG图像集) 主要问题:ImageMagick转换始终适用
- 关于“有限范围”YUV格式的备注:
在8位有限范围YUV格式中,Y的范围为[16235],U的范围为[16240]。(有限范围BT.709用于HTDV系统)。
JPEG使用“全范围”YUV格式,其中Y、U、V范围为[0255]。
sRGB用于PC系统,R、G、B的范围为全范围[0255]。
YUV和YCbCr是可互换的
- sRGB格式的示例图像(
):rgb_input.png
ffmpeg-y-colorspace bt709-i rgb_input.png-pix_fmt yuv444p yuv_input.yuv
下图说明了YUV444输出(按平面数据顺序):
- YUV444格式的ImageMagick输入图像(
平面数据顺序图示):yuv\u Input.yuv
yuv\u input.yuv
转换为PNG:magick-深度8-交错平面-尺寸128x96-颜色空间Rec709YCbCr-采样因子4:4:4 yuv:yuv_输入.yuv rgb_输出_magick.png
- ImageMagick(
)的结果:rgb\u输出\u magick.png
如果仔细观察,您会发现图像与
不同李>rgb_input.png
FFmpeg
进行相同的转换(用作参考):ffmpeg-y-s 128x96-色彩空间bt709-pix_fmt yuv444p-i yuv_input.yuv-pix_fmt rgb24 rgb_output_ffmpeg.png
- FFmpeg(
)的结果:rgb\u输出\u FFmpeg.png
注意:原始输入视频帧的真实格式阻止我使用FFmpeg李>
R=1.1644*Y+0.00000*U+1.79270*V-248.10
G=1.1644*Y-0.21325*U-0.53291*V+76.878
B=1.1644*Y+2.11240*U+0.00000*V-289.02
如何使用ImageMagick转换器进行上述转换 根据您的要求,这将是用于变换的ImageMagick颜色矩阵命令,假设它有意义。ImageMagick颜色矩阵值规格化为0到1的范围,包括偏移(最右边)项。我假设偏移量在0到255(8位)之间。所以我不确定这是否有意义。然而,这是它的样子
magick input -color-matrix \
"1.1644 0.00000 1.79270 0, 0, -0.9729 \
1.1644 -0.21325 -0.53291 0, 0, 0.30148 \
1.1644 2.11240 0.00000 0, 0, -1.1334 \
0 0 0 1, 0, 0 \
0 0 0 0, 1, 0 \
0 0 0 0, 0, 1" output
请参见可能使用-color矩阵代替-colorspace Rec709YCbCr。看见然后你可以使用你的转换系数。您不需要填写所有额外的行和列。只需将系数用作3x3矩阵即可。另外,为什么要使用-colorspace Rec709YCbCr。你不应该仅仅使用-colorspace-YUV吗?我认为它应该在你阅读原始图像之后出现,而不是之前?参见
颜色矩阵
语法有一个疯狂的语法。我想我确实需要使用6x6矩阵,因为有3个偏移。将-colorspace Rec709YCbCr
放在后面会产生非常小的差异(2个灰度级),-colorspace YUV
与-colorspace Rec709YCbCr
相差1个灰度级。看起来仍然像JPEG转换公式。您(或任何人)可以使用-color matrix
发布答案吗?我想我能想出如何使用它,但我更愿意接受答案。我试图复制你的命令。ffmpeg命令似乎正常工作,但您的ImageMagick命令失败,错误为magick:文件'yuv_input.yuv'的意外结尾:没有这样的文件或目录
。所以我不确定这是IM还是ffmpeg的问题。我正在Mac OSX Sierra上使用IM7.0.8.51。为什么在ffmpeg命令中使用bt709而不是yuv444,在IM命令中使用-colorspace YUV?也许你能看到。注意:我不是ffmpeg或raw格式的专家。我使用的是Windows 10,但我不认为这是操作系统的问题。我下载的版本是ImageMagick-7.0.8-52-Q8-x64-static.exe
。关于使用bt709:-采样因子4:4:4 yuv:yuv\u输入。yuv
应用yuv444。我只能猜测,Rec709YCbCr
标志设计用于将RGB转换为YUV,而不是从YUV转换为RGB。您忘记了几个减号。。。你能发布完整的命令吗?使用-color matrix
,我得到了两个具有奇怪颜色的输出图像(rgb\u output\u magick-0.png
和rgb\u output\u magick-1.png
)。谢谢。对不起,我复制了你的3行,然后试图删除多余的部分以获得矩阵项,但无意中删除了减号。我已经在上面修复了它,但仍然不知道这是否与您想要做或更正的内容相关。应该没有理由获得两个输出图像-0和-1,除非复制错误。只需一个输入,它就可以很好地为我工作。除了一些PNG或JPG输入和PNG或JPG输出之外,请尝试不包含其他命令。这会产生多个输出结果吗?如果是这样,发布你的全部命令。在“窗口语法”中,将第\行的结尾改为“^I”以解决问题。我必须使用:rgb:yuv\u input.yuv
(-color matrix
与rgb输入一起工作,并使用yuv输入给出奇怪的结果)。完整的命令是:magick-interlace plane-size 128x96 rgb:yuv\u input.yuv-color matrix“1.1644 0.0 1.79270 0.0,0.0,-0.97294 1.1644-0.21325-0.53291 0.0,0.0,0.30148 1.1644 2.11240 0.0 0 0.0,0.0,0.0,-1.133400.0.0 0.0 0.0 1.0,0.0,0.0.0,0.0.0.0”rgb_输出0 0 0.0 0 0 0 0.0.0,0.0.0.0.0.0.0.0,0.0.0.0.0.0.0.0.0.0