#hdr #codec #jpegxr #jxr

app hdrfix

将 HDR 截图映射到 SDR 的工具

5 个稳定版本

1.0.7 2024年2月16日
1.0.6 2024年2月14日
1.0.5 2023年6月15日
1.0.3 2022年10月1日
1.0.1 2021年9月27日

#hdr 中排名 1

Download history 1/week @ 2024-06-03

每月下载 71

MITCC-PDDC 许可证

43KB
865

hdrfix - 将 HDR 截图映射到 SDR 的工具

这是一款我为自己使用而编写的工具,用于处理 Microsoft Flight Simulator 的 HDR (高动态范围) 截图,这些截图是通过 Nvidia 的 GeForce Experience 游戏覆盖捕获实用程序捕获的,该实用程序以 32 位浮点精度 scRGB 保存 JPEG XR,以及一个 8 位通道的 PNG,具有较低分辨率的附加信息,但使用 BT.2100 颜色空间和传输函数编码。

输出文件为常规 SDR (标准动态范围) PNG,采用标准的 sRGB 颜色空间。有几个参数可以调整转换过程。

JPEG XR 转换使用 jpegxr crate 完成,该 crate 包装了 Microsoft 的 BSD 许可证 JPEG XR 编解码器。

现在还可以与从 Windows 游戏栏保存的 16 位浮点输入以及从 Xbox 的 10 位 RGB 输出一起使用,但这尚未经过充分测试。

作者,仓库等

依赖项

  • clap 用于 CLI 设置
  • time 用于 CLI 实用程序中的速度检查
  • thiserror 用于错误聚合
  • rayon 用于多线程
  • glam 用于向量/矩阵数学
  • png 用于读取输入 PNG
  • mtpng 用于写入输出 PNG
  • jpegxr 用于 JPEG XR C 库(以及通过它,bindgen 和 cc)
  • oklab 用于感知颜色修改
  • mozjpeg 用于写入输出 JPEG
  • half 用于读取 16 位浮点输入

安装

从二进制发布下载

从源代码检出

cargo install --path=.

从 crates.io

cargo install hdrfix

用法

基本转换

hdrfix screenshot.jxr output.jpg

监视文件夹,将新添加的所有 *.jxr 文件转换为 *-sdr.jpg

hdrfix --watch=.

请注意,示例 Windows 批处理文件 watch.bat 包含了使用此模式的飞行模拟器截图设置。

交互式帮助!

hdrfix --help

可调整参数

  • --auto-exposure=N 将输入信号的百分比值平均以重新缩放输入到中性中色调。默认为 0.5,这会使输入保持不变。
  • --exposure=N 通过所需的 f 停数上下调整输入信号。默认为 0,传递原始信号。
  • --pre-levels-min 将输入亮度设置为 0 点,可以是绝对单位或百分比值 0%..100%。默认为 0
  • --pre-levels-max 将输入亮度设置为 1.0 点,可以是绝对单位或百分比值 0%..100%。如果使用色调映射,将保留较亮的颜色。默认为 1
  • --pre-gamma-N 在缩放后对输入应用指数伽玛曲线。默认为 1.0,传递原始信号。
  • --tone-map=A 设置 HDR 到 SDR 色调映射算法;选项包括 linear,它将对亮度大于 1.0 的任何内容进行裁剪/校正,或者 hableuncharted2aces 电影模式,或者 reinhardreinhard-rgb,它将 Reinhard 色调映射算法应用于亮度或单独的 RGB 颜色通道。亮度模式可以更好地保留颜色,但可能会导致需要校正的出 gamut 颜色;RGB 模式将很好地应用对较亮颜色的去饱和度,但也会稍微改变颜色和亮度。默认为 hable,与 uncharted2 相同,但具有不同的亮度/去饱和度处理以匹配 ffmpeg。
  • --hdr-max=N 为 Reinhard 色调映射算法设置最大亮度级别。较高的值将在非常亮的部分保留更多细节,但会在高光处略微降低对比度。默认为 100%,检查图像中最亮的值。较低的值会导致非常亮的细节爆炸,但稍微照亮暗区。可以是 nits 的亮度或输入数据的百分比。
  • --saturation=N 为 Reinhard 色调映射中确定去饱和度速度的系数设置。默认为 1,不进行去饱和度。
  • --post-gamma-N 在色调映射后对输出应用指数伽玛曲线。默认为 1.0,传递原始信号。
  • --color-map=A 设置色调映射后超出色域颜色的颜色映射算法。选项包括:clip,可以改变颜色和亮度;darken,可以引起相对对比度的重大变化,但精确保留颜色;或desaturate,保留亮度,但根据需要使颜色去饱和以适应色域。默认为clip
  • --post-levels-min 设置保留的最小输出亮度级别,可以是绝对值0..1单位,也可以是百分比0%..100%。较暗的颜色将在输出中变为黑色。默认为0
  • --post-levels-max 设置保留的最大输出亮度级别,可以是绝对值0..1单位,也可以是百分比0%..100%。较亮的颜色将在输出中变为白色。默认为1
  • --watch=P 监视一个文件夹路径以查找新的*.jxr文件,并将它们转换为SDR *-sdr.jpg文件。

我正在使用当前默认设置("hable"色调映射)来转换微软飞行模拟器的截图,到目前为止看起来不错。还在调整,所以可能会改变。

待办事项/路线图

确定/短期

  • 为JPEG输出添加压缩参数

可能/稍后/不急

  • 看看是否能从Vec3A而不是Vec3中获得性能提升(到目前为止测试时略慢)
  • 具有HDR和SDR并排视图的基本GUI
  • GUI滑块可调整参数
  • 拖放和打开/保存对话框支持
  • 扩展到在--watch模式下运行后处理脚本

构建

cargo build --release

需要Rust和Cargo,以及C编译器。在Windows上,安装Visual Studio Community Edition的C++开发工具或命令行构建工具。在Linux或Mac上,由于jpegxr C库代码仍在适配,可能会出现一些编译问题。

由于C代码,必须安装LLVM + Clang才能完成构建;在Windows上,可以从https://github.com/llvm/llvm-project/releases/tag/llvmorg-12.0.0或当前版本获取发布版本。在Linux或Mac上,使用系统或用户首选的包管理器。

依赖项

~45MB
~454K SLoC