使用命令行中的原始图像设置将 Sony 原始“.ARW”图像文件批量转换为 .jpg

问题描述

我希望将 1500 万 12.8 mb Sony .ARW 文件转换为 .jpg

我已经想出了如何在命令行上使用 sips 来做到这一点,但我需要的是对原始图像设置进行调整:对比度、高光、黑色、饱和度、鲜艳度,以及最重要的去雾。我会对每张照片应用相同的设置。

如果我可以对如何合并 Dehaze 进行调整,ImageMagick 似乎应该可以工作,但我似乎无法让 ImageMagick 工作。

我已经对 Lightroom Classic / Photoshop / Bridge / RAW Power / 和其他一些程序进行了基准测试。到目前为止,Raw Power 是最快的(在 M1 Mac Mini 16GB Ram 上),但 Raw Power 不允许我一次处理多个文件夹。

我用 photoshop 编写了很多脚本/动作 - 但在这种情况下,photoshop 是迄今为止最慢的选择。我相信这是因为它会打开每张照片。

解决方法

这是 200TB 的输入图像,甚至没有为输出图像提供任何存储空间。这也是每天 24 小时处理的 173 天,假设您每秒可以处理 1 张图像 - 我对此表示怀疑。

您可能想与 Fred Weinhaus @fmw42 谈谈他的 Retinex 脚本(在该页面上搜索 “hazy”),该脚本在去除雾霾方面做得非常出色。你的项目听起来很商业化。

enter image description here

© Fred Weinhaus - Fred's ImageMagick scripts

如果/当您得到一个可以执行您想要的脚本时,我建议您使用 GNU Parallel 以获得不错的性能。我还认为您可能需要考虑将 Fred 的算法移植或移植到 C++ 或 Python 以与 OpenCV 而不是 ImageMagick 一起运行。

因此,假设您有一个 24 核 MacPro 和一个名为 bashProcessOne 脚本,该脚本以 Sony ARW 图像的名称作为参数,您可以运行:>

find . -iname \*.arw -print0 | parallel --progress -0 ProcessOne {}

这将在当前目录中递归查找所有 Sony ARW 文件并将它们传递到 GNU Parallel,然后让所有 24 核保持忙碌,直到全部完成。您可以同时指定更少或更多的作业,例如 parallel -j 8 ...

注意 1:您还可以列出网络中其他服务器的名称,这也会在它们之间分散负载。 GNU Parallel 能够将图像与作业一起传输到远程服务器,但我不得不质疑为这项任务这样做是否有意义 - 您可能想要放置一个子集每个服务器上的映像都有自己的本地磁盘 I/O,并且自己独立运行服务器,而不是从全球的单个点分发。

注意 2:您需要对磁盘进行良好配置,以处理多个并行 I/O 流。

注意 3:如果您确实编写了处理图像的脚本,请将其编写为接受多个文件名作为参数,然后您可以运行 {{1}并且它会传递与您的 parallel -X 参数 sysctl 允许的一样多的文件名。这样一来,您就不需要每个图像的整个 kern.argmax 或 OpenCV C/C++ 进程。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...