我有一个充满图像的目录,我想变成一个gif.
每个文件名遵循以下模式:< zero_padded_index> _< delay_in_milliseconds> .gif
示例:00001_1432.gif
我可以用imagemagick创建gif动画:convert -loop 0 -delay 10 * .gif out.gif
问题是,我希望每个帧根据其名称中的第二个数字有不同的延迟.
convert -delay 0 -loop 0 *.gif output.gif for gif in *.gif; do name=${gif%.gif} index=$(echo ${name%-*} | sed 's/0*//') delay=${name#*-} # 1. convert milliseconds to w/e imagemagick -delay uses. # 2. update the frame at the correct index. done;
我是否逐步建立gif?还是回去改变事后呢?
我的imagemagick剁不符合标准.
所以如果我正在接近这个问题,我会做以下(如果我明白了)
给出以下文件:
[root@dev7 ~]# ls -lta so/ total 728 drwxr-xr-x 2 root root 4096 Aug 13 18:35 . dr-xr-x---. 17 root root 4096 Aug 13 18:35 .. -rw-r--r-- 1 root root 18933 Aug 13 18:23 00007_1432.gif -rw-r--r-- 1 root root 18594 Aug 13 18:23 00006_1432.gif -rw-r--r-- 1 root root 18984 Aug 13 18:23 00005_1432.gif -rw-r--r-- 1 root root 19601 Aug 13 18:23 00004_1444.gif -rw-r--r-- 1 root root 19408 Aug 13 18:23 00003_1432.gif -rw-r--r-- 1 root root 18632 Aug 13 18:23 00002_1552.gif -rw-r--r-- 1 root root 20104 Aug 13 18:23 00001_1432.gif [root@dev7 ~]#
我的脚本将如下所示:
#!/bin/bash -x # directory of the individual gifs _dir=/root/so/ # get gifs and make sure your sort them in order gifs=$(find $_dir -name *.gif|sort|xargs) # this is going to be the imagemagick command _CONVERT="convert " # make sure the list of gifs look correct echo $gifs for gif in $gifs; do # full path of each gif full_path=$gif # get just the name of the gif ( originally I was going to use this if everything was happing within the same directory ) name=$(echo ${gif##*/}) #echo -e "\n$name" # Get the index index=$(echo ${gif##*/} | cut -d\_ -f1) #echo -e "\n$index" # Get the delay of the current image delay=$(echo ${gif##*/} | cut -d\_ -f2| sed "s,.gif,") # echo -e "\n$delay" # add correct delay options to current gif,append to existing command _CONVERT="${_CONVERT} -delay $delay $gif " done; # add the outpt of where you're going to put your gif _CONVERT="${_CONVERT} -loop 0 -layers Optimize /root/so/stackoverflow.gif" # show full command echo "Convert cmd: $_CONVERT" # run it,then go get your image eval $_CONVERT
生成的命令示例:
Convert cmd: convert -delay 1432 /root/so/00001_1432.gif -delay 1552 /root/so/00002_1552.gif -delay 1432 /root/so/00003_1432.gif -delay 1444 /root/so/00004_1444.gif -delay 1432 /root/so/00005_1432.gif -delay 1432 /root/so/00006_1432.gif -delay 1432 /root/so/00007_1432.gif -layers Optimize /root/so/stackoverflow.gif
希望这是你正在寻找的.