【发布时间】: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