Exif-Daten anzeigen (Umsetzungsprobleme einer Skriptidee)

8schpi

Neuer User
Mitglied seit
14 Jan 2014
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Hallo Forum, dies ist mein erster Beitrag. Nach längerem Lesen habe ich durch die Suchfunktion leider keine Lösung gefunden und bin nun auch angemeldet. Ich (36, m + 1F + 1K ;-) möchte euch gerne ein/zwei Fragen zu der Anzeigemöglichkeit von Exifdaten unter Freetz auf der Shell stellen.

Meine Grundlagen sind:
Fritzbox 7270_v3, Freetz: freetz-2.0-11517, AVM-Firmwareversion: 05.53
Softwaremäßig habe ich das Imagemagickpacket mit allen Modulen sowie die shared Library "libexif.so", microperl und gnu-make mit drin. Ich kann momentan das Datum aus den Exifinfos über folgenden Befehl auf der Shell anzeigen lassen:
Code:
identify -format %[EXIF:DateTime] 1.jpg
Der einzige Haken an dem oben beschriebenen Befehl ist, dass die Ausgabe ca. 20 Sekunden bei einem ca. 500kB großen Bild dauert. Ich habe durch Google etc. herausgefunden, dass das daran liegt, dass der Befehl "identify" eine komplette Analyse eines Bildes durchführt. Das ist für meine Zwecke nicht erforderlich und würde die Verarbeitung unnötig ausbremsen (ich möchte mehrere hundert Bilder bearbeiten).

Ich habe weiter gegoogelt und habe folgende Programme / Skripte gefunden:
Exiftools: http://www.sno.phy.queensu.ca/~phil/exiftool/
Exiv2: http://exiv2.org/
Exiftags: http://johnst.org/sw/exiftags/
ImageExiftool: http://search.cpan.org/dist/Image-ExifTool/

Diese Programme müssen teilweise kompiliert werden, teilweise handelt es sich um Skripte (Perl). In der Freetzbuildumgebung bekomme ich exiv2 kompiliert und es funktioniert wie es soll. Die Anzeige des Exifdatum dauert nur Sekundenbruchteile. Wenn ich das kompilierte Programm nach Freetz rüberkopiere funktioniert es leider nicht mehr. Bei den übrigen Alternativen komme ich ebenfalls nicht weiter... Ich habe auch schon versucht das ganze direkt unter Freetz zu kompilieren, da wird mir aber bei dem "make"-Vorgang gesagt, dass unter Freetz der cc-Kompiler fehlen würde.

Hier jetzt meine konkreten Fragen:
  1. Kann man bei dem Befehl "identify" die Analyse des Bildes deaktivieren um die reine Anzeige von Exifdaten (nur das Datum) zu beschleunigen?
  2. Wie benutzt man ggf. die shared Library "libexif.so" auf der Shellebene?
  3. Kann man (wenn ja, wie?) eventuell eigenständige "Exifprogramme" (siehe 4 Alternativen oben) unter Freetz / für Freetz kompilieren?

Wenn die Idee hinter meiner Frage interessiert, der liest bitte weiter, alle anderen bitte einfach die Fragen oben beantworten ;-)

Die Idee, die hinter meiner Frage steckt ist folgende:
Ich möchte einen "Fotoeingangsordner" auf der Festplatte einrichten, welche an meiner Fritzbox angeschlossen ist. Jeden Abend um was weiß ich wieviel Uhr soll ein Skript gestartet werden, welches sich alle *.jpg-Dateien in dem Fotoeingangsordner vornimmt und das Originaldatum aus den Exifinformationen ausliest. Dann soll die Datei nach einem von mir vorgegebenem Schema in den "normalen" Fotoordner einsortiert werden (Unterordner für Jahr, weiterer Unterordner für Tag nach dem Schema "MM--DD").

Elementarer Bestandteil meiner Idee ist natürlich, dass ich die Exifdaten auslesen kann...

An alle, die bis hier gelesen haben:
Vielen Dank für die Geduld und für alle hilfreichen Tipps.
 
Du schreibst, dass du in der Buildumgebung schon exiv2 übersetzt hattest?!? Das kann man danach aber nur auf der Box ausführen, wenn es mit dem Cross-Compiler übersetzt wurde. Hast du das so wie hier beschrieben gemacht?

Wenn nur eine Bibliothek fehlt, kann man die auch noch auf die Box kopieren oder versuchen, das Programm statisch zu linken, so dass es keine Abhängigkeiten mehr hat.

Eine Frage/Vermutung zum "langsamen" Programm: Wenn du die Fotos direkt im USB-Medium ansprichst, kann es auch an dem sehr langsamen USB der FB liegen.
Kannst du mal ein Foto "im RAM" testen (nach /var/tmp kopiert)? Oder hast du das schonmal versucht?

EDIT :
Mit jhead benötigt ein 1,7MB Bild im RAM bei mir Sekundenbruchteile:
Code:
root@fritz:/var/tmp# time ./jhead DSC_0666.jpg 
File name    : DSC_0666.jpg
File size    : 1829586 bytes
File date    : 2014:01:14 19:31:45
[...]
Date/Time    : 2014:01:12 12:23:22
[...]
Focal length : 18.0mm  (35mm equivalent: 18mm)
Exposure time: 0.025 s  (1/40)
[...]
JPEG Quality : 80

real	0m 0.01s
user	0m 0.00s
sys	0m 0.02s
root@fritz:/var/tmp#

Gebaut im jhead-Ordner mit
Code:
export PATH=~/freetz-trunk/toolchain/target/bin/:$PATH

#bauen
CC=mipsel-linux-uclibc-gcc make

# ggf. noch Statisch linken
mipsel-linux-uclibc-gcc -static -o jhead ./jhead.o ./jpgfile.o ./jpgqguess.o ./paths.o ./exif.o ./iptc.o ./gpsinfo.o ./makernote.o  -lm

Das Mipsel-Binary (statisch) ist jetzt auch noch angehängt
 

Anhänge

  • jhead-2.97-mipsel-static.gz
    102.6 KB · Aufrufe: 1
Zuletzt bearbeitet:
Hallo,
danke für die schnelle Antwort. Ein Versuch im Ram mit dem Befehl "identify" hat leider keine Besserung gebracht. Ich bin mir sicher irgendwo gelesen zu haben, dass der Befehl "identify" standardmäßig das komplette Bild analysiert. Mir wäre theoretisch geholfen, wenn man das abschalten könnte...

Ich habe (nochmal) nach obiger Anleitung versucht das Programm exiv2 zu kompilieren. Ich bekomme folgende Fehlermeldung:
undefined reference to `__clzsi2'
./.libs/libexiv2.a(tiffcomposite.o):tiffcomposite.cpp:(.text+0x986c): more undefined references to `__clzsi2' follow
Durch Googeln nach der Fehlermeldungen habe ich verschiedene Hinweise gefunden, aber auch nach heftigem Try&Error bin ich nicht weiter gekommen...

Auch von den übrigen Versuchen kann ich hier nochmal die Fehlermeldungen aufführen:
Das Skript Image-Exiftool liefert beim Aufruf von "./exiftool t/images/ExifTool.jpg"
Can't locate strict.pm in @INC (@INC contains: /usr/lib/perl5/5.11 /usr/lib/perl5/5.11 .) at ./exiftool line 12.

Während des "configure" steigt er bei exif-0.6.21 mit folgender Fehlermeldung aus:
configure: error:
PKG_CONFIG_PATH=
LIBEXIF_LIBS=
LIBEXIF_CFLAGS=

* Fatal: libexif command line interface requires libexif to build.
*
* Possible solutions:
* - set PKG_CONFIG_PATH to adequate value
* - call configure with LIBEXIF_LIBS=.. and LIBEXIF_CFLAGS=..
* - call configure with one of the --with-libexif parameters
* - get libexif and install it:
Leider bin ich an der Stelle auch mit meinem Latein am Ende, obwohl sich die Fehlermeldung recht verständlich liest...

Das Programm exiftags scheint am einfachsten zu sein. Hier steht in der Beschreibung ein "make" erstellt das Programm. Leider sagt make, dass für das Ziel nichts zu tun sein (configure skript nicht vorhanden).

Ich will wirklich nur das Exifdatum auslesen. Wenn noch jemand einen Tipp für mich hat wie ich an einer Stelle weiterkommen kann bin ich demjenigen sehr, sehr dankbar.
 
@MaxMuster: Problem gelöst: mit dem jhead von Dir klappt es:
root@wriff:~# time ./jhead-2.97-mipsel-static
1.jpg
[...]
Date/Time : 2010:09:20 14:09:50
[...]
real 0m 0.01s
user 0m 0.00s
sys 0m 0.00s
Und das ganze auf der Festplatte. Vielen Dank nochmal. Ich würde gerne versuchen das jhead "nachzubauen", aber das ist schon ein "zweites Problem", welches ich auf morgen verschieben möchte. Wenn ich mich dann nochmal melden darf.

Auf jeden Fall nochmal ganz, ganz vielen Dank.

EDIT:
Alles klar, die Neugierde hat gesiegt. Habs direkt nochmal probiert. Nach Deiner Anleitung kann ich das jhead auch aus den Sorucen kompilieren. Allerdings bin ich mir bei der Vorgehensweise immer sehr unsicher und bei mir sind das meistens extreme Orgien von Try&Error. Ich dachte schon ich wär zu blöd zum kompilieren und dass obwohl ich mal gentoo Nutzer war... ;-)
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.