小编MoD*_*oDJ的帖子

带有 BT.709 矩阵的 H.264 编码视频是否包括任何伽马调整?

我已经多次阅读BT.709 规范,但不清楚的是,编码的 H.264 比特流是否应该将任何伽马曲线应用于编码数据?请注意 BT.709 规范中对类似伽马公式的具体提及。Apple 提供了从 CoreVideo 读取 YUV 数据的 OpenGL 或 Metal 着色器示例,提供的缓冲区不进行任何类型的伽马调整。YUV 值正在被读取和处理,就好像它们是简单的线性值一样。我还检查了 ffmpeg 的源代码,发现在 BT.709 缩放步骤之后没有应用伽马调整。然后我创建了一个测试视频只有两种线性灰度颜色 5 和 26 对应于 2% 和 10% 的级别。当使用 ffmpeg 和 iMovie 转换为 H.264 时,输出 BT.709 值是 (YCbCr) (20 128 128) 和 (38 128 128) 并且这些值与 BT.709 转换矩阵的输出完全匹配,没有任何伽马调整。

可以在Quicktime Gamma Bug 中找到有关此主题的大量背景资料。似乎 Quicktime 和 Adob​​e 编码器的一些历史问题不正确地进行不同的伽马调整,结果使视频流在不同的播放器上看起来很糟糕。这确实令人困惑,因为如果与sRGB进行比较,它清楚地表明如何应用伽马编码,然后对其进行解码以在 sRGB 和线性之间进行转换。如果在创建 h.264 数据流时在矩阵步骤之后没有应用伽马调整,为什么 BT.709 会详细介绍相同类型的伽马调整曲线?h.264 流中的所有颜色步骤是否都应编码为直线(伽马 1.0)值?

如果特定的示例输入会使事情更清楚,我附上了 3 个颜色条图像,不同颜色的确切值可以显示在带有这些图像文件的图像编辑器中。

第一个图像在 sRGB 色彩空间中,并被标记为 sRGB。

sRGB色彩空间

第二张图像已转换为线性 RGB …

video ffmpeg ios metal

7
推荐指数
1
解决办法
3227
查看次数

标签 统计

ffmpeg ×1

ios ×1

metal ×1

video ×1