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
每月下载 71 次
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 输出一起使用,但这尚未经过充分测试。
作者,仓库等
- Brooke Vibber
<bvibber @ pobox.com>
- https://github.com/brion/hdrfix
- 许可证:MIT (包装和转换代码),BSD (jpegxr 库)
依赖项
- clap 用于 CLI 设置
- time 用于 CLI 实用程序中的速度检查
- thiserror 用于错误聚合
- rayon 用于多线程
- glam 用于向量/矩阵数学
- png 用于读取输入 PNG
- mtpng 用于写入输出 PNG
- jpegxr 用于 JPEG XR C 库(以及通过它,bindgen 和 cc)
- oklab 用于感知颜色修改
- mozjpeg 用于写入输出 JPEG
- half 用于读取 16 位浮点输入
安装
从二进制发布下载
- 从 https://github.com/brion/hdrfix/releases 下载最新版本
- 将
hdrfix.exe
和(可选)watch.bat
复制到所需的目录中 - 例如,
C:\Users\<Yourname>\Videos\Microsoft Flight Simulator
从源代码检出
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 的任何内容进行裁剪/校正,或者hable
、uncharted2
或aces
电影模式,或者reinhard
或reinhard-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