Classifique e renomeie imagens por data nas informações EXIF

Classifique e renomeie imagens por data nas informações EXIF

Estou uma bagunça na minha pasta de fotos; Quero classificá-los de acordo com a data nas informações EXIF ​​e renomeá-los de acordo com a data (como 001.jpg, 002.jpg e assim por diante).

Como posso fazer isso no Linux? Eu usei o ImageMagick para algumas tarefas básicas de processamento em massa antes (conversão e redimensionamento, etc.). É possível usá-lo para esta tarefa?

Responder1

Você pode usarexiftool. Por alguma razão, o manual online não contém a seção "RENAMING EXAMPLES", que me deu a dica essencial.

Para arquivos apenas JPG, a seguinte invocação de comando deve funcionar:

exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>

Explicação:

  • -ré para recursão
  • '-FileName<CreateDate'diz ao exiftool para renomear o arquivo de acordo com sua tag EXIF CreateDate​​(você pode tentar outros como ModifyDate)
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le'informa como construir a string do nome do arquivo a partir da fonte de data " CreateDate" (o " %-c" acrescentará um contador em caso de colisões de arquivos, o " %le" significa "extensão de arquivo em minúsculas")
  • Observação: usei " -FileName<..." aqui para renomear os arquivos e movê-los para outra pasta em uma única etapa. O manual indica que você deve usar a -Directory<...sintaxe " " para operações de pasta. Funcionou para mim dessa maneira.

Você deve passar algum tempo lendo o manual desta ferramenta poderosa. Talvez haja um caminho ainda mais curto :D

Responder2

Experimente este produto gratuito:Classificador Exif AmoK.

Responder3

A maneira mais simples é apenas importar arquivos para o jbrout ... então (opcionalmente) todos os arquivos podem ter nomes alterados para algo orientado ao tempo. Ou você pode descobrir que não precisa alterar os nomes (e jbrout é suficiente).

Responder4

Para fazer funcionar no Debian Lenny, tente isto:

import pyexiv2, sys, os, time, datetime, random
dirname = sys.argv[1]
flist=os.listdir(dirname)
dic = dict()
for fname in flist:
    image = pyexiv2.Image(sys.argv[1]+'/'+fname) 
    #metadata = pyexiv2.ImageMetadata(sys.argv[1]+'/'+fname)
    #metadata.read()
    image.readMetadata() 
    tag = image['Exif.Image.DateTime']
    timestamp = int(time.mktime(tag.timetuple()))
    #print fname, ' ', tag.value, ' ', timestamp
    try:
    dic[timestamp] = fname
    except:
    print fname, ' not processed.'

keys = dic.keys()
keys.sort()
i = 0 
for k in keys:
    os.rename(sys.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
    i+=1

informação relacionada