使用图像转换批处理操作比Gimp花费太多时间。如何在批处理模式下执行每个文件?
可以执行以下命令来转换200+图像文件。然而,转换/图像文件为所有图像创建tmp文件,然后应用您给它的任何进程,例如。旋转。
convert '*.jpg' -set filename:fn '%[basename]' -units PixelsPerInch -rotate -90 -density 300 -quality 95 -resize 28% '%[filename:fn].jpg'这意味着它可能会消耗大量内存/临时磁盘大小,而且需要花费太多的时间。现在它运行的时间超过了10+分钟,而且还没有完成。
相比之下,GIMP -in批处理模式-它使每个文件的操作(旋转,完成,下一步,旋转,完成,下一个等等),它需要更少的时间(2-3分钟)。
我认为GIMP使用imagemagick转换。
如何在linux终端中运行转换(批处理模式),并对每个文件进行操作而不是对所有文件进行操作?

发布于 2022-09-08 16:54:20
通过试验和寻找其他例子,
我发现这个imagemagick命令在每个文件上操作,而不是在所有文件上的同一时间操作:
for pic in *.jpg; do convert -units PixelsPerInch -rotate -90 -density 300 -quality 95 -resize 28% "$pic" "$pic";done注意:如果你不想取代原来的照片,最后的"$pic“可能会被操纵。例如:"$pic" "${pic//}_copy.jpg"
发布于 2022-09-09 04:02:27
您还可以使用平行循环您的文件,例如:
parallel \
convert {} -resize 28% -rotate -90 -quality 95 copy_{} \
::: *.jpg(你不需要密度,旋转前收缩的速度更快)
它将并行运行转换命令。默认情况下,它将使用尽可能多的进程,就像您有内核一样。在启动命令时,{}被替换为文件名。你应该得到一个不错的加速。
我尝试了一个10,000×10,000像素jpeg的快速基准测试:
$ for i in {1..200}; do cp ~/wtc.jpg $i.jpg; done
$ /usr/bin/time -f %M:%e parallel convert {} -resize 28% -rotate -90 -quality 95 copy_{} ::: *.jpg
962788:31.87因此,200个文件在32s中旋转和调整大小,峰值时转换需要1gb左右的内存。
https://stackoverflow.com/questions/73652424
复制相似问题