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