Comment faire pour que Shotwell régénère toutes les vignettes?

15

Pour une raison inconnue, toutes les vignettes sont perdues dans mon Shotwell, au lieu de cela, toutes les icônes sont grises. Les images elles-mêmes sont toutes correctes et je peux toutes les ouvrir dans Shotwell.

Il n'y a que des dossiers vides .shotwell/thumbs/, il semble donc que les miniatures ne soient pas générées du tout.

J'ai également essayé de réinstaller Shotwell (en le purgeant d'abord) sans aucun changement.

Comment faire pour que Shotwell régénère toutes les vignettes?

hultqvist
la source

Réponses:

14

Ce script shell régénérera vos miniatures de tailles 128px et 360px afin que vous voyiez au moins quelque chose dans la visionneuse.

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
lkp
la source
Si vos photos ont des miniatures exif, vous pouvez remplacer la ligne de conversion par ceci:tf_src="$(exiv2 -vf -et "$filename" | grep -o "to file .*" | cut -f3- -d" ")" && mv "$tf_src" $tf
lkp
Le problème avec cette solution est que les transformations que l'utilisateur a apportées aux photos - rotation, recadrage, correction des couleurs - ne seront pas reflétées dans les vignettes. Shotwell stocke toutes les vignettes entièrement transformées.
Jim Nelson
Ce script suppose que vous êtes en haut de votre répertoire personnel, mais fonctionne autrement comme un charme. Merci!
Reece
Les builds bitbucket.org/reece/reece-base/src/tip/bin/… créent également les pouces 360x360.
Reece
De nos jours, vous pouvez également simplement supprimer ~/.cache/shotwell/thumbs, et Shotwell 0.22.x les régénérera au besoin.
Lambart
7

Un moyen simple pour Shotwell de régénérer les vignettes (c'est une solution de contournement):

  1. Accédez à votre page Photos.
  2. Modifier -> Tout sélectionner
  3. Ctrl+ R(tourner)
  4. Une fois la rotation terminée, Ctrl+ Z(annuler).

Cela obligera Shotwell à régénérer toutes les photos et à honorer toutes les transformations qu'il a enregistrées pour elles.

Comme l'a mentionné phq, il existe un bogue en suspens pour résoudre ce problème, vous n'aurez donc pas besoin de cette solution de contournement. Jusque-là, c'est la méthode recommandée pour résoudre ce problème. Le script affiché ci-dessus n'honorera pas les transformations, ce qui signifie qu'il est possible que vos miniatures ne ressemblent pas à vos photos dans Shotwell.

Jim Nelson
la source
Juste une remarque car c'est toujours la même chose dans Shotwell 0.13.1 - le retournement horizontal semble être une transformation un peu plus rapide (testé sur 1500 photos 8mpix).
cprn
5

Je viens d'utiliser le script shell donné dans cette réponse , mais j'ai environ 22000 vignettes à générer.

Voici donc une version bash de ce script, utilisant à la ~/.shotwellplace de ~/.local/shotwell(ce que j'ai) et utilisant autant de cœurs que mon processeur (8 fois plus rapide dans mon cas!):

#!/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
la source
5

Mise à jour avec shotwell 0,18 Les miniatures sont maintenant générées lorsqu'elles sont visualisées manuellement.

Ne supprimez pas .shotwell / thumbs!

Selon ce bogue dans le tableau de bord, les vignettes ne sont générées qu'à l'importation.

Les miniatures sont générées uniquement lors de l'importation. Si les vignettes sont supprimées du disque, elles ne sont pas régénérées.

hultqvist
la source
Avec Shotwell 0.22 (c'est-à-dire Ubuntu 16.04), vous pouvez simplement supprimer ~ / .cache / shotwell / thumbs, et Shotwell les régénérera au besoin.
Lambart
3

Shotwell version 0.13.11 sur Ubuntu 12.10 Les miniatures ne semblent plus se trouver dans .shotwell / thumbs mais maintenant dans .cache / shotwell Vous pouvez vérifier que l'utilisateur a les droits complets pour lire les pouces. L'accès aux photos mais pas aux pouces peut provoquer des pouces gris.

Ludovic Cheron
la source
Vous n'avez pas abordé la question de la régénération des pouces.
hultqvist
1
@phq si vous aviez lu la question, vous verriez que la question n'est pas nécessairement de régénérer réellement les thubs , mais comment récupérer les pouces pour lesquels l'OP suppose que les pouces sont manquants, et proposer ainsi la régénération comme une réparation. Dans le cas où les pouces sont réellement là, mais dans un dossier différent ou avec la mauvaise autorisation, cette réponse est en fait sur place. En plus de cela, même si vous n'accepteriez que des réponses qui ne traitent bêtement que le sujet de la question, gardez à l'esprit que cette réponse est toujours utile en tant que commentaire (ce phq n'aurait pas pu ..
berdario
... poste comme un vrai commentaire, en raison de son faible score de réputation)
berdario
2

Shotwell 0.28.4 (Braunschweig) ne crée parfois pas de vignettes vidéo. Le script suivant dérivé de la réponse acceptée corrige ce problème:

#!/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
la source
1

Pour la version 0.26.3 (à jour en novembre 2017), avec Shotwell fermé, supprimez simplement les miniatures dans

  • / home / nom_utilisateur /.cache/shotwell/thumbs/thumbs128 et dans
  • / home / nom_utilisateur /.cache/shotwell/thumbs/thumbs360

et tirer à nouveau Shotwell.

noisette sur natty
la source