我正在尝试将未压缩的8位RGB转换为mpeg2 mxf文件(xdcam 422 HD 1080 50i),即YUV422。通过FFMpeg文档和各种网站的信息,我发出了以下命令:
./ffmpeg -y -i test_lines.mov -pix_fmt yuv422p -vcodec mpeg2video -non_linear_quant 1 -flags +ildct+ilme -top 1 -dc 10 -intra_vlc 1 -qmax 2 -vtag xd5c -rc_max_vbv_use 1 -rc_min_vbv_use 1 -g 12 -b:v 50000k -minrate 50000k -maxrate 50000k -bufsize 8000k -acodec pcm_s24le -ar 48000 -bf 2 -ac 2 lines_HD.mxf
这给了我一个颜色比原始颜色更明亮的结果。
所以我尝试添加选项-color_range 1 -colorspace 1 -color_primaries 1 -color_trc 1
,但这似乎没有做任何事情。
添加colormatrix=bt601:bt709
之后,我得到了更好的图像,但是比原始图像稍暗,并且指定此选项也感觉很奇怪,因为源也在REC709颜色空间中,所以为什么要以不同的方式指定它?
接下来,我将我的源图像重新生成为YUV编解码器(prores)并在其上重新运行FFMpeg,颜色很好。因此我认为它必须是RGB - > YUV问题。 有人知道如何正确吗?如果有人感兴趣的话,我可以在我回到办公室后立即在视频内窥镜上提供不同结果的截图。
最后,我知道有很多主题可以触及这个主题,但要么是明智的话,请将我带到我已经到过的舞台上。
答案 0 :(得分:1)
没有看到图像,所以不知道它有多大的偏差,但我希望你确实意识到从未压缩的RGB到YUV422未压缩是不可逆转和有损的。 422p意味着色度分量的子采样。从未压缩到MPEG2也是额外的量化,即使你的quant参数是2,也是有损的。
我的建议首先编码为YUV422 y4m。确保您对此感到满意。然后将输出编解码器更改为mpeg2。这样,首先确保您的颜色转换准确。然后MPEG2会在它上面添加自己的损失。
旧但相关的主题: https://lists.ffmpeg.org/pipermail/ffmpeg-user/2012-July/007833.html
忘记提及你必须添加colormatrix选项。那是对的。以上链接应该有希望解释