![不同程序的视频颜色不同。哪一个是正确的?](https://linux22.com/image/1440512/%E4%B8%8D%E5%90%8C%E7%A8%8B%E5%BA%8F%E7%9A%84%E8%A7%86%E9%A2%91%E9%A2%9C%E8%89%B2%E4%B8%8D%E5%90%8C%E3%80%82%E5%93%AA%E4%B8%80%E4%B8%AA%E6%98%AF%E6%AD%A3%E7%A1%AE%E7%9A%84%EF%BC%9F.png)
Reddit 上有人制作了一个 gif。
我决定尝试重新制作这个 gif。
我的 gif 与他们的 gif 颜色不一样。
我在 VLC 和 MPC-HC 中打开了 gif 的视频源,使用程序菜单拍摄快照,使用 PrtSc 截取屏幕截图,然后使用 ffmpeg 导出帧(来自 gif 和视频):
ffmpeg
VLC 快照
VLC 截图
动态图
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 匹配帧的不同之处。