如何使Shotwell重新生成所有缩略图?


15

由于某些未知原因,我的Shotwell中的所有缩略图都丢失了,而是所有图标都是灰色的。图像本身都还可以,我可以在Shotwell中将其全部打开。

里面只有空文件夹,.shotwell/thumbs/所以看起来根本没有生成缩略图。

我也尝试过重新安装Shotwell(先清除它),而不做任何更改。

如何使Shotwell重新生成所有缩略图?

Answers:


14

该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

如果您的图片具有exif缩略图,则可以将转换行替换为:tf_src="$(exiv2 -vf -et "$filename" | grep -o "to file .*" | cut -f3- -d" ")" && mv "$tf_src" $tf
lkp 2011年

这种解决方案的问题在于,用户对照片所做的任何转换(旋转,裁剪,色彩校正)都不会反映在缩略图中。Shotwell会存储所有经过完全转换的缩略图。
吉姆·尼尔森

该脚本假定您位于主目录的顶部,但在其他方面却像超级按钮一样工作。谢谢!
Reece

bitbucket.org/reece/reece-base/src/tip/bin/…的构建也会创建360x360缩略图。
Reece

如今,您也可以删除~/.cache/shotwell/thumbs,而Shotwell 0.22.x将根据需要重新生成它们。
Lambart '19

7

Shotwell重新生成缩略图的简单方法(这是一种解决方法):

  1. 转到“照片”页面。
  2. 编辑 -> 全选
  3. Ctrl+ R(旋转)
  4. 旋转完成后,Ctrl+ Z(撤消)。

这将迫使Shotwell重新生成所有照片并兑现为照片存储的所有转换。

如phq所述,有一个出色的错误可以解决此问题,因此您不需要此解决方法。在此之前,这是解决此问题的推荐方法。上面发布的脚本将不支持转换,这意味着您的缩略图可能看起来不像Shotwell中的照片。


只是附带说明一下,因为它在Shotwell 0.13.1中仍然相同-水平翻转似乎转换起来要快一些(在1500张8mpix照片上进行了测试)。
cprn 2013年

5

我只是使用了此答案中给出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

5

使用Shotwell 更新时,手动查看时会生成0.18缩略图。

不要删除.shotwell / thumbs!

根据启动板中的此错误,缩略图仅在导入时生成。

缩略图仅在导入时生成。如果将缩略图从磁盘中删除,则不会重新生成缩略图。


使用Shotwell 0.22(即Ubuntu 16.04),您只需删除〜/ .cache / shotwell / thumbs,Shotwell 根据需要重新生成它们。
Lambart '19

3

在Ubuntu 12.10上的Shotwell版本0.13.11缩略图似乎不再需要位于.shotwell / thumbs中,但现在位于.cache / shotwell中。您可以检查用户是否拥有完全的权限来读取拇指。可以访问图片但不能访问拇指可能会导致灰色拇指。


您尚未解决有关重新生成拇指的问题。
hultqvist

1
@phq如果您已经读过问题,您会发现问题不一定是实际上重新生成thub,而是如何获得 OP假设其丢失的拇指,从而提出重新生成的建议。解决。如果大拇指确实在那儿,但是在不同的文件夹中或使用了错误的权限,则实际上是正确的答案。最重要的是,即使你只接受答案是愚蠢只与质询的主题处理,请记住,这个答案仍然是为注释(即PHQ不会已经能够..有用的
berdario 2014年

...由于他的声誉
不佳

2

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


1

对于版本0.26.3(截至2017年11月的最新版本),关闭了Shotwell,只需删除其中的缩略图

  • /家庭/ USER_NAME /.cache/shotwell/thumbs/thumbs128和
  • /家庭/ USER_NAME /.cache/shotwell/thumbs/thumbs360

然后再次发射Shotwell

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.