将 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 Parallel 和 ImageMagick:
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.
根据文件的实际布局方式,使用 ImageMagick 的 mogrify
命令并获取 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 {}
我正在考虑将 5 个 Mio tiff 文件(在文件夹子文件夹和子子文件夹中)转换为 5 个 Mio png 文件(同一目录)的最佳和最快方法。 有什么方法可以并行化这项工作吗?
我如何检查所有文件是否都已转换?
ls *.tif | wc -l # compared to
ls *.png | wc -l
但对于每个文件夹。 谢谢。 马可
你的问题在细节上非常模糊,但你可以像这样使用 GNU Parallel 和 ImageMagick:
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.
根据文件的实际布局方式,使用 ImageMagick 的 mogrify
命令并获取 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 {}