【问题标题】:How to get frames from HDR video in scRGB color space?如何从 scRGB 颜色空间中的 HDR 视频中获取帧?
【发布时间】:2018-08-11 11:26:30
【问题描述】:

我想创建一个简单的视频播放器,可以在 HDR 电视上显示 HDR 视频。例如,这个“LG Chess HDR”视频。采用HEVC编码,位深10bit,像素格式YUV420P10LE,具有BT2020色彩空间元数据和PQ传递函数。

this NVIDIA article我找到了下一个:

显示驱动程序获取 scRGB 后台缓冲区,并将其转换为 当前连接的显示器所期望的标准。一般来说,这 意味着将颜色空间从 sRGB 原色转换为 BT。 2020 初选,缩放到适当的级别,并使用 像PQ这样的机制。此外,可能执行 RGB 到 如果显示连接需要 YCC。

这意味着我的播放器应该在scRGB color space 中渲染像素(线性编码,sRGB 原色,全范围是 -0.5 到刚好小于 +7.5)。所以我需要以某种方式从这个颜色空间中的源视频中获取帧,最好是 FP16 像素格式(半浮点,每个颜色通道 16 位)。我来到以下简单的管道将视频渲染为 HDR:

source HDR video in BT2020 color space with applied PQ -> [some video library] -> 
-> video frames with colors in scRGB color space -> [my program] ->
-> rendered video on HDR TV with applied conversions by display driver

我正在尝试使用 FFmpeg 作为这个库,但不明白如何从 scRGB 颜色空间中的源 HDR 视频中获取帧

我现在使用sws_scale FFmpeg 方法来获取帧并了解过滤器API。但是我没有找到任何信息和帮助,说明如何使用这些功能透明地获取 scRGB 中的帧,而无需解析所有源视频的元数据并为它们创建自定义视频过滤器。

请告诉我如何使用 FFmpeg 在 scRGB 颜色空间中获取帧。有人可以告诉我可以使用的其他库吗?

【问题讨论】:

    标签: video ffmpeg television srgb hdr


    【解决方案1】:

    要么我弄错了,要么你深入研究了太多细节。据我所知,对于 UHD HDR 解码,过程与 SDR 相同 + 您应该将 metadata 发送到电视/显示器。

    如果是 PC,我相信您应该检查文档的 UHD MetadataNVAPI Functions 部分。 FP16 的东西可能来自 OpenGL 或 DirectX,可能与游戏和渲染有关,所以除非你重新发明轮子,否则你永远不应该使用这些格式(只有 10+bit yuv)。

    希望对您有所帮助。

    【讨论】:

    • 谢谢你的回答,kamilz。我通过 HDMI 将 HDR 电视连接到我的电脑。我使用带有元数据参数的 NVAPI 函数在 HDR 电视上启用 HDR。然后,如果我在 HDR 电视显示器上的 VLC 播放器中打开源 10 位 HDR 视频,我会看到 HDR 视频。我想让我自己的球员首先做到这一点。我可以读取视频帧并将它们解码为 UC16 或 FP32,然后我可以将它们转换为 FP16,但我不明白我应该为这些帧应用哪种颜色矩阵/传输函数来实现 scRGB 色彩空间。
    • 好的,我假设您已经检查过 VLC 源代码并且您是否也检查过这个项目?:github.com/mpv-player/mpv/blob/…
    • 是的,我查了,但不明白如何实现scRGB色彩空间。
    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 2016-02-13
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多