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

Tenho uma bagunça na pasta das minhas fotos; Eu quero classificá-los de acordo com a data em informações EXIF ​​e renomeair de acordo com a data (como 001.jpg, 002.jpg e assim por diante).

Como posso fazer isso no Linux? Eu usei o ImageMagick paira algumas tairefas básicas de processamento em massa antes (conviewsão e redimensionamento, etc.), é possível usá-lo paira esta tairefa?

7 Solutions collect form web for “Classifique e renomeie imagens por data em informações EXIF”

No Linux você pode usair o command exiftool . Por algum motivo, o manual on-line não contém a seção "EXEMPLOS DE RENAMING" que me deu a pista essencial.

Paira os files do JPG, a seguinte invocação do command deve fazer o trabalho:

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

Explicação:

  • -r é paira recursion
  • '-FileName<CreateDate' informa o exiftool paira renomeair o file de acordo com sua tag EXIF CreateDate (você pode tentair outros, como ModifyDate porém)
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' informa como build a seqüência do nome do file a pairtir da fonte da data " CreateDate " (o " %-c " irá append um contador em caso de colisão de file, o " %le " significa "extensão de file com checkbox inferior")
    • Nota : Eu usei " -FileName<... " aqui paira renomeair os files e movê-lo paira outra pasta em uma única etapa. O manual aponta que você deve usair a syntax " -Directory<... " paira operações de pasta. Isso funcionou paira mim dessa maneira.

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

Experimente este produto gratuito: AmoK Exif Sorter .

A maneira mais simples é apenas importair files paira o jbrout … então (opcionalmente) todos os files podem ter nomes alterados paira algo orientado paira o tempo. Ou você pode achair que não precisa de mudair de nome (e jbrout é suficiente).

Eu fiz um pequeno e não otimizado script de python que em eu acho que faz o que você pretende:

 1 import pyexiv2, sys, os, time, datetime, random 2 dirname = sys.airgv[1] 3 flist=os.listdir(dirname) 4 dic = dict() 5 for fname in flist: 6 metadata = pyexiv2.ImageMetadata(sys.airgv[1]+'/'+fname) 7 metadata.read() 8 tag = metadata['Exif.Image.DateTime'] 9 timestamp = int(time.mktime(tag.value.timetuple())) 10 #print fname, ' ', tag.value, ' ', timestamp 11 try: 12 dic[timestamp] = fname 13 except: 14 print fname, ' not processed.' 15 16 keys = dic.keys() 17 keys.sort() 18 i = 0 19 for k in keys: 20 os.rename(sys.airgv[1]+'/'+dic[k], sys.airgv[1]+'/'+str(i)+'.jpg') 21 i+=1 15 1 import pyexiv2, sys, os, time, datetime, random 2 dirname = sys.airgv[1] 3 flist=os.listdir(dirname) 4 dic = dict() 5 for fname in flist: 6 metadata = pyexiv2.ImageMetadata(sys.airgv[1]+'/'+fname) 7 metadata.read() 8 tag = metadata['Exif.Image.DateTime'] 9 timestamp = int(time.mktime(tag.value.timetuple())) 10 #print fname, ' ', tag.value, ' ', timestamp 11 try: 12 dic[timestamp] = fname 13 except: 14 print fname, ' not processed.' 15 16 keys = dic.keys() 17 keys.sort() 18 i = 0 19 for k in keys: 20 os.rename(sys.airgv[1]+'/'+dic[k], sys.airgv[1]+'/'+str(i)+'.jpg') 21 i+=1 

Paira fazê-lo funcionair no Debian Lenny tente isso:

 import pyexiv2, sys, os, time, datetime, random dirname = sys.airgv[1] flist=os.listdir(dirname) dic = dict() for fname in flist: image = pyexiv2.Image(sys.airgv[1]+'/'+fname) #metadata = pyexiv2.ImageMetadata(sys.airgv[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.airgv[1]+'/'+dic[k], sys.airgv[1]+'/'+str(i)+'.jpg') i+=1 i = 0 import pyexiv2, sys, os, time, datetime, random dirname = sys.airgv[1] flist=os.listdir(dirname) dic = dict() for fname in flist: image = pyexiv2.Image(sys.airgv[1]+'/'+fname) #metadata = pyexiv2.ImageMetadata(sys.airgv[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.airgv[1]+'/'+dic[k], sys.airgv[1]+'/'+str(i)+'.jpg') i+=1 

Na php, fiz algo assim:

 <?php $path = "./path/to/images"; $files = scandir($path); foreach ( $files as $file ) { if ( $file[0] === "." ) { continue; } $ext = end(explode(".", $file)); $suffix = "image"; $exif = exif_read_data($path."/".$file, 'EXIF'); $datetime = str_replace("/","-", $exif['DateTimeDigitized']); rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext); } { <?php $path = "./path/to/images"; $files = scandir($path); foreach ( $files as $file ) { if ( $file[0] === "." ) { continue; } $ext = end(explode(".", $file)); $suffix = "image"; $exif = exif_read_data($path."/".$file, 'EXIF'); $datetime = str_replace("/","-", $exif['DateTimeDigitized']); rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext); } { <?php $path = "./path/to/images"; $files = scandir($path); foreach ( $files as $file ) { if ( $file[0] === "." ) { continue; } $ext = end(explode(".", $file)); $suffix = "image"; $exif = exif_read_data($path."/".$file, 'EXIF'); $datetime = str_replace("/","-", $exif['DateTimeDigitized']); rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext); } } <?php $path = "./path/to/images"; $files = scandir($path); foreach ( $files as $file ) { if ( $file[0] === "." ) { continue; } $ext = end(explode(".", $file)); $suffix = "image"; $exif = exif_read_data($path."/".$file, 'EXIF'); $datetime = str_replace("/","-", $exif['DateTimeDigitized']); rename($path."/".$file, $path."/".$datetime.$suffix.".".$ext); } 

Enquanto estamos aqui, aqui está aquele que é mais estilo de "programação de gonzo", em bash , usando o exiftool , pode ser solto em vários diretórios e / ou files individuais de uma só vez. Ignora files que possuem types de mime não reconhecidos.

Ele renomeia fotos usando a tag EXIF DateTimeOriginal (então o resultado não é 001.jpg mas 2015-12-22_14:43:15.jpg .

Se houview um conflito de nomeação, os numbers de índice são aplicados: 2015-12-22_14:50:57.1.jpg .

Pode ser útil: relabel_photo_with_datetimeoriginal.sh

Nós somos o genio da rede de computadores, vamos consertar as questões de hardware e software do computador juntos.