不同程序的视频颜色不同。哪一个是正确的?

不同程序的视频颜色不同。哪一个是正确的?

Reddit 上有人制作了一个 gif。
我决定尝试重新制作这个 gif。
我的 gif 与他们的 gif 颜色不一样。

我在 VLC 和 MPC-HC 中打开了 gif 的视频源,使用程序菜单拍摄快照,使用 PrtSc 截取屏幕截图,然后使用 ffmpeg 导出帧(来自 gif 和视频):
ffmpegffmpeg VLC 快照VLC 快照 VLC 截图VLC 截图 动态图动态图 MPC 快照MPC 快照 MPC 截图MPC 截图

视频中的 ffmpeg 图像与 VLC 的快照匹配,但与 VLC 的屏幕截图不匹配(除非禁用“使用硬件 YUV->RGB 转换”)。VLC 的屏幕截图似乎与 gif 中的帧最接近。MPC 的快照和屏幕截图几乎相同,但它们与其他图像不匹配(尽管它们更接近 gif 而不是 VLC 的快照)。

我倾向于信任 ffmpeg 而不是视频播放器,但它们都不太接近——除了 VLC 禁用了“使用硬件 YUV->RGB 转换”。我相信 VLC 使用 ffmpeg,所以这可以解释为什么 VLC 的快照与 ffmpeg 的帧导出相匹配。我猜 MPC 也使用“使用硬件 YUV->RGB 转换”,但我找不到更改此设置的设置。

ffmpeg 提取帧的方式有误,还是“使用硬件 YUV->RGB 转换”有误?还是其他原因?

 

(视频为物语第二季第13集22:57)

答案1

发生这种情况的原因可能是每个视频播放器处理色彩管理、解码算法或渲染过程的方式不同。

了解视频的属性会很有帮助,了解您的计算机规格也是如此。您使用的是什么 GPU?您是否使用硬件加速解码?

与此同时,您可以尝试以下操作:

  • 在所有视频播放器上标准化颜色设置,以确保输出一致。我建议确保视频与您的硬件兼容;色彩空间除非专门播放 HDR 内容,否则 BT.709 或 BT.2020 将是​​最安全的选择。
  • 使用具有高级色彩管理功能或选项的视频播放器来校准色彩输出,例如多功能车
  • 验证视频文件是否使用标准色彩空间进行编码,例如标准 1080p 的 BT.709 或超高清内容的 BT.2020。您可以使用媒体信息或使用以下方法ffprobe命令: ffprobe -v error -select_streams v:0 -show_entries stream=color_space input.mp4
  • 更新 GPU 驱动程序并确保硬件加速功能正常运行。
  • 尝试不同的视频播放器和设置,找到最符合视频内容预期颜色的组合。如果 VLC 不理想,请查看多功能车或者POT 播放器

答案2

这是一个老问题,但我想我可以提供一个令人满意的答案:

我怀疑这两幅图都不是“正确的”,因为实际上没有客观“正确”的图像。毕竟,GIF 格式仅允许最多 256 种不同的颜色,因此不同的转换器可能会选择保留和组合不同的颜色。我假设源视频使用的颜色超过 256 种。

我无法完全验证这一点,因为我没有原始文件,但验证这一点的一种方法是在 VLC 中拍摄快照(Windows 上的默认热键是Shift+ S),然后比较颜色与 GIF 匹配帧的不同之处。

相关内容