问题描述
我希望将 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”),该脚本在去除雾霾方面做得非常出色。你的项目听起来很商业化。
© Fred Weinhaus - Fred's ImageMagick scripts
如果/当您得到一个可以执行您想要的脚本时,我建议您使用 GNU Parallel 以获得不错的性能。我还认为您可能需要考虑将 Fred 的算法移植或移植到 C++ 或 Python 以与 OpenCV 而不是 ImageMagick 一起运行。
因此,假设您有一个 24 核 MacPro 和一个名为 bash
的 ProcessOne
脚本,该脚本以 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++ 进程。