Jump to content

Die OM System Community
Ignoriert

Exiftool: Brennweite auf 5 mm runden?


Gast

Empfohlene Beiträge

  • Antworten 50
  • Created
  • Letzte Antwort

Top Posters In This Topic

Top Posters In This Topic

Posted Images

vor 39 Minuten schrieb Subhash:

Das gibt mir die jetzt die „gerundeten” Brennweiten aus, aber nicht die Anzahl davor und nicht „ mm” danach. Ich probiere herum, aber ich komm nicht hin.

Ich ahne schon, was da los ist. Wenn ich zu Hause bin, werde ich noch mal einen Blick werfen.

Wäre es insgesamt nicht sinnvoll, die Rundung vor der Statistik laufen zu lassen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 51 Minuten schrieb Subhash:

Ja.

exiftool -q -q -s -s -s -EXIF:FocalLength *.dng | (while read l u ;do echo -n "$n " ; echo "round($l)" | bc -l ~/Desktop/bc_round.bc; done ) | sort -n | uniq -c

Das hat jetzt bei mit gut funktioniert. Jetzt noch in ein passendes Skript und das Ganze läuft auch aus der tcsh.

 

bearbeitet von Grinzold
Ding statt Ping :-))))
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich

exiftool -q -q -s -s -s -EXIF:FocalLength *.dng | sort -n | uniq -c

aus der bash aufrufe bekomme ich falsche Werte! Nämlich

Zitat

   1 25.0 mm
   3 70.0 mm
   4 149.0 mm

statt:

Zitat

   1 25.0 mm
   3 70.0 mm
   4 149.0 mm
   3 300.0 mm

Die letzte Zeile fehlt also. Rufe ich dagegen mit meinem Rundungsskript

exiftool -q -q -s -s -s -EXIF:FocalLength *.dng | (while read l u ;do echo -n "$n " ; echo "round($l)" | bc -l ~/Desktop/bc_round.bc; done ) | sort -n | uniq -c

auf, dann stimmt’s! (Nur dass eine Rundung bei 4 Werten sinnlos ist. War ja nur ein Test.) Es stört mich noch, dass die "mm" verschwunden sind.

Ich versuche es jetzt einmal mit 1.500 Fotos.

bearbeitet von Gast
Link zu diesem Kommentar
Auf anderen Seiten teilen

Das dauert ziemlich lange, bei mir 5 min.

Mein Rundungsskript macht mich noch nicht so recht glücklich. Immerhin habe ich eine Ausgabe von 1.450 Fotos von 87 auf 45 Zeilen zusammengefasst, aber die Brennweitenbereiche sind nicht so sehr sinnvoll. Es macht zur Zeit:


für x
  5-14: Schrittweite 1 mm
 15-26: Schrittweite 2 mm
 27-41: Schrittweite 3 mm
 42-57: Schrittweite 4 mm
 58-78: Schrittweite 5 mm
 79-103: Schrittweite 6 mm
104-134: Schrittweite 7 mm
135-176: Schrittweite 8 mm
177-233: Schrittweite 9 mm
ab 234: Schrittweite 10 mm

Es lautet:

/* Runden in Schritten, die mit zunehmender Zahl x größer werden: */

define round(x) {
/* a zum kaufmännischen Runden: */
a=0.5
/* scale begrenzt die Anzahl der Kommastellen (dabei keine Rundung): */
scale=1
/* s ist die Schrittweite der Rundung, abhängig von der eingegebenen Zahl: */
s=x/(9+x/15)+a
scale=0
s=s/1
scale=1
y=x/s+a /* x < 5 ergibt Division durch 0! */
scale=0
return y/1*s
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich versuche, die „mm” dazuzuschreiben, z.B. im Klammerausdruck:

(while read l u ;do echo -n "$n " ; echo "round($l)" ; echo " mm" | bc -l ~/Desktop/bc_round.bc; done )

oder so:

(while read l u ;do echo -n "$n " ; echo "round($l)" ; echo " $u" | bc -l ~/Desktop/bc_round.bc; done )

wird die Funktion nicht ausgeführt, sondern angeschrieben und die Sortierung fehlt:

   4  round(149.0)
   1  round(25.0)
   3  round(300.0)
   3  round(70.0)
  11 0

Dafür gibt’s unten eine Extrazeile. Es sind 11 DNGs in diesem Verzeichnis, das stimmt, und sonst nichts.

„Seine Welt ist voller Wunder”, wie die Werbung einst sagte (und wir Schüler als Spott übernahmen).

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Subhash:

Wenn ich versuche, die „mm” dazuzuschreiben, z.B. im Klammerausdruck:


(while read l u ;do echo -n "$n " ; echo "round($l)" ; echo " mm" | bc -l ~/Desktop/bc_round.bc; done )

oder so:


(while read l u ;do echo -n "$n " ; echo "round($l)" ; echo " $u" | bc -l ~/Desktop/bc_round.bc; done )

wird die Funktion nicht ausgeführt, sondern angeschrieben und die Sortierung fehlt:


   4  round(149.0)
   1  round(25.0)
   3  round(300.0)
   3  round(70.0)
  11 0

Dafür gibt’s unten eine Extrazeile. Es sind 11 DNGs in diesem Verzeichnis, das stimmt, und sonst nichts.

„Seine Welt ist voller Wunder”, wie die Werbung einst sagte (und wir Schüler als Spott übernahmen)

Vergiss die 'mm'... Die kann man am Ende wieder dran hängen. Kein allgemeines Rechen-Werkzeug wird mit Einheiten etwas anfangen können.

Von welchem Betriebssystem reden wir hier?

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 52 Minuten schrieb Subhash:

Das dauert ziemlich lange, bei mir 5 min.

Mein Rundungsskript macht mich noch nicht so recht glücklich. Immerhin habe ich eine Ausgabe von 1.450 Fotos von 87 auf 45 Zeilen zusammengefasst, aber die Brennweitenbereiche sind nicht so sehr sinnvoll. Es macht zur Zeit:

Wenn du es sowieso in ein Skript auslagerst, dann baue dir doch if-Anweisungen mit den Brennweitenbereichen ganz nach deinem Geschmack zusammen ... dann läuft's auch schneller.

Viele Grüße, Alex

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb AKauffmann:

Wenn du es sowieso in ein Skript auslagerst, dann baue dir doch if-Anweisungen mit den Brennweitenbereichen ganz nach deinem Geschmack zusammen ... dann läuft's auch schneller.

Das ist sicher sinnvoll. (Hat auch schon TKI vorgeschlagen.) Wie lautet denn da die Syntax? Ich kenne bc nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke, aber ich hab's in der Manpage nachgelesen mit „else if” probiert und bekam parse errors. (Hab's mit einem Workaround gelöst. Jetzt fehlt nur noch „ mm”.) 

bearbeitet von Gast
Ergänzung
Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 16 Stunden schrieb Subhash:

Danke, aber ich hab's in der Manpage nachgelesen mit „else if” probiert und bekam parse errors. (Hab's mit einem Workaround gelöst. Jetzt fehlt nur noch „ mm”.) 

Geht so:

else {

} if {

}

Die 'mm' kriegst du z. B. so: 

echo `bc -l ~/bc_round.bc <<< "round($l)"` mm

statt der Pipe

Also gesamt:

exiftool -q -q -s -s -s -EXIF:FocalLength *.dng  | ( while read l u ; do   echo `bc -l ~/bc_round.bc <<< "round($l)"` mm; done ) | sort -n | uniq -c

 

bearbeitet von Grinzold
Code ergänzt
Link zu diesem Kommentar
Auf anderen Seiten teilen

Super, funktioniert gut!
(Wer ORFs auslesen will, muss im Befehl oben statt „*.dng” „*.ORF” schreiben. Ausgelesen wird im momentan „gültigen” Verzeichnis, das mit „cd” gewechselt wird.)

Hier meine Rundungsfunktion, wie ich sie zur Zeit verwende:

/* Runden in Schritten, die mit zunehmender Zahl x größer werden: */

define round(x) {
/* a zum kaufmännischen Runden: */
a=0.5
/* scale begrenzt die Anzahl der Kommastellen (dabei keine Rundung): */
scale=1
/* s ist die Schrittweite der Rundung, abhängig von der eingegebenen Zahl: */
s = 50 /* y ≥ 150 */
if (x < 151) s = 10 /* 100 ≤ y ≤ 150 */
if (x < 95) s = 5 /* 20 ≤ y ≤ 95 */
if (x < 19) s = 3 /* 9 ≤ y ≤ 18 */
if (x < 9) s = 1 /* 0 ≤ y ≤ 8 */
y=x/s+a
scale=0
return y/1*s
}

 

bearbeitet von Gast
Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ihr schon programmiert - warum dann nicht mit einer flexibleren Sprache? Ich hatte hier z.B. mal ein Python-Skript vorgestellt, das auch die Brennweiten der Altgläser aus der Stabi-Einstellung auslas und zusätzlich zu den Daten der Systemobjektive grafisch darstellte. Das dürfte mit Shellskripten schwierig werden.

Anbei mal ein nahezu selbsterklärender Vorschlag, der Python2.7 und die Module numpy, pylab und pyexiv2 voraussetzt. Man speichert das Skript als ascii-Datei mit der Endung *.py ab und macht es unter unixoiden Systemen ausführbar. Der Erhalt der Einrückungen ist wichtig- sie ersetzen einige der in anderen Sprachen üblichen Klammerschwärme. Anschliessend kann man dem Progrämmchen per Drag'n Drop oder Kommandozeile ein Verzeichnis übergeben und erhält ein Brennweitenhistogramm als Ergebnis. Das Skript sollte unter  Linux, Mac und Win laufen- leider nicht unter Android.

Brennstat3.pdf

Brennstat.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb rodinal:

Wenn ihr schon programmiert - warum dann nicht mit einer flexibleren Sprache? Ich hatte hier z.B. mal ein Python-Skript vorgestellt …

Ich habe von Python keine Ahnung …

vor 2 Stunden schrieb rodinal:

Anbei mal ein nahezu selbsterklärender Vorschlag,

Super, danke! Werde ich gleich ausprobieren!

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also bei mir (Mac) ist mit Drag & Drop einmal nichts. Da wird das Verzeichnis einfach in den Ordner kopiert, in dem das Script liegt. (Das Script wurde ausführbar gemacht.)

Wie geht’s über die Kommandozeile (Terminal)?

Link zu diesem Kommentar
Auf anderen Seiten teilen

1 hour ago, Subhash said:

:classic_mellow:

Das Modul pyexiv2 ist nicht installiert. Kannst du nachholen mit dem Befehl:

pip install pyexiv2

Pip ist das universelle Installations- und Deinstallationsprogramm der Sprache Python. Geht unter Linux und Win prächtig - unter Mac theoretisch auch.

Übergabe per Kommandozeile:

Wenn du das Programm "Brennstat. py" genannt hast und das Verzeichnis "/usr/local/Bilder" untersuchen möchtest, gibst du im Terminal ein:

Brennstat.py  /usr/local/Bilder

Link zu diesem Kommentar
Auf anderen Seiten teilen

Tja, wie so oft ist das wieder einmal nicht so einfach:

Zitat

[...%] pip install pyexiv2
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 7, in <module>
    from pip import main
ImportError: No module named pip

Ich hatte es schon anders versucht:

Zitat

brew install pyexiv2
curl: (35) Unknown SSL protocol error in connection to downloads.sourceforge.net:443 
Error: Failed to download resource "scons"
Download failed: https://downloads.sourceforge.net/project/scons/scons/2.4.1/scons-2.4.1.tar.gz

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Irgendetwas scheint mit deiner Pfadsetzung nicht zu stimmen. Das ist schon merkwürdig, denn m.W. ist Python seit der Version 10.8 Teil des Mac-Betriebssystems (von dessen Feinheiten ich sonst wenig Ahnung habe). Da du den Homebrew-Installer erwähnst: Hast du evtl. eine zweite Python-Version nachinstalliert? Das könnte allerdings für ein ziemliches Chaos gesorgt haben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

4 hours ago, Subhash said:

 

Aber genau diese Vorkommnisse sind es, die mich von allzu viel Open Source Abstand nehmen lassen.

In diesem Fall solite dein Dank aber eher an Apple gehen. Wenn die begrüssenwerterweise Python in ihr Betriebssystem integrieren und das Tool pip installieren, sollte das auch anstandslos arbeiten. Und der 443-Fehler bei brew kommt auch aus dem Dilettantenstadel - aus anderen BS lässt sich der Link problemlos anklicken.

Wenn deim Mac schon bei solchen Kleinigkeiten versagt, betrachte meinen Tipp besser als nicht gegeben. Eigentlich schade - denn Python ist eine Sprache, die sich traditionell nie um Betriebssystemgrenzen gekümmert hat (und mir deswegen stets sympathisch war).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...

Wichtige Information

Wenn Sie diese Seite nutzen, stimmen Sie den Community-Regeln zu. Wir haben Cookies gesetzt, um die Bedienung des Forums zu verbessern. Du kannst deine Cookie-Einstellungen anpassen, andernfalls gehen wir davon aus, dass du damit einverstanden bist. Mehr Informationen in unserer Datenschutzerklärung