Ich habe im Urlaub mal wieder viele Bilder gemacht und bin gerade dabei
mir Bilder rauszusuchen, die zu einer Belichtungsreihe gehören (für HDR
Photos)
Im Prinzip suche ich ne Möglichkeit Bilder, die innerhalb von 2 Sekunden
aufgenommen wurden in jeweils ein Unterverzeichnis zu schieben.
Hat jemand ne Idee, wie ich das mit einer Batchdatei, shell-skript oder
ähnlich lösen kann?
Man könnte eine Directory-Ausgabe in eine Textdatei umleiten und diese
dann in eine Tabellenkalkulation-Software freier Wahl importieren und
dort über eine Abfrage (bei Excel nennt sich das Ding "Wenn"...) die
einzelnen Datume (heisst das so?) vergleichen lassen und die kleinste
Differenz anzeigen lassen.
3-10 Minuten dürfte sowas dauern...
Mit ExifTool kannst du dir per Perl Scipt aus den Exifdaten z.B.
Brennweite, Kameraorientierung, Aufnahmezeitpunkt und - soweit vorhanden
- auch noch Standortkoordinaten und Blickrichtung herausziehen.
http://www.sno.phy.queensu.ca/~phil/exiftool/
Das sollte für ein ausreichend zuverlässiges Filter reichen. Falls das
eine einmalige Aktion ist, s.o.
Pink Shell schrieb:> Mach's von Hand. 10000 Bilder hast du in einer Stunde durchgescrollt. In> der Zeit hast Du kein Skript geschrieben, getestet, debugged und> ausgeführt.
Und beim nächsten Urlaub dann wieder. Wie man mit fast 3 Bildern pro
Sekunde das EXIF-Datum liest, Ordner anlegt und bei Bedarf verschiebt,
möchte ich sehen.
Habe beim Abendessen etwas gebastelt (die Stunde kam inklusive Einlesen
in nötige Module ungefähr hin). Das Ergebnis braucht python und PIL, hat
keine Sicherheitsmaßnahmen gegen bösartige Dateinamen, muss unter
Windows wahrscheinlich etwas angepasst werden und ist nur minimal
getestet. Zur Vorsicht wird nichts verschoben, sondern es werden Befehle
ausgegeben, die man in ein hinterher auszuführendes Shellscript umleiten
kann. Aufruf mit
Hallo Tom,
vielen Dank für das Skript. Da ich bisher nicht mit Python gearbeitet
habe musste ich mich erst was einlesen.
Wie du schon vermutet hast, benötigt das für Windows7 noch Anpassungen.
Ich habe mir portable Python von hier installiert (enthält dann auch
PIL)
http://www.portablepython.com/wiki/PortablePython2.7.2.1
Dann habe ich den PyScripter gestartet, dein Skript reinkopiert, die
Kommandozeilenparameter auf C:\Test gesetzt und gestartet.
Folgende Ausgabe:
1
Command Line : c:\Test
2
# ignoring c:\Test\IMG_4490.JPG
3
# ignoring c:\Test\IMG_4491.JPG
4
# ignoring c:\Test\IMG_4492.JPG
5
mkdir "c:\Test/foo_00001"
6
mv "c:\Test\IMG_4493.JPG" "c:\Test/foo_00001/"
7
mv "c:\Test\IMG_4494.JPG" "c:\Test/foo_00001/"
8
mv "c:\Test\IMG_4495.JPG" "c:\Test/foo_00001/"
9
# ignoring c:\Test\IMG_4497.JPG
10
# ignoring c:\Test\IMG_4498.JPG
Suchen und Auswählen der passenden Dateien funktioniert also schon.
Leider gibt es anscheinend Probleme mit dem BackSlash bzw. Schrägstrich.
Also habe ich den Schrägstrich ausgetauscht
1
foldername = '%s/foo_%05d' % (wd, num)
gegen das getauscht.
1
foldername = '%s\foo_%05d' % (wd, num)
Dann wird aber der Backslash ignoriert
1
*** Remote Interpreter Reinitialized ***
2
>>>
3
Command Line : c:\Test
4
# ignoring c:\Test\IMG_4490.JPG
5
# ignoring c:\Test\IMG_4491.JPG
6
# ignoring c:\Test\IMG_4492.JPG
7
mkdir "c:\Testoo_00001"
8
mv "c:\Test\IMG_4493.JPG" "c:\Testoo_00001/"
9
mv "c:\Test\IMG_4494.JPG" "c:\Testoo_00001/"
10
mv "c:\Test\IMG_4495.JPG" "c:\Testoo_00001/"
Geht also auch nicht...
Zusätzlich werden die Befehle auch nicht vom Betriebssystem ausgeführt.
(Mir ist klar, dass ich mv noch gegen move austauschen muss, aber der
mkdir geht ja auch nicht)
Werner A. schrieb:> Zusätzlich werden die Befehle auch nicht vom Betriebssystem ausgeführt.> (Mir ist klar, dass ich mv noch gegen move austauschen muss, aber der> mkdir geht ja auch nicht)
Liegt daran:
Tom schrieb:> Zur Vorsicht wird nichts verschoben, sondern es werden Befehle> ausgegeben, die man in ein hinterher auszuführendes Shellscript umleiten> kann.
Also: Ausgabe des Programms in eine (.BAT)-DAtei schreiben lassen, und
die dann prüfen und ausführen.
Hallo,
der \ escaped traditionell das nächste Zeichen, damit er im String
erhalten bleibt, muss er selbst escaped werden, also z.B.
1
foldername = '%s\\foo_%05d' % (wd, num)
Statt der .BAT kann man evtl. auch Befehle mit os.system() ausführen,
statt sie mit print auszugeben.
Das DELTA in der korrigierten Version muss auch angepasst werden, falls
Du das nicht schon selbst gesehen hast, ich hatte keinen Bilderordner
mit Fotos im Sekundenabstand zum testen.
Hallo Tom,
nochmals vielen Dank für deine tolle Arbeit.
Ich habe gerade alle Bilder wegsortiert (wegsortieren lassen)
Wieder 'nen bischen was gelernt und für den nächsten Urlaub vorbereitet
;-)
Wenn es noch jemand gebrauchen kann, hier die notwendigen Schritte
- http://www.portablepython.com/wiki/PortablePython2.7.2.1
herunterladen
- nach c:\Portable installieren
- HDRsearch.py nach c:\Portable\Portable Python 2.7.2.1\MyApps kopieren
- HDR_prepare.bat in das Verzeichnis mit den Bildern kopieren und
aufrufen
Es werden hier keine Dateien verschoben, sondern nur die Datei
HDR_move.bat erzeugt.
- Die Datei HDR_move.bat mit nem Editor öffnen und überprüfen, z.B.
immer 3 Bilder verschoben werden sollen
- Wenn die Datei HDR_move.bat dann aufgerufen wird werden
Unterverzeichnisse angelegt und die entsprechenden Bilder verschoben.