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


15

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

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

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

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

Ответы:


14

Этот сценарий оболочки восстановит ваши миниатюры размером 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

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

Этот сценарий предполагает, что вы находитесь в верхней части вашего домашнего каталога, но в остальном работает как шарм. Благодарность!
Рис

bitbucket.org/reece/reece-base/src/tip/bin/… builds также создает большие пальцы размером 360x360.
Рис

В настоящее время вы также можете просто удалить ~/.cache/shotwell/thumbs, и Shotwell 0.22.x будет восстанавливать их по мере необходимости.
Ламбарт

7

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

  1. Перейти на страницу фотографий.
  2. Изменить -> Выбрать все
  3. Ctrl+ R(повернуть)
  4. Когда закончите вращаться, Ctrl+ Z(отменить).

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

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


Еще одно замечание: в Shotwell 0.13.1 он все тот же: горизонтальное переворачивание кажется немного более быстрым преобразованием (протестировано на 1500 8-мегапиксельных фотографиях).
cprn

5

Я просто использовал сценарий оболочки, приведенный в этом ответе , но у меня есть около 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 / превью!

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

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


С Shotwell 0,22 (т.е. Ubuntu 16,04) , вы можете просто удалить ~ / .cache / Шотуэлл / большие пальцы, и Shotwell будут восстанавливать их по мере необходимости.
Ламбарт

3

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


Вы не ответили на вопрос о регенерации больших пальцев.
hultqvist

1
@phq если бы вы читали вопрос, вы бы увидели , что этот вопрос не обязательно на самом деле регенерировать thubs , но как получить большие пальцы назад , для которых OP hypothetize больших пальцев отсутствуют, и , таким образом , предложить регенерацию исправить. В случае, если большие пальцы действительно есть, но в другой папке или с неправильным разрешением, этот ответ на самом деле точный. Кроме того, даже если вы только примете ответы, которые по глупости касаются только предмета вопроса, имейте в виду, что этот ответ все еще полезен в качестве комментария (что phq не смог бы ...
Бердарио

... пост как истинный комментарий, из-за его низкого балла за репутацию)
berdario

2

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

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

  • / Главная / user_name /.cache/shotwell/thumbs/thumbs128 и
  • / home / имя_пользователя /.cache/shotwell/thumbs/thumbs360

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.