Jak sprawić, by Shotwell zregenerował wszystkie miniatury?

15

Z jakiegoś nieznanego powodu wszystkie miniatury zostały utracone w mojej Shotwell, zamiast tego wszystkie ikony są szare. Same zdjęcia są w porządku i mogę je wszystkie otworzyć w Shotwell.

W folderze są tylko puste foldery, .shotwell/thumbs/więc wygląda na to, że miniatury wcale się nie generują.

Próbowałem również ponownie zainstalować Shotwell (najpierw go wyczyszcząc) bez żadnych zmian.

Jak sprawić, by Shotwell zregenerował wszystkie miniatury?

hultqvist
źródło

Odpowiedzi:

14

Ten skrypt powłoki zregeneruje twoje miniatury o rozmiarach 128px i 360px, dzięki czemu zobaczysz przynajmniej coś w przeglądarce.

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
Łkp
źródło
Jeśli twoje zdjęcia mają miniatury exif, możesz zastąpić wiersz konwersji tym:tf_src="$(exiv2 -vf -et "$filename" | grep -o "to file .*" | cut -f3- -d" ")" && mv "$tf_src" $tf
lkp
Problem z tym rozwiązaniem polega na tym, że wszelkie transformacje dokonane przez użytkownika na zdjęciach - obrót, przycięcie, korekta kolorów - nie zostaną odzwierciedlone w miniaturach. Shotwell przechowuje wszystkie miniatury w pełni przetworzone.
Jim Nelson
Ten skrypt zakłada, że ​​jesteś na górze katalogu domowego, ale poza tym działa jak urok. Dzięki!
Reece
kompilacje bitbucket.org/reece/reece-base/src/tip/bin/… również tworzą kciuki 360x360.
Reece
Obecnie możesz też po prostu usunąć ~/.cache/shotwell/thumbs, a Shotwell 0.22.x je zregeneruje w razie potrzeby.
Lambart
7

Łatwy sposób na regenerację miniatur przez Shotwell (jest to obejście):

  1. Przejdź na stronę Zdjęcia.
  2. Edycja -> Wybierz wszystko
  3. Ctrl+ R(obróć)
  4. Po zakończeniu obracania Ctrl+ Z(cofnij).

Zmusi to Shotwell do zregenerowania wszystkich zdjęć i uhonorowania wszelkich zapisanych dla nich transformacji.

Jak wspomniano w phq, istnieje wyjątkowy błąd, aby to naprawić, więc nie będziesz potrzebować tego obejścia. Do tego czasu jest to zalecany sposób rozwiązania tego problemu. Skrypt opublikowany powyżej nie będzie honorował przekształceń, co oznacza, że ​​Twoje miniatury mogą nie wyglądać jak Twoje zdjęcia w Shotwell.

Jim Nelson
źródło
Tylko na marginesie, ponieważ nadal jest taki sam w Shotwell 0.13.1 - poziome odwrócenie wydaje się być nieco szybszą transformacją (testowane na 1500 zdjęć 8mpix).
cprn 30.01.2013
5

Właśnie użyłem skryptu powłoki podanego w tej odpowiedzi , ale mam około 22000 miniatur do wygenerowania.

Oto bashowa wersja tego skryptu, która używa ( ~/.shotwellzamiast tego, ~/.local/shotwellco mam) i używa tyle rdzeni, ile ma mój procesor (w moim przypadku 8 razy szybciej!):

#!/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
Benjamin Sonntag
źródło
5

Aktualizacja Dzięki shotwell miniatury 0,18 są teraz generowane podczas ręcznego przeglądania.

Nie usuwaj .shotwell / thumbs!

Zgodnie z tym błędem w starterze miniatury są generowane tylko podczas importu.

Miniatury są generowane tylko podczas importu. Jeśli miniatury zostaną usunięte z dysku, nie zostaną ponownie wygenerowane.

hultqvist
źródło
Z Shotwell 0,22 (czyli Ubuntu 16.04) można po prostu usunąć ~ / .cache / Shotwell / kciuki, a Shotwell będzie je regenerować, ile potrzeba.
Lambart
3

Shotwell wersja 0.13.11 na Ubuntu 12.10 Miniatury wydają się już nie znajdować się w .shotwell / thumbs, ale teraz w .cache / shotwell Możesz sprawdzić, czy użytkownik ma pełne uprawnienia do czytania kciuków. Dostęp do zdjęć, ale nie do kciuków, może powodować szare kciuki.

Ludovic Cheron
źródło
Nie odpowiedziałeś na pytanie dotyczące regeneracji kciuków.
hultqvist 16.04.13
1
@phq, gdybyś przeczytał pytanie, zobaczyłbyś, że pytanie niekoniecznie musi faktycznie zregenerować kępy , ale jak odzyskać kciuki, dla których brakuje OP hipotetycznie kciuki, a tym samym zaproponować regenerację jako naprawa. W przypadku, gdy kciuki rzeczywiście tam są, ale w innym folderze lub z niewłaściwym pozwoleniem, ta odpowiedź jest na miejscu. Co więcej, nawet jeśli akceptujesz tylko odpowiedzi, które głupio dotyczą tylko tematu pytania, pamiętaj, że ta odpowiedź jest nadal przydatna jako komentarz (że phq nie byłby w stanie ...
berdario
... opublikuj jako prawdziwy komentarz, ze względu na jego niski wynik reputacji)
berdario
2

Shotwell 0.28.4 (Braunschweig) czasami nie tworzy miniatur wideo. Poniższy skrypt pochodzący z zaakceptowanej odpowiedzi rozwiązuje ten problem:

#!/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

mrin
źródło
1

W przypadku wersji 0.26.3 (aktualna na listopad 2017 r.), Z zamkniętą aplikacją Shotwell, wystarczy usunąć miniatury w

  • / home / nazwa_użytkownika /.cache/shotwell/thumbs/thumbs128 i in
  • / home / nazwa_użytkownika /.cache/shotwell/thumbs/thumbs360

i ponownie wystrzelić Shotwell.

orzechowy o natty
źródło