如何在scRGB色彩空间中从HDR视频中获取帧?

问题描述 投票:0回答:1

我想创建一个简单的视频播放器,在HDR电视上播放HDR视频。例如,这个“LG Chess HDR”视频。它采用HEVC编码,位深为10位,像素格式为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 tv srgb hdr
1个回答
0
投票

要么我错了,要么你挖掘太多细节。据我所知,对于UHD HDR解码,过程与SDR +相同,你应该将metadata发送到TV / Monitor。

在PC的情况下,我相信你应该检查文件的UHD MetadataNVAPI Functions部分。 FP16的东西可能来自OpenGL或DirectX,可能还有游戏和渲染,所以你不应该使用这些格式(只有10 + bit yuv),除非你重新发明轮子。

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.