13

我有一堆PNG名为foo<bar>.png我希望转换为 TIF 动画的文件。<bar>是一个数字,从 0 到 25 以 5 为单位变化。ImageMagickfoo5.png在动画中排在最后,而它应该排在第二位。除了将文件重命名为foo05.png将其放置在正确的位置之外,还有其他方法吗?

4

6 回答 6

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
于 2012-09-09T20:12:59.667 回答
11

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

convert -delay 10 -loop 0 $(ls -1 *.png | sort -V) animated.gif
于 2019-01-11T00:25:59.487 回答
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
于 2012-09-09T15:10:53.710 回答
1

您可以将“查找”与“排序”一起使用:

convert -delay 10 $(find . -name "*.png" -print0 | sort -zV | xargs -r0 echo) -loop 0 animated.gif
于 2017-10-17T19:02:49.583 回答
0

比 ls 和 sort 更简单的是使用 ls 的内置 -v 选项:

convert -delay 10 -loop 0 `ls -v *.png` animated.gif

`...`执行而不是解释为字符串。

于 2020-10-22T16:01:09.427 回答
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)

你的工作应该完成!

于 2018-04-23T16:53:02.213 回答