`magick` 可以将输出文件重命名为与输入文件相同的文件并附加编号吗?

`magick` 可以将输出文件重命名为与输入文件相同的文件并附加编号吗?

假设在一个文件夹中,我有dog.jpgfish.jpg。我想将它们的大小调整 50%,并使用相同的名称保存它们,但使用数字索引。我如何使用magick(允许我稍后进行管道传输)来做到这一点?我尝试了以下方法,但似乎不起作用:

magick '*.jpg' -set filename:base "%[basename]"  -resize 50% '%[filename:base]_%02d.jpg'

它按照需要生成了dog_%02d.jpg和,fish_%02d.jpg而不是dog_01.jpgfish_02.jpg

答案1

我仔细阅读了IM 百分比转义也可以看看) 和IM 序列帧编号并没有看到任何表明这一点的东西,但我的实验似乎表明,printf 样式的序列帧号转义(例如%02d)只能在传递输出文件参数而没有其他百分比转义时使用:

[gnubeard@mothership: ~]$ convert *.jpg 'image_%02d.jpg'
[gnubeard@mothership: ~]$ ls *.jpg
dog.jpg  fish.jpg  image_00.jpg  image_01.jpg

对阵

[gnubeard@mothership: ~]$ convert '*.jpg' -set filename:f "%t"  -resize 50% '%[filename:f]_%02d.jpg'
[gnubeard@mothership: ~]$ ls *.jpg
dog_%02d.jpg.jpg  dog.jpg  fish_%02d.jpg.jpg  fish.jpg

这可能不太理想,因为您无法控制文件名中的数字数量,但这里有一个解决方法:

[gnubeard@mothership: ~]$ convert '*.jpg' -set filename:f "%t_%p"  -resize 50% '%[filename:f].jpg'
[gnubeard@mothership: ~]$ ls *.jpg
dog_0.jpg  dog.jpg  fish_1.jpg  fish.jpg

escape%p计算当前序列帧号,这可能足以满足您的目的。(请注意,索引从 0 开始,并且记录解决方案如果您希望索引从 1 开始,请传递“null:”作为第一个图像参数,然后删除生成的垃圾图像。)

相关内容