如何将多个子文件夹中的RAW图像批量转换为DNG

How to batch convert RAW images in several subfolders to DNG

所以我的主文件夹中有 20 个充满文件的子文件夹,每个子文件夹中有大约 200 个文件。我一直在尝试编写一个脚本来将 每个子文件夹 中的 每张图片 转换为 DNG。 我做了一些研究,能够从当前文件夹批量转换图像。 我已经尝试开发这个想法以使其适用于子文件夹但没有成功。 这是我写的代码:

for D in 'find . -type d'; do for i in *.RW2; do sips -s format jpeg $i --out "${i%.*}.jpg"; cd ..; done; done;

最简单最快的方法是使用GNU Parallel,像这样:

find . -iname \*rw2 -print0 | parallel -0 sips -s format jpeg --out {.}.jpg {}

因为这将并行使用所有 CPU 内核。但是在你启动任何你没有测试过的命令之前,最好像这样使用 --dry-run 选项,这样它会告诉你它要做什么,但实际上什么都不做:

find . -iname \*rw2 -print0 | parallel --dry-run -0 sips -s format jpeg --out {.}.jpg {}

示例输出

sips -s format jpeg --out ./sub1/b.jpg ./sub1/b.rw2
sips -s format jpeg --out ./sub1/a.jpg ./sub1/a.RW2
sips -s format jpeg --out ./sub2/b.jpg ./sub2/b.rw2

如果您喜欢它的外观,请再次删除 --dry-run 和 运行。请注意,-iname 参数意味着它对 upper/lower 情况 不敏感 ,因此它将适用于“.RW2”和“[=73” =].rw2".


GNU Parallel 可以通过 homebrew 轻松安装在 macOS 上:

brew install parallel

它也可以在没有包管理器的情况下安装(如 homebrew),因为它实际上是一个 Perl 脚本,Mac 自带 Perl。所以你可以通过在终端中执行以下操作来安装:

(wget pi.dk/3 -qO - ||  curl pi.dk/3/) | bash

您的问题似乎很困惑,您是否想要 DNG 个文件,如您的标题所建议的那样,或者 JPEG 个文件,如您的代码所建议的那样。我的代码按原样生成 JPEG。如果你想要 DNG 输出,你需要安装 Adobe DNG Converter,然后 运行:

find . -iname \*rw2 -print0 | parallel --dry-run -0 \"/Applications/Adobe DNG Converter.app/Contents/MacOS/Adobe DNG Converter\" 

您可以在上述命令的末尾附加一些其他选项:

  • -e 嵌入 原始 RW2 文件到 DNG
  • -u 将创建未压缩的 DNG 文件
  • -fl 会将 fast load 信息添加到 DNG

DNG Converter 似乎很乐意 运行 多个并行实例,但我没有测试数千个文件。如果您 运行 遇到问题,只需 运行 一次更改为 parallel -j 1 ...

即可

Adobe DNG Converter 在 macOS 下使用 homebrew 很容易安装,如下所示:

brew install caskroom/cask/adobe-dng-converter