Como faço para a Shotwell regenerar todas as miniaturas?


15

Por alguma razão desconhecida, todas as miniaturas são perdidas no meu Shotwell, e todos os ícones são cinza. As imagens em si estão bem e eu posso abri-las em Shotwell.

Existem apenas pastas vazias, .shotwell/thumbs/pelo que parece que as miniaturas não são geradas.

Também tentei reinstalar o Shotwell (limpe-o primeiro) sem nenhuma alteração.

Como faço para a Shotwell regenerar todas as miniaturas?

Respostas:


14

Esse script de shell regenerará suas miniaturas de tamanhos 128px e 360px, para que você veja pelo menos algo no visualizador.

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

Se suas fotos tiverem miniaturas exif, você poderá substituir a linha de conversão por esta:tf_src="$(exiv2 -vf -et "$filename" | grep -o "to file .*" | cut -f3- -d" ")" && mv "$tf_src" $tf
lkp

O problema com esta solução é que quaisquer transformações que o usuário fez nas fotos - rotação, corte, correção de cores - não serão refletidas nas miniaturas. A Shotwell armazena todas as miniaturas totalmente transformadas.
perfil completo de Jim Nelson

Esse script assume que você está no topo do diretório inicial, mas funciona como um encanto. Obrigado!
Reece

A construção bitbucket.org/reece/reece-base/src/tip/bin/… também cria as miniaturas 360x360.
Reece

Atualmente, você também pode simplesmente excluir ~/.cache/shotwell/thumbs, e o Shotwell 0.22.x os regenerará conforme necessário.
Lambart

7

Uma maneira fácil para a Shotwell regenerar miniaturas (esta é uma solução alternativa):

  1. Vá para a sua página de fotos.
  2. Editar -> Selecionar tudo
  3. Ctrl+ R(girar)
  4. Quando terminar de girar, Ctrl+ Z(desfazer).

Isso forçará o Shotwell a regenerar todas as fotos e honrar todas as transformações armazenadas para elas.

Como o phq mencionou, existe um bug excelente para corrigir isso, para que você não precise dessa solução alternativa. Até então, esta é a maneira recomendada para resolver esse problema. O script postado acima não respeitará as transformações, o que significa que é possível que suas miniaturas não pareçam com as suas fotos em Shotwell.


Apenas uma nota lateral, como ainda é a mesma no Shotwell 0.13.1 - o flip horizontal parece ser uma transformação um pouco mais rápida (testada em 1500 fotos de 8mpix).
CPRN

5

Acabei de usar o script de shell fornecido nesta resposta , mas tenho cerca de 22000 miniaturas para gerar.

Então, aqui está uma versão básica deste script, usando em ~/.shotwellvez de ~/.local/shotwell(que é o que eu tenho) e usando tantos núcleos quanto meu processador (8 vezes mais rápido no meu caso!):

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

Atualizar Com o shotwell, 0,18 miniaturas agora são geradas quando exibidas manualmente.

Não remova .shotwell / thumbs!

De acordo com esse bug na barra de ativação, as miniaturas são geradas apenas na importação.

As miniaturas são geradas apenas na importação. Se as miniaturas forem removidas do disco, elas não serão regeneradas.


Com o Shotwell 0.22 (ou seja, Ubuntu 16.04), você pode simplesmente excluir ~ / .cache / shotwell / thumbs, e o Shotwell os regenerará conforme necessário.
Lambart

3

Shotwell versão 0.13.11 no Ubuntu 12.10 As miniaturas não parecem estar localizadas em .shotwell / thumbs, mas agora em .cache / shotwell Você pode verificar se o usuário possui todos os direitos para ler os polegares. O acesso às imagens, mas não aos polegares, pode causar polegares cinza.


Você não respondeu à pergunta sobre como regenerar os polegares.
precisa saber é o seguinte

1
@phq se você tivesse lido a pergunta, veria que a pergunta não é necessariamente regenerar os thubs , mas como recuperar os polegares para os quais o OP hipotetiza os polegares estão ausentes e, assim, propor a regeneração como um conserto. No caso de os polegares estarem realmente lá, mas em uma pasta diferente ou com a permissão errada, essa resposta está realmente correta. Além disso, mesmo que você aceite respostas que tolamente lidem apenas com o assunto da pergunta, lembre-se de que essa resposta ainda é útil como um comentário (que o phq não seria capaz de ..
berdario

... pós como um verdadeiro comentário, devido ao seu baixo reputações marcar)
berdario

2

O Shotwell 0.28.4 (Braunschweig) às vezes não cria miniaturas de vídeo. O script a seguir derivado da resposta aceita corrige isso:

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

Para a versão 0.26.3 (atualizada em novembro de 2017), com o Shotwell fechado, basta excluir as miniaturas em

  • / home / user_name /.cache/shotwell/thumbs/thumbs128 e em
  • / home / user_name /.cache/shotwell/thumbs/thumbs360

e atire Shotwell, novamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.