FFMPEG 4k HDR 到 1080p SDR 硬件色调图转换 (OpenCL)

Ale*_*lex 3 ffmpeg hdr opencl nvidia-graphics-card

在互联网上搜索后,我终于成功编译了启用 OpenCL 的 FFMPEG,这使我能够使用 NVIDIA P400(应用了流限制补丁)尝试HDR -> SDR 转换。

\n\n

这在很大程度上归功于\xe6\x9e\x97\xe6\xad\xa3\xe6\xb5\xa9的各种详细指南/解释。不幸的是,我对这些命令没有太多的了解,并且我或多或少地复制了各种不同的命令来尝试实现我想要的!

\n\n

我的问题是硬件色调映射似乎并不比软件色调映射快

\n\n

以下实现了大约 0.4 倍的速度:

\n\n
ffmpeg -hwaccel nvdec -init_hw_device opencl=ocl -filter_hw_device ocl -threads 4 -extra_hw_frames 3 -I INPUT.mkv -vf "format=p010,hwupload,tonemap_opencl=t=bt709:r=tv:p=bt709:m=bt709:tonemap=hable:format=p010,hwdownload,format=p010" OUTPUT\n
Run Code Online (Sandbox Code Playgroud)\n\n

我之前使用软件尝试过的命令达到了类似的 0.6x - 0.4x:

\n\n
ffmpeg -I INPUT.mkv -vf zscale=t=linear:npl=100,format=gbrpf32le,zscale=p=bt709,tonemap=tonemap=hable:desat=0,zscale=t=bt709:m=bt709:r=tv,format=yuv420p -c:a copy -max_muxing_queue_size 9999 /dev/shm/output.mkv\n
Run Code Online (Sandbox Code Playgroud)\n\n

我知道它们是相当不同的命令,但就像我说的;从各种示例中剪切和粘贴。

\n\n

我的问题是硬件加速色调映射 HDR -> SDR 最有效的命令是什么,并且理想情况下从 4k 降级到 1080p?(我的学习还没有那么深入)

\n\n

我希望人们能够看到我已经调查过这个问题,而不仅仅是寻求帮助;我尝试过但未能找到答案!

\n\n

先感谢您

\n

Ale*_*lex 5

我设法在质量和速度之间找到了一个很好的折衷方案;对我来说,结果令人满意:FHD SDR 色调映射输出。

对于其他任何人;这是我决定继续使用的命令:

ffmpeg -vsync 0 -hwaccel cuda -init_hw_device opencl=ocl -filter_hw_device ocl -extra_hw_frames 3 -threads 16 -c:v hevc_cuvid -resize 1920x1080 -i INPUT -vf "format=p010,hwupload,tonemap_opencl=tonemap=mobius:param=0.01:desat=0:r=tv:p=bt709:t=bt709:m=bt709:format=nv12,hwdownload,format=nv12" -c:a copy -c:s copy -c:v libx264 -max_muxing_queue_size 9999 OUTPUT
Run Code Online (Sandbox Code Playgroud)

这在 67 分 27 秒内完成了 4K UHD Dsic Rip MKV 的转换,而文件运行时间为 2 小时 01 分 49 秒,平均转换率为 1.8 倍。

请注意,我决定使用软件编码,因为质量显着提高,但编码时间增加最少。