特定の作成日のファイルに対してのみmogrify Convertを使用する方法は?

特定の作成日のファイルに対してのみmogrify Convertを使用する方法は?

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

ファイル名やパスにスペースやその他の特殊文字がない場合に機能します。

関連情報