Выражения. Метод framesToTime() After Effects
Функция framesToTime() в Adobe After Effects используется для преобразования количества кадров (frames) в эквивалент времени в секундах. Это полезно, когда известно количество кадров, но надо получить значение времени, соответствующее этому количеству, с учетом частоты кадров композиции.
Список эффектов и не только After Effects
Выражения After Effects список
framesToTime(frames, fps = 1.0 / thisComp.frameDuration);
framesToTime(25);
Преобразовать 50 кадров в секунды (при 25 fps)
«50 кадров = » + framesToTime(50) + » секунды»;
Если у композиции 25 кадров в секунду, то 50 кадров = 2 секунды.
———————
Предположим, вы хотите, чтобы свойство (например, позиция) анимировалось через определённое количество кадров. Вы можете использовать framesToTime() для задания времени в выражениях.
// Выражение для свойства Position
if (time > framesToTime(25)) {
transform.position + 400;
// Позиция после 25 кадров
} else {
[transform.position[0], transform.position[1]];
}
—————-
//Выражение для свойства Позиция слоя
x = transform.position[0] + framesToTime(25 * time) * 30;
y = transform.position[1] + framesToTime(25 * time) * 30;
[x, y];
//Выражение для свойства Позиция слоя
x = transform.position[0] + framesToTime(timeToFrames()) * 30;
y = transform.position[1] + framesToTime(timeToFrames()) * 30;
[x, y];
//Выражение для свойства Масштаб слоя
x = transform.scale[0] + framesToTime(timeToFrames()) * 20;
y = transform.scale[1] + framesToTime(timeToFrames()) * 20;
[x, y];
—————-
Вы можете использовать framesToTime() для создания анимации, которая повторяется через заданное количество кадров.
// Выражение для свойства Rotation
//Это выражение заставляет объект вращаться на 360 градусов каждые 25 кадров, создавая плавный цикл.
var cycleTime = framesToTime(25);
var rotationSpeed = 360; // Полный оборот (360 градусов)
(time % cycleTime) / cycleTime * rotationSpeed;
time % cycleTime — это операция остатка от деления.
time % cycleTime показывает, сколько «лишнего» времени прошло с начала очередного цикла.
Вариант 2
var cycleTime = framesToTime(25);
var rotationSpeed = 360; // полный оборот
if (cycleTime != 0) {
var timeInCycle = time % cycleTime; // остаток времени в текущем цикле
var normalizedTime = timeInCycle / cycleTime; // нормализованное время от 0 до 1
Math.round(normalizedTime * 360); // итоговое вращение
} else {
0;
}
—————-
Если вы хотите, чтобы анимация начиналась через определённое количество кадров, можно использовать framesToTime() для вычисления времени задержки.
// Выражение для свойства Opacity
if (time < framesToTime(30)) {
0; // Непрозрачность 0 до задержки
} else {
100; // Непрозрачность 100 после задержки
}
Слой становится полностью видимым только после 30 кадра
.
Для обратного преобразования (время в кадры) используйте timeToFrames().
framesToTime(25 * time);//Возвращает кадр секунда
framesToTime(framesToTime(time));
framesToTime(timeToFrames());//Возвращает кадр секунда