Ich habe kürzlich meinen Workflow für die Organisation und Verwaltung von Fotos von "überhaupt nichts" auf Lightroom 4 aktualisiert. Obwohl ich mit der Software im Allgemeinen sehr zufrieden bin, fehlt eine Funktion, die das Aufzeichnen von Makros oder Skripten zur Automatisierung ermöglicht repetitive aufgaben - Während meiner Migration in Lightroom gab es viele repetitive Aufgaben, die ich ausführen wollte, und ich frage mich, ob es sich lohnt, zu lernen, wie man LR-Plugins schreibt, um einige dieser Aufgaben auszuführen. Um Ihnen Beispiele für die Dinge zu geben, die ich automatisieren möchte:
- Wählen Sie in einer großen Gruppe gestapelter RAW + PSD + JPG-Fotos die Datei in jedem Stapel mit der JPG-Erweiterung aus und legen Sie sie oben auf dem Stapel ab
- Führen Sie eine Massenkopie von Metadaten aus einer (vorhandenen) RAW-Datei in eine (vorhandene) JPEG-Datei durch
Ich kann viele andere Möglichkeiten erkennen, mit denen Skripte das Image-Management in Lightroom noch einfacher gestalten können als jetzt. Meine Frage besteht dann aus drei Teilen:
1) Wie schwierig ist es, Lightroom-Plugins zu schreiben? Ich bin mit einer Reihe von Programmiersprachen (C / C ++, Python, Perl) vertraut, aber mit Lua habe ich nichts gemacht. Ist die Lightroom-API einfach zu integrieren und erfordert sie spezielle Tools für die Entwicklung?
2) Kann ich Skripte schreiben, um die von mir beschriebenen Aufgaben problemlos auszuführen?
3) Gibt es gute Ressourcen oder Tutorials, die ich lesen kann, um mit der Entwicklung von Lightroom-Plugins zu beginnen?
quelle
Antworten:
Lua ist wahrscheinlich die einfachste und sauberste Programmiersprache, die ich kenne. (Und ich kenne ein paar .)
Die Einfachheit von Lua ist auch seine größte Schwäche: Da es sich um eine kleine, übersichtliche Sprache handelt, sind nicht viele Dinge eingebaut, die Sie erwarten würden, wenn Sie aus einer industriellen Sprache wie Java oder einer Batterie stammen Sprache wie Python.
Lua ist so konzipiert, dass es von C erweitert wird, was in diesem Fall das SDK von Lightroom bedeutet. Das ist großartig, wenn Adobe die Arbeit geleistet hat, um die Tools bereitzustellen, die Sie benötigen, die nicht in Lua integriert sind, aber ab und zu werden Sie wahrscheinlich externe Tools in Anspruch nehmen müssen, um die Dinge zu erledigen.
Das einzig schwierige daran ist, dass Sie Ihren Quellcode auf eine bestimmte Weise strukturieren und eine spezielle
Info.lua
Datei bereitstellen müssen , um Lightroom über Ihr Plugin zu informieren. Alles wird in den SDK-Dokumenten erklärt . Das SDK enthält mehrere funktionierende Plugins, von denen aus man starten kann, einschließlich eines ziemlich ausgeklügelten "Hallo Welt" -Plugins, das nach nützlichem Startcode durchsucht werden kann.Sie kommen mit nur einem Texteditor zurecht.
In Lightroom ist keine Debugging-Funktion integriert, das SDK enthält jedoch eine Debugging-Funktion . Sie können diese Meldungen entweder
WinDbg
unter Windows oderConsole
unter OS X abfangen.Eine neuere Entwicklung ist die Open Source ZeroBrane Studio Lua IDE. Sie können dies anstelle eines anderen Texteditors verwenden, aber das wirklich coole ist, dass es möglich ist, es an Ihr laufendes Plugin anzuhängen, wodurch Sie es während der Ausführung debuggen können. Ich habe dies versucht, und es hilft, die Zykluszeit für das Beheben / Neuladen / Neustarten des Debugs zu verkürzen.
Ich denke nicht, dass eine der beiden Aufgaben zu 100% nur mit dem Lightroom SDK erledigt werden kann, aber es kann einen Großteil der Arbeit für Sie erledigen.
Hier ist ein vage Lua-ähnlicher Code, mit dem Sie fast den gesamten Weg dorthin zurücklegen können:
Leider sehe ich im SDK keine Möglichkeit, die Aktion der innersten Kommentarzeile auszuführen, zumindest ab LR 5. Am besten rufe ich an
catalog:setSelectedPhotos(peer)
und überlasse es dann dem Benutzer, auf das Nummernschild zu klicken, um den Stapel neu zu ordnen.Sie können einen Teil davon mit dem vorhandenen SDK ausführen, es gibt jedoch Einschränkungen.
Zum Beispiel, während Sie lesen den Wert des EXIF -
dateTimeOriginal
Feld gibt es keine Möglichkeit , im SDK selbst setzen Sie den Wert. Ich nehme an, das liegt daran, dass die Lightroom-Entwickler entschieden haben, dass dies niemals programmgesteuert geändert werden sollte. Das sind wertvolle Informationen von der Kamera. (Warum dies der Fall sein sollte, wenn es einen Menüpunkt Metadaten> Aufnahmezeit bearbeiten ... gibt, weiß ich nicht, aber Sie haben ihn.)Wenn das SDK jedoch versucht, Sie mit einer dieser Einschränkungen zu überlisten, gibt es häufig eine Notausstiegsluke. Sie können beispielsweise ExifTool installieren und von Lua aus aufrufen. Dies ist keine perfekte Lösung, da es dann zu Inkonsistenzen zwischen den Katalog-Metadaten und den Foto-Metadaten kommt. Lightroom erkennt das Foto jedoch und versieht es mit einem Symbol. Wenn Sie darauf klicken, können Sie den Konflikt lösen, indem Sie die Metadaten aus dem Foto neu laden.
(Wenn Sie ein solches Plugin verwenden, sollten Sie die Option "Änderungen automatisch in XMP schreiben" im Dialogfeld "Katalogeinstellungen" festlegen. Andernfalls können Sie leichter einen bidirektionalen Konflikt erstellen, bei dem sowohl Katalog- als auch Fotometadaten vorhanden sind Lightroom weiß nicht, wie die beiden Metadatensätze zusammengeführt werden sollen. Sie müssen nur einen auswählen und überschreiben damit die andere Metadatenkopie.)
quelle
LrPhoto:setRawMetadata()
zum Beispiel den Abschnitt.Ich kenne Lightroom noch nicht (habe es, habe es aber noch nicht installiert), aber je nach Komplexität Ihrer Versuche möchten Sie sich vielleicht ein systemweites Tastaturmakro- / Automatisierungstool wie AutoHotKey ansehen . Damit können Sie eine beliebige Folge von Tastenanschlägen aufzeichnen oder programmieren, die Sie herausfinden können. Wenn Sie dann eine Tastenkombination drücken, werden diese in Ihrem Programm (z. B. LightRoom) wiedergegeben, sodass das Programm so aussieht, wie es ist wie du es geschrieben hast. Auf diese Weise können Sie alle möglichen Dinge automatisieren, ohne Ihre Anwendungsprogramme ändern zu müssen.
quelle
Ich wollte nur sehen, wie die Stapelverarbeitung basierend auf Dateinamen in Lightroom durchgeführt wird, und aus irgendeinem Grund sah es so aus, als ob dies am einfachsten über die API möglich wäre. Basierend auf dem Beitrag von @ Warren habe ich es geschafft, diese innere Schleife für eine Schaltfläche in einem Formular zu erstellen, in dem ich auch ein Textfeld für die Protokollierung (
logs_field
) und einige Eingabewerte (z. B. ein Textfeld mit den Dateinamenfilenames_field
und einigen zusätzlichen Parametern für den Stapel) einfügen konnte Bearbeitung inrating_field
):Dieses Snippet durchläuft einige Dateinamenmuster und weist allen Fotos, die
getAllPhotos
mitgetMultipleSelectedOrAllPhotos
diesen Mustern übereinstimmen , eine Bezeichnung zu (die Sie möglicherweise ersetzen möchten, falls Sie sie nur für einige Ihrer Bilder ausführen müssen). Ich musste dies tun, da ich die Fotos bereits außerhalb von Lightroom mit Tags versehen hatte, aber ich brauchte eine einfache Möglichkeit, um diese Tags auch basierend auf den Dateinamen in LR zu verschieben.Ich habe das gesamte Projekt auch auf Github geschrieben , aber das obige Snippet sollte in Ordnung sein, um als Grundlage für dateibasierte Stapelverarbeitungsaufgaben zu dienen.
quelle