Sortieren und benennen Sie Bilder in EXIF-Informationen nach Datum um


9

Ich habe ein Durcheinander in meinem Fotoordner. Ich möchte sie in EXIF-Informationen nach Datum sortieren und nach Datum umbenennen (wie 001.jpg, 002.jpg usw.).

Wie kann ich das unter Linux machen? Ich habe ImageMagick bereits für einige grundlegende Aufgaben der Massenverarbeitung verwendet (Konvertieren und Ändern der Größe usw.). Ist es möglich, es für diese Aufgabe zu verwenden?

Antworten:


21

Unter Linux können Sie den Befehl exiftool verwenden . Aus irgendeinem Grund enthält das Online-Handbuch nicht den Abschnitt "RENAMING BEISPIELE", der mir den wesentlichen Hinweis gab.

Für JPG-Dateien sollte der folgende Befehlsaufruf den Job ausführen:

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

Erläuterung:

  • -r ist für die Rekursion
  • '-FileName<CreateDate'weist exiftool an, die Datei entsprechend ihrem EXIF-Tag umzubenennen CreateDate(Sie können jedoch auch andere ausprobieren ModifyDate)
  • -d '%Y-%m-%d/%H_%M_%S%%-c.%%le'gibt an, wie die Dateinamenzeichenfolge aus der Datumsquelle " CreateDate" erstellt wird (das " %-c" fügt bei Dateikollisionen einen Zähler an, das " %le" steht für "Dateierweiterung im unteren Gehäuse")
    • Hinweis : Ich habe hier " -FileName<..." verwendet, um die Dateien umzubenennen und innerhalb eines Schritts in einen anderen Ordner zu verschieben. Das Handbuch weist darauf hin, dass Sie die " -Directory<..." -Syntax für Ordneroperationen verwenden müssen. Das hat bei mir aber so funktioniert.

Sie sollten einige Zeit damit verbringen, das Handbuch dieses leistungsstarken Tools zu lesen. Vielleicht gibt es einen noch kürzeren Weg: D.


1
Die Umbenennungsbeispiele in der Dokumentation: sno.phy.queensu.ca/~phil/exiftool/… .
Rwoo


2

Der einfachste Weg ist, einfach Dateien in jbrout zu importieren ... dann können (optional) alle Dateien in zeitorientierte Namen geändert werden. Oder Sie stellen möglicherweise fest, dass Sie die Namen überhaupt nicht ändern müssen (und jbrout ist ausreichend).


1

Ich habe ein kleines und nicht sehr optimiertes Python-Skript erstellt, das meiner Meinung nach genau das tut, was Sie beabsichtigen:

1 import pyexiv2, sys, os, time, datetime, random
2 dirname = sys.argv[1]
3 flist=os.listdir(dirname)
4 dic = dict()
5 for fname in flist:
6     metadata = pyexiv2.ImageMetadata(sys.argv[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.argv[1]+'/'+dic[k], sys.argv[1]+'/'+str(i)+'.jpg')
21     i+=1

Sie müssen diese Bibliothek tilloy.net/dev/pyexiv2
celebdor

1

Versuchen Sie Folgendes, damit es in Debian Lenny funktioniert:

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

1

In PHP habe ich so etwas gemacht:

<?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);
}

0

Während wir gerade dabei sind, gibt es hier einen Stil, der eher dem "Gonzo-Programmierstil" entspricht. Er kann bashmithilfe exiftoolmehrerer Verzeichnisse und / oder einzelner Dateien auf einmal losgelassen werden. Es werden Dateien mit nicht erkannten MIME-Typen übersprungen.

Es benennt Fotos mit dem DateTimeOriginalEXIF-Tag um (das Ergebnis ist also nicht 001.jpgaber 2015-12-22_14:43:15.jpg.

Bei einem Namenskonflikt werden Indexnummern angewendet : 2015-12-22_14:50:57.1.jpg.

Kann nützlich sein: relabel_photo_with_datetimeoriginal.sh

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.