Skript o.ä für C1 BUG Umgehung

ObiTobi

ObiTobi

Aktives Mitglied
Thread Starter
Dabei seit
05.11.2009
Beiträge
1.536
Reaktionspunkte
91
Hallo,

vielleicht hat jemand eine gute Idee wie ich zumindest ein von nervigen Bugs in Capture One umgehen kann.

Mit C1 (Capture One) kann man die XMP Dateien lesen und auch schreiben lassen. Damit sollte zumindest theoretisch Austausch von Informationen (einige Metadaten) zwischen C1 und anderen Programmen möglich sein. Nun hat aber C1 ein Problem mit Farbmarkierungen bzw. eigentlich 2 Probleme.
Für die Farbmarkierungen werden in den XMP Dateien 2 Datensätze geschrieben. In unterschiedlichen Formaten (alt und neu)

<xmp:Label>Red</xmp:Label>
<xmp:Urgency>1</xmp:Urgency>

So sieht eine Datei aus wenn C1 die XMP schreibt. Die meisten (wenn nicht alle) moderne Programme verstehen nur die Notation <xmp:Label>Red</xmp:Label>. Das <xmp:Urgency> ist alte Notation und wird einfach ignoriert.
Wenn jetzt also ich die Markierung in Bridge oder sonst wo verändert habe z.B auf <xmp:Label>Yellow</xmp:Label> sieht die XMP Datei so aus:


<xmp:Label>Yellow</xmp:Label>
<xmp:Urgency>1</xmp:Urgency>

C1 liest die Datei wieder ein und beachtet selbst aber nur den Satz <xmp:Urgency>1</xmp:Urgency> und stellt die Farbe wieder auf Rot und schreibt dann auch wieder die XMP Datei mit

<xmp:Label>Red</xmp:Label>
<xmp:Urgency>1</xmp:Urgency>
was natürlich so nicht gedacht/ gewollt ist.

So jetzt die Idee die ich für das Problem habe. Es mussten alle Ordner wo ich Bilder habe überwacht werden und zwar ob sich eine der *.xmp Dateien verändert haben. Wenn ja musste das Nummerische Feld also <xmp:Urgency> einen Wert bekommen der dem im <xmp:Label> stehendem Namen entspricht.
Also wenn Yelow dann 3, wenn Blue dann 5 usw.

Ich kenne Automator und AppleScript zu wenig um beurteilen zu können ob die Umsetzung überhaupt von der Performance realisierbar wäre. Es nutzt natürlich gar nicht, wenn man den Rechner mit Überwachung in die Knie zwingt.

Wäre so etwas realisierbar und ist praktikabel oder wird der Rechner nur mit sich beschäftigt? Wenn man das in Automator/ AppleScript machen kann wäre ich für Codeschnipsel sehr dankbar.
 
Ich kenne mich mit dem Format nicht aus, aber wenn <xmp:Urgency> tatsächlich nicht mehr benötigt wird, wäre es dann nicht einfacher, das Element prinzipiell aus dem DOM zu entfernen? Das könnte man recht performant mit einem sed Befehl machen, den man dann in eine Automator-Aktion einbindet.
Etwa so:
Code:
sed 's/\<xmp:Urgency\>[0-9]+\<\/xmp:Urgency\>//g' Dateiname
Das sieht etwas häßlich aus, weil man vtml. die spitzen Klammen "escapen" muss (hab ich mit \ gemacht).
Du solltest mal mit einer Testdatei rumprobieren, ich hab es nicht getestet!
Hier weitere Hinweise zu sed: http://www.thegeekstuff.com/2009/09...-text-inside-a-file-using-substitute-command/
Zu sed wird dir im Forum https://www.macuser.de/forum/unterforum/22-Mac-OS-X-UNIX abr sicher genre auch geholfen.
Viel spaß damit
ruerueka
 
Na so einfach ist es eben nicht.
"Neue" Notation sieht so aus, dass NUR <xmp:Label> verwendet wird. "Alte" Notation verwendet NUR <xmp:Urgency>.
Capture One schreibt beide Werte rein, ließt selbst aber nur das "Alte" also <xmp:Urgency>. Das bedeutet, so bald ich eine Datei mit neueren Programm bearbeite, wird entsprechend das <xmp:Label> aktualisiert. In dem Moment passen die Werte Urgency und Label nicht zu einander. OK - ich habe natürlich vergessen zu schreiben dass "Urgency" und "Label" die gleiche Bedeutung haben. Die Werte werden nur anders eingetragen - Urgency - Nummerisch, Label - Name

Um diese Werte wieder auf "gleichen" Stand zu bringen will ich eben mit einem Script o.ä dafür sorgen, dass nach jeder Änderung einer *.xmp Datei der Wert in Urgency dem Eintrag in Label angeglichen wird.

Vielleicht ist es so etwas klarer.
 
na dann musst da halt Urgency nicht rausnehmen, sondern korrigieren. Geht grundsäzlich mit dem Befehl oben, du brauchst halt für jede Farbe eine eigene Zeile (ist das sinnvoll - wieviele Farbcodes gibt es denn?).
Der Grundaufbau des sed Befehls ist:
Code:
sed 's/SUCHBEGRIFF/ERSETZUNGSWERT/g' Dateiname
Du musst suchen nach
Code:
<xmp:Label>Red</xmp:Label>$[[:space:]]+<xmp:Urgency>[[:digit:]]+</xmp:Urgency>
(Also alle "Label=Red" mit beliebigen numerischen Wert bei Urgency) und dann eben ersetzen durch
Code:
<xmp:Label>Red</xmp:Label><xmp:Urgency>1</xmp:Urgency>
(bzw. dem richtigen numerischen Wert...
Damit das klappt, musst du auch Zeilenumbruch und Tabulator / Whitespace erwischen, darum $[[:space:]] ... und du musst wieder die spitzen Klammern und slashes escapen, ich habs weggelassen, damit man den Code besser lesen kann. Ich habs eh nicht getestet, es soll nur als Anregung zum selbst spielen dienen...
Hier noch mal eine Übersicht zur "Regulären Ausdrücken": http://www.tutorialspoint.com/unix/unix-regular-expressions.htm
Wenn du aber viele Farbcodes erwischen musst, wird das mit dieser Methode sehr aufwändig, da würde sich vermutlich ein "richtiges" Programm lohnen, das auf eine Map zugrift, in der die alten und neuen Werte einander zugeordnet sind. Ein solches Programm würde ich dann aber mit Java (andere Leute mit ihrer bevorzugten Sprache) schreiben und dann auch die XML-Datei mit einem entsprechenden Werkzeug verarbeiten und nicht über einfache Textersetzung rumpfuschen...
 
Zurück
Oben Unten