애프터이펙트 표현식(Expression) 3편 - time으로 키프레임 없이 움직이기, Math.round로 숫자 정리하기

2편에서는 슬라이더와 확인란으로 값을 조절했습니다. 3편에서는 키프레임을 하나도 찍지 않고 레이어를 계속 움직이게 하는 time과, 소수점이 길게 붙는 숫자를 깔끔하게 정리하는 Math.round를 다룹니다. 카운트다운이나 숫자가 올라가는 카운터 자막을 만들 때 바로 쓸 수 있습니다.
애프터이펙트 표현식(Expression) 2편 - 표현식 컨트롤로 슬라이더·체크박스 연결하기
1편에서는 값, 배열, 변수 같은 기본 규칙을 정리했습니다. 2편에서는 표현식을 실제 작업에서 편하게 쓰게 해 주는 표현식 컨트롤을 다룹니다. 속성 값을 매번 코드로 고치는 대신, 슬라이더나
park3min.com
이번 편 화면은 영문 인터페이스로 캡처했습니다. 한글 UI에서는 Source Text는 소스 텍스트, Rotation은 회전, Position은 위치, Slider Control은 슬라이더 컨트롤, Slider는 슬라이더로 보입니다. 표현식 뚝딱 도구로 연결하면 코드 안의 이름도 한글로 들어가므로, 본문 코드의 "Slider"는 "슬라이더"로 바꿔서 보시면 됩니다.
1. time은 "지금 몇 초인지"를 알려 주는 값입니다
time은 현재 플레이헤드가 컴포지션의 몇 초 지점에 있는지를 숫자로 알려 줍니다.
- 0초 지점이면 0
- 1초 지점이면 1
- 2.5초 지점이면 2.5
눈으로 확인하는 가장 쉬운 방법은 텍스트 레이어에 표시해 보는 것입니다.
- 텍스트 도구로 텍스트 레이어를 하나 만듭니다.
- 타임라인에서 텍스트 레이어를 펼치고 Text > Source Text(텍스트 > 소스 텍스트)의 스톱워치를 Option(Alt) + 클릭합니다.
- 입력창에 다음을 입력합니다.
time
입력하는 중에 자동 완성 목록이 뜨는데, 목록에서 time을 골라도 되고 그대로 입력한 뒤 입력창 바깥을 클릭해도 됩니다.

플레이헤드를 움직이거나 재생하면 숫자가 계속 바뀝니다. 다만 2.002002002...처럼 소수점이 길게 붙습니다. 29.97fps 컴포지션에서는 프레임 단위가 딱 떨어지지 않아서 2초 지점도 정확히 2가 아니라 2.002 정도로 나옵니다. 이 부분은 5절에서 정리합니다.
2. 키프레임 없이 계속 회전시키기
time은 시간이 지날수록 커지는 숫자이므로, 여기에 숫자를 곱하면 계속 변하는 값이 됩니다. Rotation(회전)의 스톱워치를 Option(Alt) + 클릭하고 입력합니다.
time * 90

- 1초에 90도씩 돌아갑니다.
- 2초 지점이면 180도, 4초 지점이면 360도(한 바퀴)입니다.
아래 화면은 2초 지점입니다. 회전 값이 0x+180.2°로 나오는데, 앞에서 말한 것처럼 29.97fps에서는 2초 지점이 2.002초라서 소수점이 조금 붙은 것입니다.

곱하는 숫자가 곧 속도입니다. time * 360이면 1초에 한 바퀴, time * -90이면 반대 방향으로 돕니다.
3. 키프레임 없이 계속 이동시키기
위치는 값이 2개인 배열이었습니다(1편). X만 시간에 따라 움직이고 Y는 그대로 두려면 Position(위치)에 이렇게 씁니다.
[position[0] + time * 200, position[1]]
원래 X 위치에서 1초에 200픽셀씩 오른쪽으로 이동합니다. 원래 위치가 960이었으므로 2초 지점에서는 X가 1360.4가 됩니다.

position[0] +를 넣는 이유는 레이어의 원래 위치에서 출발하게 하기 위해서입니다. 이 부분을 빼고 time * 200만 쓰면 X가 0(화면 왼쪽 끝)에서 출발합니다.
4. 속도를 슬라이더로 조절하기
2편에서 배운 슬라이더를 연결하면, 코드를 고치지 않고 속도만 바꿀 수 있습니다. 레이어에 Slider Control(슬라이더 컨트롤)을 추가하고 이름을 "속도"로 바꾼 뒤 Rotation(회전)에 입력합니다.
var speed = effect("속도")("Slider");
speed * time

슬라이더를 90으로 두면 1초에 90도, 360으로 두면 1초에 한 바퀴 돕니다. 위 화면은 슬라이더 90, 17프레임(약 0.57초) 지점이라 회전이 51.1°입니다.
5. Math.round로 소수점 정리하기
1절에서 본 것처럼 time에는 소수점이 길게 붙습니다. Math.round()는 괄호 안의 숫자를 가장 가까운 정수로 반올림합니다. 소스 텍스트의 코드를 이렇게 바꿉니다.
Math.round(time)

2초 17프레임(약 2.567초) 지점이라 반올림해서 3이 표시됩니다.
- 2.3 → 2
- 2.5 → 3
- 2.7 → 3
Math는 수학 계산 기능을 모아 둔 자바스크립트 기본 도구입니다. 대문자 M으로 써야 합니다. math.round라고 쓰면 오류가 납니다.
소수점 한 자리만 남기기
Math.round()는 항상 정수로 만듭니다. 소수점 한 자리를 남기고 싶으면 10을 곱해서 반올림한 뒤 다시 10으로 나눕니다.
Math.round(time * 10) / 10
같은 2.567초 지점에서 2.567 → 25.67 → 26 → 2.6 순서로 계산되어 2.6이 표시됩니다. 두 자리를 남기려면 10 대신 100을 씁니다.

반올림, 내림, 올림
| 코드 | 동작 | 2.7일 때 |
|---|---|---|
Math.round() |
반올림 | 3 |
Math.floor() |
내림 | 2 |
Math.ceil() |
올림 | 3 |
6. 활용 1: 10초 카운트다운
Math.floor()를 쓰면 카운트다운을 만들 수 있습니다. 소스 텍스트에 입력합니다.
10 - Math.floor(time)
- 0초~0.99초: 10
- 1초~1.99초: 9
- ...
- 9초~9.99초: 1
3초 지점에서는 10 - 3 = 7이 표시됩니다.

반올림(Math.round)을 쓰면 0.5초 지점에서 숫자가 바뀌어 박자가 어긋나므로, 카운트다운에는 내림(Math.floor)이 맞습니다.
10초가 지나면 0, -1처럼 음수가 나옵니다. 컴포지션 길이를 10초로 두거나, 이후 편에서 다룰 Math.max나 조건문으로 막을 수 있습니다.
7. 활용 2: 숫자가 올라가는 카운터 자막
조회수나 금액이 0에서 1,000까지 올라가는 카운터는 슬라이더와 Math.round를 같이 씁니다.
- 텍스트 레이어에 Slider Control(슬라이더 컨트롤)을 추가합니다.
- Slider에 키프레임 2개를 찍습니다. 0초에 0, 2초에 1000.
- 소스 텍스트에 입력합니다.
Math.round(effect("Slider Control")("Slider"))
한글 UI라면 Math.round(effect("슬라이더 컨트롤")("슬라이더"))가 됩니다. 표현식 뚝딱 도구로 슬라이더를 끌어다 연결한 뒤 앞뒤에 Math.round(와 )만 붙여도 됩니다.

1초 16프레임 지점에서 슬라이더 값은 754.10이지만, Math.round가 정수로 바꿔 줘서 화면에는 754로 나옵니다. 키프레임을 선택하고 Easy Ease(F9)를 걸면 끝에서 천천히 멈추는 카운터가 됩니다.
여기서 time 대신 슬라이더 키프레임을 쓴 이유가 있습니다. 시작과 끝 숫자, 걸리는 시간을 키프레임으로 눈에 보이게 조절할 수 있어서 수정이 편합니다.
8. 레이어가 시작하는 시점부터 세고 싶을 때
time은 컴포지션 기준 시간입니다. 레이어를 5초 지점에 놓아도 time은 5부터 시작합니다. 레이어가 등장한 순간부터 0으로 세고 싶으면 레이어 시작 시간(inPoint)을 뺍니다.
time - inPoint
카운트다운에 적용하면 이렇습니다.
10 - Math.floor(time - inPoint)
아래 화면은 레이어를 5초 지점으로 민 상태입니다. 6초 18프레임 지점은 레이어가 시작한 지 1초가 조금 넘은 때라서 9가 표시됩니다.

9. 자주 하는 실수
| 증상 | 확인할 것 |
|---|---|
math.round에서 오류 |
Math는 대문자 M |
| 소수점이 길게 나온다 | Math.round()로 감쌌는지 |
| 카운트다운이 0.5초에 바뀐다 | Math.round 대신 Math.floor를 썼는지 |
| 레이어를 옮겼더니 숫자가 이상하다 | time - inPoint를 썼는지 |
| 이동하는 레이어가 화면 왼쪽 끝에서 출발한다 | position[0] +를 넣었는지 |
| 슬라이더 연결 코드에서 오류 | 효과 이름과 속성 이름이 화면과 같은지(영문 UI는 Slider, 한글 UI는 슬라이더) |
정리
| 항목 | 핵심 |
|---|---|
time |
현재 컴포지션 시간(초) |
time * 숫자 |
키프레임 없이 계속 변하는 값, 숫자가 곧 속도 |
Math.round() |
반올림해서 정수로 |
Math.floor() / Math.ceil() |
내림 / 올림 |
| 소수점 한 자리 | Math.round(값 * 10) / 10 |
time - inPoint |
레이어 시작 시점부터 세기 |
다음 편
4편에서는 레이어를 무작위로 흔드는 wiggle을 다룹니다. 한 축만 흔들기, 흔들림 세기를 슬라이더로 조절하기까지 정리합니다.
참고: Adobe After Effects 표현식 공식 문서, François Lefebvre 『After Effects: The Power of Expression』(개념 참고)
'영상편집 > 어도비 애프터이펙트' 카테고리의 다른 글
| 맥에서 한글판 애프터이펙트 영문판으로 바꾸는 방법 (ae_force_english.txt) (0) | 2026.10.12 |
|---|---|
| 애프터이펙트 표현식(Expression) 2편 - 표현식 컨트롤로 슬라이더·체크박스 연결하기 (0) | 2026.10.11 |
| 애프터이펙트 표현식(Expression) 시작하기 1편 - 값, 배열, 변수, 세미콜론 (0) | 2026.10.11 |
| 애프터이펙트 바운스 표현식(expression) 코드 공유 (0) | 2024.11.22 |
| 애프터이펙트 익스프레션 변수 : 꼭 알아야 할 세 가지 특징 | 빠르크의 애프터이펙트 익스프레션 강좌 02강 (0) | 2022.04.11 |
| 애프터이펙트 익스프레션 값의 종류 4가지 | 빠르크의 애프터이펙트 익스프레션 강좌 01강 (0) | 2022.04.11 |
| 빠르크의 애프터이펙트 3분 강좌 8강 애프터이펙트 텍스트 긴 그림자 만들기 (0) | 2021.06.05 |
| 11월 어도비 세일! 주의할 점은?! (0) | 2020.11.10 |
파이널컷프로
파이널컷프로
프리미어프로
파이널컷프로
파이널컷프로
프리미어프로
문서 작성
공문
이메일
폰트
앱 설치
댓글