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?

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

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.


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

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.


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.


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


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.