Bash: Dateien gruppieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
_ash
Beiträge: 1198
Registriert: 13.05.2005 12:35:02

Bash: Dateien gruppieren

Beitrag von _ash » 26.02.2015 22:22:30

In einem Verzeichnis habe ich viele Bilddateien. Manche davon haben denselben Timestamp (jeweils 3 Bilder werden in Serie geknipst). Ich würde gerne Dateien mit gleichem Timestamp in je einem neuen Ordner gruppieren, so dass letztendlich solch eine Struktur entsteht:

dir1
-bild1
-bild2
-bild3
dir2
-bild4
-bild5
-bild6
wobei eben die Bilder in einem Verzeichnis denselben Timestamp haben. Hat mir jemand einen Ansatz, wie das funktionieren könnte?

Benutzeravatar
BerndHohmann
Beiträge: 70
Registriert: 17.02.2015 23:26:44
Wohnort: Nidderau
Kontaktdaten:

Re: Bash: Dateien gruppieren

Beitrag von BerndHohmann » 26.02.2015 23:16:39

_ash hat geschrieben:In einem Verzeichnis habe ich viele Bilddateien. Manche davon haben denselben Timestamp (jeweils 3 Bilder werden in Serie geknipst). Ich würde gerne Dateien mit gleichem Timestamp in je einem neuen Ordner gruppieren, [...]. Hat mir jemand einen Ansatz, wie das funktionieren könnte?
Gar nicht, sonst hätte ich es schon um meine Belichtungsserien für HDR von den normalen Knipsfotos zu separieren.

Der Knackpunkt ist, dass die Timestamps eben nicht identisch sind sondern immer mal über die Sekunde hüpfen, bei HDRs in dunklen Räumen sind auch mal 5-10 Sekunden drin. Also ist eher Zeitjongleurerei angesagt, in der Praxis hat das bei mir nie wirklich funktioniert (selbst als ich es dann nach Java gezogen habe wo ich bessere Routinen habe).

Was besser funktioniert ist der direkte Vergleich der Bilder. Also 1+2, 2+3, 3+4 und wenn es Unterschiede gibt die Reihe abbrechen.

Ich kopier Dir mal was aus einem meiner Tools raus. "compare" ist aus der ImageMagick suite. Die bei mir verwendeten Images für den Vergleich hab ich mir aus JPG extrahiert (die Vorschaubilder darin), den Vergleich in voller Größe durchzuführen dauert zu lange.

Code: Alles auswählen

# limit in percent for similarity
similarity_threshold=65

# Checks the similarity of two images
# $1 first file
# $2 second file
# returns: 1 images matches, otherwise 0
similarity() {
  sim=$(compare -colorspace gray -metric NCC $1 $2 null: 2>&1)
  sim=$(echo "($sim*100+0.5)/1" | bc)	# rounding & integer
  if [ $sim -gt $similarity_threshold ]; then
     return 1
  else
     return 0
  fi
}
Bernd

_ash
Beiträge: 1198
Registriert: 13.05.2005 12:35:02

Re: Bash: Dateien gruppieren

Beitrag von _ash » 26.02.2015 23:48:00

Dreht sich bei mir auch um HDR Bilder. Interessanter Ansatz, vielen Dank! Bei mir liegen die Bilder zu dem Zeitpunkt allerdings in RAW vor.

Meine Idee war, dass man damit zumindest die Bilder mit gleichem Timestamp gruppieren könnte, was den manuellen Aufwand zumindest deutlich reduzieren würde (ich habe ein Skript, was dann Bilder in Verzeichnissen per 'enfuse' zusammenschiebt). Und zumindest tagsüber decken sich die Timestamps oft. Aber klar, Du hast recht, sobald die Belichtung bisschen länger wird, gehts nicht mehr.

Würde Dein Ansatz auch mit RAW Dateien funktionieren?

Benutzeravatar
BerndHohmann
Beiträge: 70
Registriert: 17.02.2015 23:26:44
Wohnort: Nidderau
Kontaktdaten:

Re: Bash: Dateien gruppieren

Beitrag von BerndHohmann » 26.02.2015 23:51:34

_ash hat geschrieben:Würde Dein Ansatz auch mit RAW Dateien funktionieren?
Ja: im RAW ist auch ein JPEG Vorschaubild welches man zum Vergleich extrahieren kann.

Den Timestamp-Vergleich hab ich verwerfen müssen weil es in der Praxis zu extremen Verwürflungen kam weil zb. Bild 3 Zeitlich nicht zu 1+2 passte, aber zu Bild 4,5,6 sodass ich dann 1+2 separiert von 3+4+5+6 hatte - die Nachbearbeitung dauerte dann länger als wenn ich es gleich manuell gemacht hatte.

Ich schick Dir mal per PM das ganze Script (ist eigentlich für was ganz anderes, aber von der Systematik passt das schon).

Bernd

Antworten