我正在使用mogrify的gif创建动画convert
。但是,此刻,我在一个包含数十张图像的文件夹中运行,我只是指示它使用找到的所有图像。但是,我希望它仅使用在特定日期创建的文件。我可以做这样的事情吗?
当前使用的命令:
convert -delay 10 -loop 0 images/* animation.gif
我所有的文件名都是时间戳,所以我也可以指定一个范围,例如:
convert -delay 10 -loop 0 --start="images/147615000.jpg" --end="images/1476162527.jpg" animation.gif
我已经尝试过convert
手册页,但是没有运气。这有可能吗?
这个小型的Shell脚本将循环遍历当前目录中的每个文件,并将其最后修改的时间戳与start
和end
时间戳构建的范围(此处为10月10日)进行比较。匹配的文件将添加到files
阵列中,如果阵列中有任何文件,它将对其进行调用convert
。如果要至少有两个文件(或更多)-gt 0
,-gt 1
请将调整为。
请注意,创建时间通常不保留在文件的(Unix)属性中,因此此方法可能被simple欺骗touch 1476158400.jpg
,这会使旧文件显得新。请参阅下面的第二个选项。
#!/usr/bin/env bash
start=$(date +%s -d 'Oct 10 2016')
end=$(date +%s -d 'Oct 11 2016')
files=()
for f in *
do
d=$(stat -c%Z "$f")
[[ $d -ge $start ]] && [[ $d -le $end ]] && files+=("$f")
done
[[ ${#files[*]} -gt 0 ]] && convert -delay 10 -loop 0 "${files[*]}" animation.gif
或者,如果文件名本身对创建时间戳进行编码,则可以使用蛮力循环找到它们:
start=$(date +%s -d 'Oct 10 2016')
end=$(date +%s -d 'Oct 11 2016')
files=()
for((i=start;i<=end;i++)); do [[ -f "${i}.jpg" ]] && files+=("${i}.jpg"); done
[[ ${#files[*]} -gt 0 ]] && convert -delay 10 -loop 0 "${files[*]}" animation.gif
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句