
In meinem Fotoordner herrscht ein Durcheinander. Ich möchte die Bilder nach Datum in den EXIF-Informationen sortieren und entsprechend dem Datum umbenennen (wie 001.jpg, 002.jpg usw.).
Wie kann ich das unter Linux machen? Ich habe ImageMagick bereits für einige grundlegende Massenverarbeitungsaufgaben verwendet (Konvertieren und Größenänderung usw.). Ist es möglich, es für diese Aufgabe zu verwenden?
Antwort1
Sie könnenExiftool. Aus irgendeinem Grund fehlt im Online-Handbuch der Abschnitt „UMBENENNUNGSBEISPIELE“, der mir den entscheidenden Hinweis gab.
Für reine JPG-Dateien sollte der folgende Befehlsaufruf funktionieren:
exiftool -r '-FileName<CreateDate' -d '%Y-%m-%d/%H_%M_%S%%-c.%%le' <yourFolder>
Erläuterung:
-r
ist für Rekursion'-FileName<CreateDate'
weist exiftool an, die Datei entsprechend ihrem EXIF-Tag umzubenennenCreateDate
(Sie können aber auch andere Methoden ausprobierenModifyDate
)-d '%Y-%m-%d/%H_%M_%S%%-c.%%le'
gibt an, wie der Dateiname aus der Datumsquelle "CreateDate
" gebildet wird (das "%-c
" hängt einen Zähler für Dateikollisionen an, das "%le
" steht für "Dateierweiterung in Kleinbuchstaben")- Notiz: Ich habe hier " " verwendet, um die Dateien in einem Schritt umzubenennen und in einen anderen Ordner zu verschieben. Im Handbuch wird darauf hingewiesen, dass man für Ordneroperationen
-FileName<...
die " "-Syntax verwenden muss . Bei mir hat es so aber funktioniert.-Directory<...
Du solltest dir die Zeit nehmen, das Handbuch dieses mächtigen Tools zu lesen. Vielleicht gibt es einen noch kürzeren Weg :D
Antwort2
Probieren Sie dieses kostenlose Produkt:AmoK Exif Sorter.
Antwort3
Am einfachsten ist es, die Dateien einfach in jbrout zu importieren. Anschließend können (optional) alle Dateien umbenannt werden, sodass sie zeitorientiert sind. Oder Sie stellen fest, dass Sie die Namen überhaupt nicht ändern müssen (und jbrout reicht aus).
Antwort4
Damit es in Debian Lenny funktioniert, versuchen Sie Folgendes:
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