18:36 

Скрипты в After Effects

Alexandr-Dolgov
Используем JavaSсript для добавления EXIF информации в time-lapse.

Предисловие
Видео в предыдущем посте сделано полностью из фотографий. А теперь я добавил информацию о выдержке и времени съемки для каждой фотографии. Эта информация взята из EXIF, куда фотоаппарат записывает множество различных параметров снимка. Взята с помощью программы ExifToTxtGUI (о программе, скачать). Программа эта написана моим хорошим знакомым, дайри пользователем zzeneg, за что ему спасибо. В кратце: ExifToTxtGUI способна из кучи фотографий вытащить EXIF и затем параметры по выбору пользователя сохранить в текстовый файл. У меня было чуть менее 5000 фотографий и первым делом я вытащил дату и время каждого снимка, получив текстовый файл с огромным количеством строк (чуть менее пяти тысяч, ваш КО).

Выбираем After Effects
Чтобы для каждого кадра показать время съемки нужно создать для каждого кадра титр продолжительностью в один кадр с этим самым временем съемки. Учитывая что кадров у меня очень много, и что в ручную это делать крайне долго, я решил искать средство автоматизации, и естественно нашел. В программе Adobe After Effects есть замечательное средство, под названием - сценарии. Сценарии пишутся на языке Javasсript и позволяют автоматизировать практически любые действия.

Документация
И я столкнулся с необходимостью поиска информации по языку JavaSсript, а точнее по командам работы с After Effects. И такая информация нашлась на Adobe Developer Connection , куда меня вывела, как ни странно, встроенная справка After Effects -- Help -- Scripting help... Эта информация - полное официальное англоязычное руководство по написанию скриптов в After Effects: After Effects CS3 Scripting Guide.pdf К сожалению английские тексты для меня сильно замедляют восприятие информации, надо больше практики. Зато потом я нашел русскую статью о скриптах в After Effects. Она конечно не такая полная по сравнению с официальным руководством, зато позволяет намного быстрее написать свой первый скрипт.

Среда разработки
В документации говорится также о среде разработке скриптов ExtendScript Toolkit. Чтобы туда попасть из After Effects нужно выбрать File -- Scripts -- Open sсript Editor. К этой программе есть встроенная англоязычная справка где в основном рассматриваются интерфейсы пользователя в скриптах, межпрограммное взаимодействие и прочие общие вещи. Частные же функции для After Effects описываются в After Effects CS3 Scripting Guide.pdf.
Также и с After Effects и с ExtendScript Toolkit поставляются уже написанные скрипты для примеров, у меня они расплоагаются по след. путям:
C:\Program Files (x86)\Adobe\Adobe After Effects CS4\Support Files\Scripts
C:\Program Files (x86)\Adobe\Adobe Utilities\ExtendScript Toolkit CS4\SDK\Samples\javasсript

Код скрипта
Ну чтож, я выяснил где писать и как писать, теперь за дело:

//скрипт для добавления длительности экспозиции

//очищаем область вывода, это в After Effects -- Window -- Info
clearOutput();

//задаем параметры будущей композиции
var copmName="myComp"; //string
var width=1920; //integer
var height=1080; //integer
var pixelAspectRatio=1; //float
var duration=120; //float
var frameRate=30; //float

//создаем саму композицию
var myComp = app.project.items.addComp(copmName, width, height, pixelAspectRatio, duration, frameRate);

//вибираем текстовый файл с нужной нам Exif инфомацией
var textFile = fileGetDialog ("Please select txt file", "txt");

//открываем его для чтения
textFile.open("r", "TEXT", "????");

//выводим в Info объем файла
writeLn(textFile.length+" byte");

//считаем количество строк в файле
var i = 0;
while (!textFile.eof)
{
textFile.readln();
i = i + 1;
}
var numLineFile = i;
//выводим в Info количество строк файла
writeLn(numLineFile + " lines");
textFile.close();

//это окно с таким текстом и кнопкой ОК, чтобы мы могли разглядеть Info
alert("click OK and wait");

textFile.open("r", "TEXT", "????");
i = 0;
var myTextLayer;
var textLine;
while (!textFile.eof)
{
//читаем строку в текстовом файле и переводим курсор на след.
textLine = textFile.readln();
//на входе будут строки с временем экспозиции либо в виде десятичной дроби "0,*" либо 1
//десятичную дробь переводим в обыкновенную
if (textLine.substr(0,1) == '0')
{
textLine = "0." + textLine.substr(2);
textLine = "1/" + (1 / parseFloat(textLine));
}
// в нашу композицию добавим текстовый слой с только что прочтенным текстом
myTextLayer = myComp.layers.addText(textLine);
i = i + 1;
//выведем в Info какаю строчка сейчас обрабатывается и сколько их всего
writeLn(i + "/" + numLineFile);
//задаем время входа и вермя выхода текстового слоя в композицию
myTextLayer.inPoint = i / frameRate;
myTextLayer.outPoint = (i + 1) / frameRate;
}
//закрываем открытый для чтения файл
textFile.close();

//все готово, наслаждаемся
alert ("finish");

Сохраняем текст скрипта в ExtendScript Toolkit и через негоже кнопкой F5 запускаем на выполнение в After Effects.


Наслаждаемся результатом


Выводы
Автоматизация и скрипты рулят. Без них такая задача была бы не под силу. А теперь с помощью полученного видео можно следить за освещенностью дня и длительностью выдержек. Наверняка часы будут очень кстати при продолжительных time-lapse, например при съемке роста растений и прочих медленных явлений природы.

На будущее осталось огромное поле возможностей скриптов. А в своем скрипте я хочу сделать графический интерфейс пользователя, сделать полный цикл создания time-lapse в одном скрипте, чтение и добавление различных данных из Exif напрямую из скрипта.
И конечно касательно самой фотографии: буду пробовать HDR time-lapse и новые ракурсы новых мест. Все только начинается...

запись создана: 28.09.2011 в 19:51

@темы: DIY, IT, видео, программирование, фото

URL
Комментарии
2012-12-28 в 16:49 

Интересно и остроумно.

URL
     

Флуктуация мыслей

главная