Niedawno zaktualizowałem proces organizacji i zarządzania zdjęciami z „nic” do Lightroom 4 i chociaż ogólnie jestem bardzo zadowolony z oprogramowania, jedną z cech, której tak bardzo brakuje, jest możliwość nagrywania dowolnego rodzaju makr lub skryptów w celu automatyzacji powtarzalne zadania - podczas mojej migracji do lightrooma było wiele powtarzalnych zadań, które chciałem wykonać i zastanawiam się, czy warto nauczyć się pisać wtyczki LR, aby wykonać niektóre z tych zadań. Aby podać przykłady rzeczy, które chcę zautomatyzować:
- Na dużej grupie ułożonych w stos zdjęć RAW + PSD + JPG wybierz plik na każdym stosie z rozszerzeniem JPG i umieść go na szczycie stosu
- Wykonaj masową kopię metadanych z (istniejącego) pliku RAW do (istniejącego) pliku JPEG
Widzę wiele innych sposobów, dzięki którym skrypty mogą ułatwić zarządzanie obrazami w Lightroomie, niż jest teraz. Moje pytanie składa się z trzech części:
1) Jak trudno jest pisać wtyczki Lightroom? Jestem dobrze zorientowany w wielu językach programowania (C / C ++, Python, Perl), ale nie zrobiłem nic z Luą. Czy interfejs API Lightroom jest łatwy do podłączenia i czy wymaga specjalistycznych narzędzi do programowania?
2) Czy mogę pisać skrypty, aby łatwo wykonywać zadania, które opisałem powyżej?
3) Czy są jakieś dobre zasoby lub samouczki, które mogę przeczytać, aby rozpocząć tworzenie wtyczki Lightroom?
źródło
Odpowiedzi:
Lua jest prawdopodobnie najprostszym, najczystszym językiem programowania, jaki znam. (I znam kilka .)
Prostota Lui jest także jej największą słabością: będąc małym, czystym językiem z założenia, nie ma w nim wielu rzeczy, których można się spodziewać, gdy pochodzić z języka klasy przemysłowej, takiego jak Java, lub baterii - zawiera język taki jak Python.
Lua została zaprojektowana do rozszerzenia o C, co w tym przypadku oznacza SDK Lightrooma. To świetnie, jeśli Adobe wykonał pracę, aby zapewnić potrzebne narzędzia, które nie są wbudowane w Luę, ale od czasu do czasu prawdopodobnie będziesz wzywał zewnętrzne narzędzia, aby załatwić sprawę.
Jedyną trudną częścią tego jest to, że musisz ustrukturyzować kod źródłowy w określony sposób i zapewnić specjalny
Info.lua
plik, aby poinformować Lightroom o swojej wtyczce. Wszystko to wyjaśniono w dokumentacji SDK . Zestaw SDK zawiera kilka funkcjonujących wtyczek na początek, w tym dość rozbudowaną wtyczkę „hello world”, którą można wyczyścić pod kątem przydatnego kodu początkowego.Możesz sobie poradzić tylko za pomocą edytora tekstu.
W programie Lightroom nie ma wbudowanej funkcji debugowania , ale w pakiecie SDK dostępna jest funkcja rejestrowania debugowania . Możesz złapać te wiadomości w
WinDbg
systemie Windows lubConsole
OS X.Nowszym rozwiązaniem jest open source ZeroBrane Studio Lua IDE. Możesz użyć tego zamiast innego edytora tekstu, ale naprawdę fajne jest to, że można dołączyć go do działającej wtyczki, która pozwala debugować ją podczas działania. Próbowałem tego i pomaga to skrócić czas cyklu usuwania / przeładowywania / restartowania.
Nie sądzę, aby którekolwiek z tych zadań było w 100% wykonalne przy użyciu tylko zestawu SDK Lightroom, ale może dla ciebie zrobić wiele pracy.
Oto trochę niejasny kod podobny do Lua, który doprowadzi Cię prawie do samego końca:
Niestety nie widzę w SDK sposobu na wykonanie tej najbardziej wewnętrznej akcji linii komentarza, przynajmniej od LR 5. Najlepsze, co mogę wymyślić, to zadzwonić
catalog:setSelectedPhotos(peer)
, a następnie pozostawić użytkownikowi kliknięcie znaczka numeru, aby zmienić kolejność stosu.Możesz to zrobić za pomocą istniejącego zestawu SDK, ale istnieją ograniczenia.
Na przykład, chociaż można odczytać wartość
dateTimeOriginal
pola EXIF , w samym zestawie SDK nie ma możliwości ustawienia wartości. Zakładam, że dzieje się tak, ponieważ programiści Lightroom zdecydowali, że nie należy tego nigdy zmieniać programowo, ponieważ jest to cenna informacja z kamery. (Dlaczego miałoby tak być, gdy jest element menu Metadane> Edytuj czas przechwytywania ... nie wiem, ale masz go.)Ale ilekroć SDK próbuje złapać Cię w jedno z tych ograniczeń, często pojawia się właz ewakuacyjny. Możesz na przykład zainstalować ExifTool i wywołać go z Lua. To nie jest idealne rozwiązanie, ponieważ masz wtedy niespójność między metadanymi katalogu i metadanymi zdjęcia, ale Lightroom zauważy i umieści znaczek na zdjęciu, który po kliknięciu pozwoli rozwiązać konflikt, ponownie ładując metadane ze zdjęcia.
(Podczas korzystania z takiej wtyczki będziesz chciał ustawić opcję „Automatycznie zapisuj zmiany w XMP” w oknie dialogowym Ustawienia katalogu. W przeciwnym razie ułatwisz utworzenie dwukierunkowego konfliktu, w którym metadane katalogu i zdjęcia mają zmienione. Lightroom nie wie, jak scalić dwa zestawy metadanych; sprawia, że wybierasz jeden, i zastępuje nim drugą kopię metadanych).
źródło
LrPhoto:setRawMetadata()
na przykład sekcja.Nie znam Lightrooma (jeszcze - mam go, ale jeszcze go nie zainstalowałem), ale w zależności od złożoności tego, co próbujesz zrobić, możesz przyjrzeć się systemowemu narzędziu makro / automatyzacji klawiatury, takim jak AutoHotKey . Pozwala nagrywać lub programować dowolną sekwencję naciśnięć klawiszy, a następnie, po naciśnięciu klawisza skrótu, odtwarza je z powrotem w programie (takim jak LightRoom), dzięki czemu - jeśli chodzi o program - wygląda tak jak to napisałeś. To pozwala zautomatyzować wszelkiego rodzaju rzeczy bez konieczności modyfikacji programów aplikacyjnych.
źródło
Chciałem tylko przyjrzeć się sposobom przetwarzania wsadowego opartego na nazwach plików w Lightroomie iz jakiegoś powodu wyglądało na to, że najłatwiej to zrobić za pomocą interfejsu API. Na podstawie posta @ Warrena udało mi się stworzyć tę wewnętrzną pętlę dla przycisku w formularzu, w którym mógłbym również umieścić pole tekstowe do logowania (
logs_field
) i niektóre wartości wejściowe (takie jak pole tekstowe zawierające nazwy plikówfilenames_field
i niektóre dodatkowe parametry dla partii przetwarzanie wrating_field
):Ten fragment będzie przejść przez kilka wzorców nazw plików i zastosować etykietę do wszystkich zdjęć (warto wymienić
getAllPhotos
zegetMultipleSelectedOrAllPhotos
w przypadku wystarczy uruchomić go na niektórych zdjęciach), które pasują do tych wzorców. Musiałem to zrobić, ponieważ oznaczyłem już zdjęcia poza Lightroomem, ale potrzebowałem łatwego sposobu przeniesienia tych tagów do LR, również na podstawie nazw plików.Cały projekt umieściłem również na githubie , ale powyższy fragment powinien być odpowiedni do użycia jako baza do zadań przetwarzania wsadowego na podstawie nazw plików.
źródło