<= Предыдущая статья ExtendScript + Expression И так, у нас готов макет для титров. Мы движемся к финишной прямой. Нам осталось только дописать скрипт, дополнив его методами копирования моделей на сцену.  Заходим в метод createTitres и сразу после добавления сцены запускаем цикл, проходясь по массиву с данными титров. В цикле мы первым делом пытаемся обнаружить титр на сцене. Для этого мы обращаемся к свойству композиции layers и его методу byName. Зачем мы это делаем, обсудим чуть позже. Пока давайте рассмотрим ситуацию, когда метод возвращает нам null, что значит, нет слоя с таким именем. В методе getTitreComp мы находим модельку титра и, если такой не нашли, возвращаем null. Если же модель нашлась, возвращаем ее дубликат. Далее, мы переименовываем дубликат и добавляем его на сцену методом layers.add, который возвращает нам слой с дубликатом Переходим к редактированию слоя. Для этого создадим метод editLayer, в который будем передавать сам слой, конечную точку предыдущего титра (она послужит стартовой для текущего) и мастер слой из композиции ModelScene, по которому мы будем проводить настройки.  Чтобы получить конечную точку, мы перед запуском цикла с данными титров создадим переменную startTime равную нулю, первый титр начинается в точке ноль А метод editLayer будет нам возвращать новое его значение Чтобы получить мастер слой, в методе getScenesData дополним объект сцены еще одним полем, layers, со слоями нашего макета. А в методе createTitres получим из этого поля интересующий нас слой. И передадим все это методу editLayer Теперь давайте создадим метод editLayer В нем мы проверяем, есть ли мастер-слой и если его нет, делаем все настройки по умолчанию. Давайте с дефолтных и начнем, так как их меньше. Мы перемещаем слой в место, где завершился предыдущий слой и указываем продолжительность слоя пять секунд. Настроек по мастер слою будет на одну больше, Первой строкой мы назначаем слою цвет, в который он будет покрашен на таймлайне. Это очень удобно, когда у вас несколько разных типов титров. Далее, как и в дефолтных, настройках указываем точку входа слоя. Третьей строкой мы высчитываем продолжительность слоя в мастере и прибавив это значение к startTime, получаем значение layer.outPoint, которое и возвращаем в итоге.  Финальный вид этот метод имеет следующий Снова возвращаемся в метод createTitres. Теперь нам надо отредактировать Expressions в наших титрах. Если помните из прошлой статьи, мы в выражениях ссылались на ModelScene_1x1. Теперь же нам надо заменить эти ссылки на на нашу композицию scene-1x1 Метод changeExpression получает композицию с титром, строку которую следует заменить и строку на которую меняем. В самом методе мы проходимся по всем слоям композиции. Количество слоев хранит свойство композиции numLayers. Индексация слоев начинается с единицы. Находим группу свойств слоя ADBE Transform Group (с наименованиями объектов в After Effects можете ознакомиться  тут).  Проходим по всем свойствам группы, их количество хранит numProperties. А далее, находим свойство содержащее выражение и заменяем все вхождения ModelScene_1x1 на titre-1x1. Анимация уже работает. Последнее, что нам осталось сделать, это поменять текст в титре. Мы передаем методу setText слой reference_text, о котором заранее договорились содержать его в каждом макете титра, а также сам текст. Метод setText обращается к свойству текстового слоя SourceText, меняет в его значение свойство text, вновь передавая значение свойству, не пропустите это последнее действие, иначе свойство не поменяет значение. Все готово. Нам осталось лишь описать поведение, если все же композиция с титром уже создана и лежит на сцене. Мы лишь меняем текст в титре. Для этого мы обращаемся к свойству слоя source, хранящее композицию, из которой состоит сам слой. Скрипт готов. Можем его проверить. Вставляем текст титров в текстовое окно плагина Титры выстроились на сцене. Можем выставить их в нужное место таймлайна, изменить длительность.  Второй титр не умещается в рамках сцены. Можно исправление внести в окне плагина и вновь запустив скрипт, можно зайти в композицию титра и отредактировать слой refernce_text. Теперь, соблюдая простые правила составления макета, вы сможете сделать титры любой сложности, на сцене любого формата. На деле скрипт сложнее, он включает в себя копирование эффектов слоев макета на слои сцены и некоторых элементов настройки слоев. Возможно, позже я расскажу об этом. Но уже этот скрипт вполне функционален и пригоден к использованию в производстве видео. Вам надо лишь однажды сделать макет, и вы всегда сможете создавать любое количество его копий буквально за секунды. Скрипт с комментариями вы можете найти тут.  Документацию по работе со слоями в ExtendScript тут. Спасибо за внимание. Если эти уроки окажутся кому-то полезны, будет приятно  узнать о проектах, в которых читатели применят данные навыки. <= Предыдущая статья ExtendScript + Expression Веб разработчик