ImageMagick convert和GNU parallel的结合使用

9

我想加快以下命令的速度:

convert -limit memory 64 -limit map 128 -antialias -delay 1x2 final/*.png movie.mp4

我看过其他 博客文章,其中并行和转换被一起使用,因此我想知道如何使其与上述命令配合使用。

我怀疑这个程序无法轻松地使用GNU Parallel并行化,因为本质上你只有一个进程(即一个convert),而GNU Parallel擅长将多个进程分布在多个CPU核心上。你有多少个PNG文件?目前需要多长时间? - Mark Setchell
@MarkSetchell 目前处理100张10000x8000像素的图像需要一个多小时。我可能会尝试将图像降采样,看看是否能加快处理速度。 - aeupinhere
1个回答

14
如果缩小规模是一种选择,那么您可以通过GNU Parallel轻松实现这一目标。
parallel -j 8 convert {} -resize ... {} ::: *.png

{}代表文件名,要处理的文件在:::后列出。

-j表示并行运行的作业数。

我刚刚创建了100个10,000 x 8,000像素的PNG图像,并使用顺序方式在8分钟内将它们调整为2,000 x 1,200像素大小,使用:

#!/bin/bash
for f in *.png; do
    convert $f -resize 2000x1200! $f
done

然后,同样的原始图像,但采用 GNU Parallel 进行处理。

parallel convert {} -resize 2000x1200! {} ::: *.png

转化成100个PNG图像所需时间为3分40秒。随后将这些100个PNG图像制作成一部电影所需时间为52秒。


谢谢!Parallel 允许我将输出命名为与输入相同的名称吗?这个语法至少有点奇怪。 - aeupinhere
1
你有选择。你可以使用convert {} ... {}命名输出与输入相同,或者你可以使用convert {} ... {.}jpg去除和替换扩展名,例如用.jpg代替.png,或者你可以使用convert {} ... new/ {}将文件写入新的子目录中。 - Mark Setchell
使用Parallel时的性能大约是仅使用for循环的两倍。再次感谢您抽出时间为我查看此事! - aeupinhere
太好了!感谢您的反馈。 - Mark Setchell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接