定义ImageMagick convert的文件顺序

14

我有一堆名为 foo<bar>.pngPNG 文件,希望将它们转换为 TIF 动画。其中 <bar> 是一个数字,范围从 0 至 25,步长为 5。然而 ImageMagick 把 foo5.png 放在了动画的最后,而不是应该放在第二个位置。除了重命名文件为 foo05.png ,有没有其他办法可以把它放在正确的位置呢?


1
将您的图像重命名为带有前导零的数字,例如foo005.png。通配符*按字母顺序而非数字顺序读取图像。因此,前导零将使您的文件名在通过通配符访问时按字母顺序列出。 - fmw42
7个回答

16

如果你有很多输入图像需要处理,但输入它们太麻烦(比如foo0..foo100.png),可以在Linux、Unix和Mac OS X上使用以下方法:

convert                                                  \
  -delay 10                                              \
   $(for i in $(seq 0 5 100); do echo foo${i}.png; done) \
  -loop 0                                                \
   animated.gif

2
请注意,您也可以使用此方法来反转GIF的顺序:$(seq 100 -5 0) - MasterScrat
1
请注意,如果您只想反转正常顺序,则可以使用此方法,但需要将子命令替换为$(ls -r *.png) - AnnanFay

13

简单易行,列出您的图像并对其进行排序:

convert -delay 10 -loop 0 $(ls -1 *.png | sort -V) animated.gif

6
您只需按照PNG文件在动画中的顺序给出命令。使用:
foo0.png foo5.png foo10.png foo15.png foo20.png foo25.png

替代

foo*.png

毕竟,只有6个不同的文件名需要输入,应该很容易:
convert                                                      \
  -delay 10                                                  \
   foo0.png foo5.png foo10.png foo15.png foo20.png foo25.png \
  -loop 0                                                    \
   animated.gif

@Yotam:你看到我的另一个答案了吗?难道它不够好让你点个赞吗? - Kurt Pfeifle
1
编写此类文件时,在文件名的数字部分加上前导零非常有用;然后您只需使用“* .png”就可以按正确顺序获取它们。例如,foo00.png foo05.png foo15.png foo20.png foo25.png。 - Glenn Randers-Pehrson

1
比使用ls和sort更容易的方法是使用ls的内置-v选项: convert -delay 10 -loop 0 `ls -v *.png` animated.gif 其中`...`会被执行而不是解释为字符串。

1
您可以使用“sort”和“find”一起使用:
convert -delay 10 $(find . -name "*.png" -print0 | sort -zV | xargs -r0 echo) -loop 0 animated.gif

为什么要使用find而不是ls?为什么要使用xargs?请查看我的答案,以获取更简单的解决方案。 - Andrey Portnoy

0
如果您了解一些Python,那么您可以轻松地从Python shell中利用它的帮助。
在终端中键入“python”即可启动Python shell。然后应用以下魔法咒语-
# Suppose your files are like 1.jpeg, 2.jpeg etc. upto 100.jpeg
files = []
for i in range(1, 101):
    files.append('{}.jpeg'.format(i))
command = 'convert -delay 10 {} -loop 0 animated.gif'.format(' '.join(files))
from subprocess import call
call(command, shell=True)

你的工作应该完成了!


0

实际上,你可以这样做:

convert $(ls -v *.png) animated.gif

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