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
成功せずにマニュアルページを試しました。これは可能ですか?
答え1
この小さなシェルスクリプトは現在のディレクトリ内のすべてのファイルを繰り返し、最後に変更されたタイムスタンプをビルドされたスコープとタイムstart
スタンプend
(この場合は10月10日)と比較します。一致するファイルが配列に追加され、配列files
にファイルがある場合は、そのファイルを呼び出しますconvert
。少なくとも2つ以上のファイルが必要な場合-gt 0
。-gt 1
作成時間は通常ファイルの(Unix)プロパティに保持されないため、この方法は簡単にだまされ、古いファイルがtouch 1476158400.jpg
新しいファイルとして表示される可能性があります。 2番目のオプションについては、以下を参照してください。
#!/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
答え2
画像名が次のように少し異なる場合:
images/147615000-000.jpg
images/147615000-001.jpg
... more images ...
images/147615000-090.jpg
これにより、次のことができます。
convert -delay 10 -loop 0 images/147615000-*.jpg animation.gif
しかし、これらの画像には理由があり、タイムスタンプが写っているようです。
次のスクリプトを試すことができます。
#!/bin/sh
#
# Find images from $1 to $2 inclusive
if [ "$2" = "" ]
then
echo "Pass the first and last file."
exit
fi
# Basic file check
if [ ! -f "$1" ]
then
echo "$1 not found."
exit
fi
if [ ! -f "$2" ]
then
echo "$2 not found."
exit
fi
# Get the file list. Note: This will skip the first file.
list=`find "./" -type f -newer "${1}" -and -type f -not -newer "${2}"`
# Include the first image
list="./$1
$list"
# Sort the images as find may have them in any order
list=`echo "$list" | sort`
# create the animation.gif
convert -delay 10 -loop 0 $list animation.gif
# say something
echo "Done"
"animation.gif"を作成したいディレクトリにこのスクリプトを配置します。イメージがサブディレクトリにあるとします。次のように呼び出すことができます。
sh ./fromToAnimation.sh images/147615000.jpg images/1476162527.jpg
ファイル名やパスにスペースやその他の特殊文字がない場合に機能します。