Como eu exporto fotos de Shotwell ordenadas por data / hora em que foram filmadas?

2

Eu faço um álbum com fotos das câmeras de vários amigos. Vamos imaginar que a data e hora de exposição do EXIF estejam corretas em todos os arquivos. No entanto, os nomes de arquivo não estão alinhados (por exemplo, minha câmera começa em IMG0001, mas a câmera do meu amigo começa em pic1234.jpg e meu próprio telefone começa em pic5678.jpg).

Existe uma maneira da Shotwell exportar os arquivos de todos para um diretório simples, com os nomes de arquivos reescritos para que as imagens sejam ordenadas em ordem cronológica? Então, quando eu apresentar esses arquivos em outro computador, com outro visualizador de imagens (ou com o próprio Shotwell no modo de navegação de arquivos), eles serão exibidos na ordem cronológica correta.

Exemplo. Se eu tiver esses seis arquivos ...

  1. Minha câmera: IMG_0001.JPG - data de exposição EXIF 2012/12/25 12:05:00
  2. Minha câmera: IMG_0002.JPG - data de exposição EXIF 2012/12/25 12:11:00
  3. Meu próprio telefone: pic5678.jpg - data de exposição EXIF 2012/12/25 12:09:00
  4. Meu próprio telefone: pic5679.jpg - data de exposição EXIF 2012/12/25 12:15:00
  5. Telefone do amigo: pic1234.jpg - Data de exposição do EXIF 2012/12/25 12:08:00
  6. Telefone do amigo: pic1235.jpg - Data de exposição do EXIF 2012/12/25 12:18:00

... então eu gostaria de exportá-los com nomes de arquivos como estes:

  1. 20121225_120500-IMG_0001.JPG
  2. 20121225_120800-pic1234.jpg
  3. 20121225_120900-pic5678.jpg
  4. 20121225_121100-IMG_0002.JPG
  5. 20121225_121500-pic5679.jpg
  6. 20121225_121800-pic1235.jpg

para que eles sejam exibidos na ordem correta ao navegar com qualquer navegador de imagens.

O seguinte script faz o truque, mas não está integrado no Shotwell, que é o ponto da questão, e falhará (graciosamente) se as imagens não forem exportadas com dados Exif:

#!/usr/bin/python

import pyexiv2
import sys
import shutil

def getTimestamp(f):
  metadata = pyexiv2.ImageMetadata(f)
  metadata.read()
  try:
    d = metadata['Exif.Image.DateTime']
    return d.value.strftime('%Y%m%d%H%M%S')
  except Exception as e:
    return "00000000000000"

if len(sys.argv) > 1:
  for f in sys.argv[1:]:
    try:
      timestamp = getTimestamp(f)
      prefix = "%s_" % timestamp
      if f[0:len(prefix)] == prefix:
        print "File %s was already renamed, not renaming again" % (f)
      else:
        nn = "%s%s" % (prefix, f)
        shutil.move(f, nn)
        print "File %s renamed to %s" % (f, nn)
    except Exception as e:
      print "File %s not renamed (%s)" % (f, e)
else:
  print "Usage: %s <JPG files with Exif tags>" % (sys.argv[0])
    
por Dani CS 09.12.2012 / 18:23

1 resposta

3

A abordagem mais fácil será dividir isso em duas partes.

  • Primeiro, exporte todas as imagens do Shotwell para uma pasta.

  • Em segundo lugar, use pyrenamer para dar aos arquivos o padrão de nomeação que você quer.

Aqui está um exemplo de como usar pyrenamer:

Aqui está o código que usei para tentar corresponder ao seu exemplo na sua pergunta:

{imageyear}{imagemonth}{imageday}_{imagehour}{imageminute}{imagesecond}_{num3+1}.jpg  

Ela produz nomes de arquivos que se parecem com isso:

Observe que você pode adicionar caracteres entre os valores nas chaves (como o sublinhado entre {imageday} e {imagehour}), para facilitar a leitura da saída.

O último bit {num3 + 1} é opcional, mas ajuda se você tiver duas fotos gravadas no mesmo segundo e facilitar a leitura.

Se você fizer isso e descobrir que um ou mais relógios do dispositivo estão desligados, você pode usar o Shotwell para modificar a hora / data , e então refaça o passo pyrenamer para ter tudo em perfeita ordem. Isso é especialmente útil para algo como um casamento em que as pessoas vêm ao evento de diferentes fusos horários, e as fotos fora de ordem parecem totalmente erradas.

Por último, não se esqueça de incluir a extensão do arquivo no final, ou ela será removida e pode causar outros problemas .

    
por Tom Brossman 10.12.2012 / 09:36