如何使用 ffplay 选择正确的色彩空间和传递函数

如何使用 ffplay 选择正确的色彩空间和传递函数

我需要使用 ffplay 播放使用 GeForce Experience 屏幕录像机录制的视频,但渲染后的视频颜色不正确。如果我使用 VLC 播放器播放,它可以正常工作,但我需要仅使用 ffplay 播放。

这是使用 VLC 播放的视频,渲染正确:
图片1

以下是编解码器信息:
图片2

以下是 ffplay 渲染视频的方式:
图片3

答案1

褪色的颜色表明存在 HDR 到 SDR 的转换问题。Color transfer function: SMPTE ST2084 (PQ)表示这是一个 HDR 文件。

VLC 可能正确检测内容和显示的类型,并因此进行正确的色调映射。

您可能需要添加一个过滤器来进行色调映射。根据为什么 ffmpeg 的“tonemap”色调映射过滤器会根据输出格式给出不同的颜色?正确的过滤器是

 -vf "zscale=transfer=linear,tonemap=hable,zscale=transfer=bt709,format=gbrp"

因此你的 ffplay 命令将变成

ffplay -i input.mkv -vf "zscale=transfer=linear,tonemap=hable,zscale=transfer=bt709,format=gbrp"

相关内容