답변:
이 셸 스크립트는 128px 및 360px 크기의 썸네일을 재생성하여 최소한 뷰어에서 무언가를 볼 수 있습니다.
sqlite3 ~/.local/share/shotwell/data/photo.db \
"select id||' '||filename from PhotoTable order by timestamp desc" |
while read id filename; do
for size in 128 360; do
tf=$(printf ~/.cache/shotwell/thumbs/thumbs${size}/thumb%016x.jpg $id);
test -e "$tf" || {
echo -n "Generating thumb for $filename ($tf)";
convert "$filename" -auto-orient -thumbnail ${size}x${size} $tf
echo
}
done
done
~/.cache/shotwell/thumbs
있으며 Shotwell 0.22.x는 필요에 따라 재생성합니다.
Shotwell이 축소판을 재생성하는 쉬운 방법 (해결 방법) :
이렇게하면 Shotwell이 모든 사진을 재생성하고 저장 한 모든 변형을 존중하게됩니다.
phq가 언급 했듯이이 문제를 해결하기위한 뛰어난 버그가 있으므로이 해결 방법이 필요하지 않습니다. 그때까지이 문제를 해결하기 위해 권장되는 방법입니다. 위에 게시 된 스크립트는 변환 을 따르지 않습니다 . 즉, 미리보기 이미지가 Shotwell의 사진처럼 보이지 않을 수 있습니다.
방금 이 답변에 제공된 쉘 스크립트를 사용 했지만 약 22000 개의 축소판이 생성됩니다.
그래서 여기에이 스크립트의 bash 버전이 있습니다 (내가 가진 것) ~/.shotwell
대신 ~/.local/shotwell
내 프로세서보다 많은 코어를 사용합니다 (제 경우에는 8 배 빠릅니다!).
#!/bin/bash
# under linux, use this to launch as many convert as your processor core number
#MAX_PROCESSES=`cat /proc/cpuinfo |grep ^processor | wc -l`
# or use a static value
MAX_PROCESSES=4
sqlite3 ~/.shotwell/data/photo.db "select id||' '||filename from PhotoTable order by timestamp desc" |
while read id filename; do
for size in 128 360; do
tf=$(printf ~/.shotwell/thumbs/thumbs${size}/thumb%016x.jpg $id);
test -e "$tf" || {
echo "Generating thumb for $filename ($tf)";
convert "$filename" -auto-orient -thumbnail ${size}x${size} $tf &
RUNNING="`jobs -p |wc -l`"
while [ "$RUNNING" -ge "$MAX_PROCESSES" ]
do
sleep 0.3
RUNNING="`jobs -p |wc -l`"
done
}
done
done
Ubuntu 12.10의 Shotwell 버전 0.13.11 썸네일은 .shotwell / thumbs에 있지만 .cache / shotwell에는 더 이상 보이지 않는 것으로 보입니다. 사진에 액세스 할 수 있지만 엄지 손가락에는 액세스 할 수 없으면 회색 엄지 손가락이 발생할 수 있습니다.
Shotwell 0.28.4 (Braunschweig)는 때때로 비디오 썸네일을 생성하지 않습니다. 허용되는 답변에서 파생 된 다음 스크립트가이를 해결합니다.
#!/bin/bash
declare -A default_thumbnail_sizes
declare -A default_thumbnail_checksums
default_thumbnail_sizes[128]="3038"
default_thumbnail_checksums[128]="dc292dd5c9eacadee4fa02c2062d364d8a3a42cb4a58b99abb42dd1950803e4d"
default_thumbnail_sizes[360]="12333"
default_thumbnail_checksums[360]="1f5859761cbbc44f7444b5a61ffd7b2dfe560017d8376905df67db51a4641926"
sqlite3 ~/.local/share/shotwell/data/photo.db \
"select id||' '||filename from VideoTable" |
while read id filename
do
for size in 128 360
do
tf=$(printf ~/.cache/shotwell/thumbs/thumbs${size}/video-%016x.jpg $id);
exit_code="$?"
if [[ "$exit_code" != "0" ]]
then
echo $id
continue
fi
if [[ -e "$tf" ]]
then
tfilelength=$(stat -c '%s' $tf)
if [[ "$tfilelength" != ${default_thumbnail_sizes[$size]} ]]
then
continue
fi
tchecksum=$(sha256sum $tf)
if [[ "$tchecksum" != ${default_thumbnail_checksums[$size]}* ]]
then
continue
fi
fi
echo -n "$filename --> $tf";
ttf=/tmp/$(basename "$tf")
rm -f "$ttf"
ffmpeg -i "$filename" -loglevel quiet -vf "thumbnail,scale=${size}:-1" -frames:v 1 "$ttf"
exit_code="$?"
if [[ -e "$ttf" && $exit_code == "0" ]]
then
echo ": SUCCESS"
mv -f -v "$ttf" "$tf"
echo
else
echo ": FAILED ($exit_code)"
echo
fi
done
done
Shotwell이 닫힌 상태에서 버전 0.26.3 (2017 년 11 월 현재 최신)의 경우 축소판 그림을 삭제하십시오.
Shotwell을 다시 시작하십시오.
tf_src="$(exiv2 -vf -et "$filename" | grep -o "to file .*" | cut -f3- -d" ")" && mv "$tf_src" $tf