Answers:
该shell脚本将重新生成大小为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中的照片。
我只是使用了此答案中给出的shell脚本,但是我要生成大约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
使用Shotwell 更新时,手动查看时会生成0.18缩略图。
不要删除.shotwell / thumbs!
根据启动板中的此错误,缩略图仅在导入时生成。
缩略图仅在导入时生成。如果将缩略图从磁盘中删除,则不会重新生成缩略图。
在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
tf_src="$(exiv2 -vf -et "$filename" | grep -o "to file .*" | cut -f3- -d" ")" && mv "$tf_src" $tf