将 5 Mio tiff 文件转换为 png

Convert 5 Mio tiff Files in png

我正在考虑将 5 个 Mio tiff 文件(在文件夹子文件夹和子子文件夹中)转换为 5 个 Mio png 文件(同一目录)的最佳和最快方法。 有什么方法可以并行化这项工作吗?

我如何检查所有文件是否都已转换?

ls *.tif | wc -l # compared to 
ls *.png | wc -l

但对于每个文件夹。 谢谢。 马可

你的问题在细节上非常模糊,但你可以像这样使用 GNU ParallelImageMagick:

find STARTDIRECTORY -iname "*.tif" -print0 | parallel -0 --dry-run magick {} {.}.png

如果看起来正确,我会在一个临时位置复制一些文件,然后通过删除 --dry-run 来真正尝试。如果没问题,你也可以添加--bar作为进度条。

一般来说,GNU Parallel 将保留 N 个作业 运行,其中 N 是 CPU 个核心的数量你有。您可以使用 -j 参数更改它。

您可以将 GNU Parallel 设置为在失败、成功、多次失败或当前 运行 作业完成等情况下停止。通常,如果任何文件无法转换,您将收到一条错误消息,但您的工作将继续进行直至完成。 运行 man parallel 并搜索 --halt 选项。


请注意,上面为每个图像启动了一个新的 ImageMagick 进程,这不是最有效的,尽管它在具有良好 CPU 的像样的机器上会相当快、磁盘子系统和 RAM。如果您想尝试,可以考虑使用不同的工具,例如 vips - 有一些想法和基准 here.

根据文件的实际布局方式,使用 ImageMagickmogrify 命令并获取 GNU Parallel[ 可能会更好=51=] 在最大命令行长度允许的情况下将尽可能多的文件传递给每次调用。所以,例如,如果你有一个完整的 TIFF 目录,你想将其制作成 PNG,你可以像这样用一个 mogrify 来做到这一点:

magick mogrify -format PNG *.tif

您可以将该命令与 find 配对以查找类似这样的目录:

find STARTDIRECTORY -type d -print0 | parallel -0 'cd {} && magick mogrify -format PNG *.tif`

或者你可以找到 TIFF 文件并尽可能多地传递给每个 mogrify 像这样的东西:

find STARTDIRECTORY -iname "*.tif" -print0 | parallel -0 -X magick mogrify -format PNG {}