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
. 최소한 두 개 이상의 파일을 갖고 싶다면 -gt 0
.-gt 1
생성 시간은 일반적으로 파일의 (Unix) 속성에 유지되지 않으므로 이 방법은 쉽게 속일 수 있으며 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
답변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
파일 이름이나 경로에 공백이나 기타 특수 문자가 없으면 작동합니다.