Как заставить Shotwell регенерировать все миниатюры?

По какой-то неизвестной причине все миниатюры теряются в моем Shotwell, вместо этого все значки серого цвета. С самими изображениями все в порядке, и я могу открыть их все в Shotwell.

В .shotwell/thumbs/ есть только пустые папки, так что похоже, что эскизы вообще не генерируются.

Я также попытался переустановить Shotwell (сначала очистив его) без каких-либо изменений.

Как заставить Shotwell регенерировать все миниатюры?

15
задан 3 July 2014 в 15:52

7 ответов

Я только что использовал сценарий оболочки , приведенный в этом ответе , но у меня есть около 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
0
ответ дан 3 July 2014 в 15:52

Простой способ для Shotwell восстановить миниатюры (это обходной путь):

  1. Перейдите на страницу «Фотографии».
  2. Редактировать -> Выбрать все
  3. Ctrl + R (повернуть)
  4. [ 116] После завершения вращения Ctrl + Z (отменить).

Это заставит Shotwell регенерировать все фотографии и соблюдать любые преобразования, которые он сохранил для них.

Как уже упоминалось в phq, есть исправленная ошибка, поэтому вам не понадобится этот обходной путь. До тех пор, это рекомендуемый способ решения этой проблемы. Приведенный выше сценарий не учитывает преобразования, а это означает, что ваши эскизы могут не выглядеть как ваши фотографии в Shotwell.

0
ответ дан 3 July 2014 в 15:52

Для версии 0.26.3 (по состоянию на ноябрь 2017 г.) при закрытом Shotwell просто удалите миниатюры в

  • / home / user_name / .cache / shotwell / thumbs / thumbs128 и в
  • / home / user_name /. cache / shotwell / thumbs / thumbs360

и снова запустить Shotwell .

0
ответ дан 3 July 2014 в 15:52

Обновление Теперь при просмотре вручную в миниатюрном корпусе появляется 0,18 миниатюр.

Не удалять .shotwell / thumbs!

Согласно этой ошибке в панели запуска, миниатюры создаются только при импорте.

Миниатюры создаются только при импорте. Если миниатюры удаляются с диска, они не восстанавливаются.

0
ответ дан 3 July 2014 в 15:52

Shotwell версия 0.13.11 в Ubuntu 12.10 Миниатюры, кажется, больше не находятся в .shotwell / thumbs, но теперь в .cache / shotwell Вы можете проверить, что у пользователя есть все права для чтения больших пальцев. Доступ к изображениям, но не к большим пальцам, может привести к появлению серых больших пальцев.

0
ответ дан 3 July 2014 в 15:52

Этот сценарий оболочки восстановит ваши миниатюры размером 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
0
ответ дан 3 July 2014 в 15:52

Shotwell 0.28.4 (Брауншвейг) не будет иногда создавать видео миниатюры. Следующий сценарий, полученный на основании принятого ответа, фиксирует это:

#!/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
ответ дан 23 November 2019 в 02:42

Другие вопросы по тегам:

Похожие вопросы: