Субтитры из внешнего файла с помощью выражений (expression) в After Effects.

Начало работы

Создаем новый пустой текстовый файл, туда пишем текст в таком формате:

sub1 = [inPoint (frame), outPoint (frame), “subtitle”];

Например, заполним так:

sub1 = [0,45,”this is where it all began”];
sub2 = [50,75,”a simple text file”];
sub3 = [80,135,”that will change the world, \r forever”];

Сохраните текстовый файл, и получите его абсолютный путь.

В After Effects создаем новый текстовый слой.

Переименуем текстовый слой в sub1 (такое же название как и у первой переменной в вашем текстовом файле).

Пишем выражение (Expression)

Добавим выражения (expression) для Text Layer > Text > Source Text:

var myIndex = thisLayer.name;
$.evalFile(“your_file_path”);
eval(myIndex)[2]

Используем абсолютный путь, вы коде выше, для указания местоположения текстового файла.

Добавим выражения (expression) для Text Layer > Opacity:

var myIndex = thisLayer.name;
$.evalFile(“your_file_path”);

Далее, добавив еще строки выражения в тот же Opacity, сохраним точку входа и точку выхода в двух переменных, и конвертируем их в секунды (25fps):

var start = eval(myIndex)[0]/25;
var end = eval(myIndex)[1]/25;

Добавим еще троки выражения в тот же Opacity. Создадим условие для включения / выключения непрозрачности.

if ( time > start && time < end ) {100} else {0}

Переместим текстовый слой в нижнюю часть кадра.

Дублируйте текстовый слой столько раз, сколько вы создали переменных в текстовом файле.

Используем маркеры в выражении (expression)

Вы можете импортировать маркеры дорожки (трека, клипа) из Premiere (Dynamic Link) или FCP (XML); эти маркеры имеют возможность сохранять таймкод и ввод текста. В After Effects, вы можете добавить маркер к выбранному слою с помощью нажатия Ctrl + 8, также можете добавить их вручную.

marker.numKeys() подсчитывает маркеры на слое
marker.nearestKey() указывает на ближайший маркер
marker.key() указывает на конкретный маркер

Используйте .nearestKey(), чтобы прочитать комментарий хранящийся в ближайшем маркере.

marker.nearestKey(time).comment

Используем проверку if, для сравнения позиции маркера «1» во времени относительно текущего времени.

var m=1;
if (marker.key(m).time <= time) {
marker.key(m).comment;
} else {“”}

Если текущее время находится перед маркером, то он не будет отображать ничего; если текущее время находится после маркера, то он будет отображать комментарий маркера «1». Теперь все, что нам нужно, увеличить переменную «м» каждый раз, когда мы достигаем нового состояния, .nearestkey () делает именно это!

Нужно переопределить переменную «м» с помощью .nearestKey ():

var m = marker.nearestKey(time).index;

Пишем условие else:

var m = marker.nearestKey(time).index;
if (marker.key(m).time <= time) {
marker.key(m).comment;
} else {marker.key(m-1).comment}

Также мы добавим новое условие для m = 1, чтобы отменить marker.key(0)

В итоге, получится такой код для свойства Source text:

var m=marker.nearestKey(time).index;
if (marker.key(m).time <= time) {
marker.key(m).comment;
} else {
if (m == 1) {""} else {marker.key(m-1).comment}
}

Скрипт для конвертирования SRT файла в дорожку из маркеров:

https://github.com/908video/DCSubToAE

Источник: aexpr.wordpress.com

Полноценный видеокурс по After Effects и Моушн Дизайну

Узнать подробнее...