ubuntuusers.de

Uebernahme von Foto-Namensschilder (name tags) von Picasa nach Shotwell fuer Foto Unity Lens

Status: Gelöst | Ubuntu-Version: 14.04 (Trusty Tahr)
Antworten |

tecsurf

Anmeldungsdatum:
5. Mai 2014

Beiträge: 6

Hi zusammen!

Manchmal kommen mir auf dem "stillen Ort" einige Ideen. Eine dieser hatte zum Ziel, dass

  • die Ubuntu Unity Photo Lens diejenigen Fotos anzeigt, die mit dem Namen der abgebildeten Person getagged wurden.

Da meine Internet-Recherche nach einer Lösung erfolglos blieb, habe ein Einzeilenskript zusammengestellt.

Hierfür müssen folgende Voraussetzungen gelten:

  • das Ubuntu Paket "exiv2" ist installiert worden

  • das Taggen der Fotos ist mittels des Google Programmes "Picasa" gemacht worden

  • das Script hat unter der Shell "bash" zu funktionieren (für andere Shells sind u.U. Anpassungen nötig)

  • die Fotos sind und worden mittels des Ubuntu Programmes "Shotwell" katalogisiert worden (Achtung: das Programm benötigt begründeterweise viel Arbeitsspeicher!)

  • ...

Einzeilenskript:

find ~/Pictures -iname *.jpg -print 2>/dev/null | while read filename ; do name=`exiv2 -pa ${filename} 2>/dev/null | grep 'Xmp.mwg-rs.Regions/mwg-rs:RegionList.../mwg-rs:Name' | cut -d ' ' -f8- | sed -e ':a;N;$!ba;s/\n/,/g'`; if [ -n "${name##*()}" ]; then echo ${filename}:${name}; exiv2 -M"set Xmp.dc.subject XmpBag ${name}" ${filename}; fi; done

Erklärung der Pipe-Bestandteile:

  • find: Erzeugen einer Liste aller Foto-Dateien mit der Endung ".jpg" im Pictures-Verzeichnis des Benutzer-aktuellen Home-Verzeichnisses, wobei die Unterscheidung der Gross- und Kleinschreibung ignoriert wird

  • while-Schleife: Speicherung aller Dateinamen (aus jeder einzelnen Zeile) in die Variable namens "filename" und die Iteration über jeden dieser Dateinamen

  • exiv2: Speicherung des XMP-Headers zu der jeweiligen Datei in die Variable namens name, wobei:

    • grep: Filterungen der Namensfelder aus den von "Picasa" angelegten virtuellen Bild-Regionen im XMP-Header

    • cut: Ausschneiden der Personennamen aus jenen Namensfeldern

    • sed: Zusammenfügen der Personennamensliste (getrennt durch Zeilenumbrüche) separiert durch Kommata (Anforderung von Shotwell)

    • if: Ausschneiden von Leerzeichen und Filterung von leeren Personennamen

  • exiv2: Speichern der Personennamen im XMP-Header des Fotos

Falls ihr eine ähnliche Problemstellung haben solltet, probiert einfach das Einzeilenskript aus. Für Fragen oder Anregungen stehe ich gerne zur Verfügung.
Have fun & cheers!

Viele Grüsse
tecSurf

Antworten |