使用 hevc_videotoolbox 将 ProRes HDR 10 位转换为 SDR 时如何保留对比度/高光?

使用 hevc_videotoolbox 将 ProRes HDR 10 位转换为 SDR 时如何保留对比度/高光?

我正在尝试将 4K HDR 10 位视频片段转换为 BT.709,尽可能多地保留颜色,同时允许在不支持 HDR 的地方播放该片段。

使用下面的命令,输出结果对大多数人来说一般都可接受,但我的目标是让它尽可能接近原始结果。目前,颜色显示

我当前的命令:

ffmpeg -i input.mov \
-c:v hevc_videotoolbox \
-q:v 72 \
-profile:v main10 \
-g 1 \
-tag:v hvc1 \
-vf "zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=pc,format=yuv420p10le" \
-map 0:v -map 0:a \
output.mp4

请注意,由于其硬件加速,我目前正在使用hevc_videotoolboxover 。我在配备 M1 Pro 的 2021 MacBook Pro 上进行编码,因此前者的编码速度比标准 x265 库快 30 倍左右。libx265

我尝试过以下解决方案:

  • 添加libplacebo=contrast_recovery=0.4到过滤器数组的末尾-vf;我认为它没有做任何事情。
  • 附加eq=gamma=1.1到滤镜阵列的开头-vf;增加了伽马值,但看起来太亮了,如果这有意义的话。回想起来,我可能把伽马滤镜设置得太高了。
  • tonemap=hable与之交换后tonemap=mobius;看上去更糟。

这是我的输入文件的相关媒体信息:

Format                                   : ProRes
Format version                           : Version 0
Format profile                           : 422 HQ
Codec ID                                 : apch
Duration                                 : 3 min 35 s
Bit rate mode                            : Variable
Bit rate                                 : 417 Mb/s
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:2
Scan type                                : Progressive
Frame rate mode                          : Constant
Frame rate                               : 23.976 (24000/1001) FPS
Color space                              : YUV
Chroma subsampling                       : 4:2:2
Scan type                                : Progressive
Color primaries                          : BT.2020
Transfer characteristics                 : PQ
Matrix coefficients                      : BT.2020 non-constant

这是一个图片专辑我比较了缩小范围的 4 个编码,其中 1 个 png 包含 4 个屏幕截图,这些屏幕截图以 2x2 网格平铺。我还将它们分别上传到图像比较网站,您可以点击此处查看,您可以通过点击来循环浏览每个屏幕截图。

我是否应该在过滤或整体命令中做一些不同的事情,或者这是我能做到的最接近的事情?从 BT.2020 编码时,有没有更好的方法来保留色彩鲜艳度?我知道我无法做到完美复制 HDR 的色彩鲜艳度,但我希望尽可能接近(同时也在学习有关编码的更多知识,但我对 ffmpeg 及其使用的库还不太熟悉。)

任何指导都将不胜感激。

相关内容