Недавно я обновил рабочий процесс организации и управления фотографиями с «вообще ничего» до Lightroom 4, и, хотя я, как правило, очень доволен программным обеспечением, одной функции, которой ему крайне не хватает, является возможность записи любого рода макросов или сценариев для автоматизации повторяющиеся задачи - во время моей миграции в lightroom было много повторяющихся задач, которые я хотел выполнить, и мне интересно, стоит ли изучать, как писать плагины LR для выполнения некоторых из этих задач. Чтобы дать вам примеры видов вещей, которые я хочу автоматизировать:
- В большой группе фотографий в стопке RAW + PSD + JPG выберите файл в каждой стопке с расширением JPG и сделайте его вершиной стопки
- Выполните массовое копирование метаданных из (существующего) файла RAW в (существующий) файл JPEG
Я вижу множество других способов, с помощью которых скрипты могут сделать управление изображениями в Lightroom еще проще, чем сейчас. Мой вопрос состоит из трех частей:
1) Насколько сложно писать плагины Lightroom? Я хорошо разбираюсь в ряде языков программирования (C / C ++, Python, Perl), но я ничего не делал с Lua. Легко ли подключить Lightroom API и требуются ли какие-либо специализированные инструменты для разработки?
2) Могу ли я написать сценарии для выполнения задач, которые я легко описал выше?
3) Есть ли какие-нибудь полезные ресурсы или учебники, которые я могу прочитать, чтобы начать разработку плагинов для Lightroom?
источник
Ответы:
Lua , наверное, самый простой и чистый язык программирования, который я знаю. (И я знаю несколько .)
Простота Lua также является его самой большой слабостью: будучи маленьким, чистым языком по своему дизайну, в нем не так много встроенных вещей, которые вы ожидаете найти, когда исходите из языка промышленного уровня, такого как Java, или аккумуляторов. включенный язык, как Python.
Lua разработан для расширения на C, что в данном случае означает SDK Lightroom. Прекрасно, если Adobe выполнила работу по предоставлению необходимых инструментов, которые не встроены в Lua, но время от времени вы, вероятно, будете обращаться к внешним инструментам, чтобы добиться своей цели.
Единственная сложность в том, что вам нужно структурировать исходный код определенным образом и предоставить специальный
Info.lua
файл, чтобы сообщить Lightroom о вашем плагине. Все это объясняется в документации по SDK . SDK включает в себя несколько функционирующих плагинов, в том числе довольно сложный плагин «hello world», который можно очистить для получения полезного стартового кода.Вы можете обойтись только с помощью текстового редактора.
В Lightroom нет встроенного средства отладки, но в SDK есть средство ведения журнала отладки . Вы можете поймать эти сообщения в
WinDbg
Windows илиConsole
OS X.Более свежей разработкой является ZeroBrane Studio с открытым исходным кодом Lua IDE. Вы можете использовать это вместо другого текстового редактора, но действительно круто то, что его можно подключить к работающему плагину, который позволяет отлаживать его во время работы. Я пробовал это, и это помогает сократить время цикла отладки исправления / перезагрузки / перезапуска.
Я не думаю, что любая из этих задач на 100% выполнима с использованием только Lightroom SDK, но она может сделать большую часть работы за вас.
Вот некоторые смутно Lua-подобный код , чтобы вы почти всю дорогу:
К сожалению, я не вижу способа в SDK выполнить действие этой самой внутренней строки комментария, по крайней мере, с LR 5. Лучшее, что я могу придумать, - это позвонить
catalog:setSelectedPhotos(peer)
, а затем предоставить пользователю возможность фактически щелкнуть значок с номером, чтобы изменить порядок в стеке.Вы можете сделать это с помощью существующего SDK, но есть ограничения.
Например, хотя вы можете прочитать значение поля EXIF
dateTimeOriginal
, в самом SDK нет возможности установить это значение. Я предполагаю, что это потому, что разработчики Lightroom решили, что это никогда не должно изменяться программно, что это ценная информация с камеры. (Почему так должно быть, когда есть пункт меню «Метаданные> Изменить время захвата ...», которого я не знаю, но он у вас есть.)Но всякий раз, когда SDK пытается поймать вас в ловушку с одним из этих ограничений, часто есть запасной люк. Вы можете установить ExifTool и вызвать его, например, из Lua. Это не идеальное решение, потому что тогда у вас есть несоответствие между метаданными каталога и метаданными фотографии, но Lightroom заметит и поставит значок на фотографии, который при нажатии позволит вам разрешить конфликт путем перезагрузки метаданных из фотографии.
(При использовании такого плагина вы захотите установить параметр «Автоматически записывать изменения в XMP» в диалоговом окне «Параметры каталога». В противном случае вам будет проще создать двусторонний конфликт, в котором метаданные каталога и фотографии имеют Lightroom не знает, как объединить два набора метаданных, он заставляет вас выбрать один и перезаписывает другую копию метаданных.)
источник
LrPhoto:setRawMetadata()
раздел, например.Я не знаю Lightroom (пока - есть, но еще не установил его), но в зависимости от сложности того, что вы пытаетесь сделать, вы можете захотеть взглянуть на системный макрос / инструмент автоматизации клавиатуры, такой как AutoHotKey. , Он позволяет вам записывать или программировать любую последовательность нажатий клавиш, которую вы можете выяснить, а затем, когда вы нажимаете горячую клавишу, он воспроизводит их обратно в вашу программу (например, LightRoom), так что - с точки зрения программы - он выглядит как ты набрал это. Это позволяет вам автоматизировать все виды вещей без необходимости вообще изменять ваши прикладные программы.
источник
Я просто хотел посмотреть, как выполнять пакетную обработку на основе имен файлов в Lightroom, и почему-то это выглядело так, как будто проще всего сделать это через API. Основываясь на посте @ Уоррена, мне удалось создать этот внутренний цикл для кнопки на форме, где я также мог бы поместить текстовое поле для регистрации (
logs_field
) и некоторые входные значения (например, текстовое поле для включения имен файловfilenames_field
и некоторых дополнительных параметров для пакета. обработка вrating_field
):Этот фрагмент код будет пройти через несколько шаблонов имен файлов и применить ярлык на все фотографиях (вы можете заменить
getAllPhotos
сgetMultipleSelectedOrAllPhotos
в случае , если вам нужно только запустить его на некоторых из ваших фотографий) , которые соответствуют этим моделям. Я должен был сделать это, так как я уже пометил фотографии за пределами Lightroom, но мне нужен был простой способ переместить эти теги в LR на основе имен файлов.Я также разместил весь проект на github , но приведенный выше фрагмент кода вполне подойдет для использования в качестве основы для задач пакетной обработки на основе имен файлов.
источник