
# After Effects 스크립트 자동화 입문 — ExtendScript/jsx 기초
들어가며
After Effects를 오래 쓰다 보면 결국 비슷한 작업을 끝없이 반복하게 돼요. 레이어 이름 정리하고, 컴프 만들고, 특정 이펙트 붙이고, 프리컴프 나누고, 렌더 전 체크하고요. 저도 처음에는 “이 정도는 금방 하지” 하고 손으로 다 했는데, 외주 일정이 여러 개 겹치기 시작하니까 그런 단순 반복이 제일 먼저 체력을 깎더라고요. 특히 방송 패키지나 SNS 숏폼 시리즈처럼 규칙은 명확한데 물량이 많은 작업에서는, 클릭 몇 번 아끼는 게 아니라 하루 작업 흐름 자체가 달라져요.
실무에서 스크립트를 본격적으로 의식하게 된 건, 같은 구조의 자막 애니메이션 컴프를 수십 개씩 만들어야 했던 때였어요. 텍스트만 바뀌는데 컴프 구조는 똑같고, Null 위치도 같고, 이펙트 세팅도 같았어요. 그때 “이걸 왜 계속 손으로 하고 있지?” 싶어서 After Effects 스크립트 쪽을 파기 시작했어요. 처음엔 어려워 보여도 막상 들어가 보면, 모션그래픽 디자이너가 실무 자동화를 시작하기에 생각보다 진입장벽이 높지 않아요. 오늘은 그 첫 단계인 ExtendScript와 .jsx 기초를 정리해볼게요.
핵심 내용
기본 개념/원리 설명
After Effects에서 말하는 스크립트는, AE 내부 기능을 코드로 제어하는 자동화 도구라고 보면 돼요. 우리가 메뉴를 클릭해서 하는 일들을 코드로 대신 실행하게 만드는 방식이에요. 대표적으로는 이런 작업이 가능해요.
- 새 컴포지션 만들기
- 폴더/레이어 자동 생성
- 이름 일괄 변경
- 특정 속성에 값 넣기
- 선택한 레이어에 이펙트 추가
- 반복적인 정리 작업 자동화
여기서 주로 쓰는 언어가 ExtendScript예요. 문법은 기본적으로 JavaScript와 비슷하지만, 최신 JS 문법이 다 되는 건 아니고 Adobe 환경에 맞게 동작하는 구버전 스타일 자바스크립트라고 생각하면 이해가 쉬워요. 그리고 이 스크립트 파일 확장자가 보통 .jsx예요.
간단히 정리하면 이래요.
ExtendScript: AE에서 돌아가는 스크립트 언어.jsx: 그 스크립트를 저장하는 파일 형식- 목적: 반복 작업 자동화, 실수 감소, 작업 속도 향상
단계별 실사용 방법
#### 1. 가장 먼저 알아둘 객체 구조
After Effects 스크립트는 보통 app 객체에서 시작해요. 그리고 프로젝트, 컴프, 레이어 순서로 접근해요.
대충 이런 흐름이에요.
app: After Effects 앱 자체app.project: 현재 프로젝트item(): 프로젝트 안의 특정 아이템layer(): 컴프 안의 특정 레이어
예를 들어 현재 프로젝트의 첫 번째 아이템에 접근하는 코드는 이렇게 써요.
`jsx
var item = app.project.item(1);
alert(item.name);
`
#### 2. 실행 단위를 묶는 습관
실무에서는 작업을 undo 한 번으로 되돌릴 수 있게 묶는 게 중요해요. 그래서 beginUndoGroup() / endUndoGroup()를 거의 습관처럼 써요.
`jsx
app.beginUndoGroup("Create Comp");
var comp = app.project.items.addComp("Main_Comp", 1920, 1080, 1, 10, 30);
app.endUndoGroup();
`
이렇게 해두면 사용자가 스크립트를 실행한 뒤 Cmd+Z 또는 Ctrl+Z 한 번으로 전체 작업을 되돌리기 쉬워요.
#### 3. 새 컴포지션 만들기
가장 기초적인 자동화 예시예요.
`jsx
app.beginUndoGroup("Make New Comp");
var comp = app.project.items.addComp(
"Intro_Comp",
1920,
1080,
1,
5,
30
);
app.endUndoGroup();
`
이 스크립트는 Intro_Comp라는 이름의 1920x1080, 5초, 30fps 컴프를 만들어요.
#### 4. 선택한 레이어 이름 일괄 변경하기
반복 작업 자동화에서 체감이 가장 빠른 게 이름 정리예요.
`jsx
app.beginUndoGroup("Rename Layers");
var comp = app.project.activeItem;
if (comp && comp instanceof CompItem) {
var selectedLayers = comp.selectedLayers;
for (var i = 0; i < selectedLayers.length; i++) {
selectedLayers[i].name = "MG_" + (i + 1);
}
} else {
alert("컴포지션을 먼저 선택해주세요.");
}
app.endUndoGroup();
`
선택한 레이어들을 MG_1, MG_2, MG_3처럼 바꿔줘요. 방송 그래픽이나 다국어 버전 작업할 때 이런 정리 자동화가 정말 자주 필요해요.
#### 5. 선택 레이어에 Null 추가하고 부모 연결하기
이런 식으로 구조 세팅도 자동화할 수 있어요.
`jsx
app.beginUndoGroup("Add Null And Parent");
var comp = app.project.activeItem;
if (comp && comp instanceof CompItem) {
var nullLayer = comp.layers.addNull();
nullLayer.name = "CTRL_Main";
var selectedLayers = comp.selectedLayers;
for (var i = 0; i < selectedLayers.length; i++) {
selectedLayers[i].parent = nullLayer;
}
} else {
alert("활성 컴포지션이 필요해요.");
}
app.endUndoGroup();
`
반복적으로 컨트롤 Null을 만들고 레이어 묶는 작업이 많다면 이 정도만 해도 손이 꽤 편해져요.
실무 팁 2-3가지
#### 1. 처음부터 거창하게 만들지 않는 게 좋아요
처음부터 UI 패널 만들고 배포 가능한 툴을 만들려고 하면 금방 지쳐요. 제일 먼저는 “내가 오늘 10번 이상 반복한 작업 하나”를 줄이는 데 집중하는 게 좋아요. 예를 들면:
- 레이어 이름 규칙 통일
- 컴프 프리셋 생성
- 선택 레이어에 공통 이펙트 추가
이런 작은 자동화가 실무 효율엔 더 직접적이에요.
#### 2. 활성 컴프 체크를 꼭 넣어요
실무에서 스크립트가 실패하는 가장 흔한 이유 중 하나가, 컴프가 안 열려 있거나 프로젝트 패널이 선택된 상태예요. 그래서 activeItem 체크는 거의 필수예요.
`jsx
if (!(app.project.activeItem instanceof CompItem)) {
alert("컴포지션을 활성화한 뒤 실행해주세요.");
return;
}
`
#### 3. 이름 규칙과 폴더 구조를 같이 설계해야 해요
스크립트 자동화는 코드보다 규칙이 더 중요할 때가 많아요. 예를 들어 컴프 이름이 매번 제각각이면 자동 생성 스크립트가 오히려 애매해져요. 그래서 실무에서는 아래처럼 최소 규칙을 먼저 정해두면 좋아요.
Comp_MasterComp_Text_01CTRL_PRE_OUT_
이렇게 네이밍이 정리돼 있으면, 다음 자동화 단계로 훨씬 쉽게 넘어가요.
자주 하는 실수와 해결법
#### 1. 최신 JavaScript 문법을 그대로 쓰는 경우
ExtendScript는 최신 JS 환경이 아니어서 let, const, 화살표 함수 같은 문법이 안 먹는 경우가 많아요. 그래서 처음엔 안전하게 var 중심으로 작성하는 게 좋아요.
잘 안 되는 예:
`jsx
const name = "Test";
`
대신 이렇게:
`jsx
var name = "Test";
`
#### 2. 선택 상태를 당연하게 생각하는 경우
selectedLayers[0]을 바로 쓰면 선택된 레이어가 없을 때 에러가 나요. 항상 길이 체크를 먼저 해주는 게 안전해요.
`jsx
if (comp.selectedLayers.length === 0) {
alert("레이어를 먼저 선택해주세요.");
return;
}
`
#### 3. Undo 그룹 없이 실행하는 경우
여러 작업이 한 번에 실행됐는데 Undo가 조각나면, 되돌리기 자체가 불편해져요. 실사용 스크립트라면 거의 무조건 Undo 그룹으로 감싸는 습관이 좋아요.
#### 4. 속성 접근 경로를 잘못 잡는 경우
After Effects는 속성 트리가 꽤 깊어요. 예를 들어 Position 값 하나 바꾸는 것도 대상 레이어와 Transform 그룹을 정확히 타고 들어가야 해요.
`jsx
var comp = app.project.activeItem;
var layer = comp.layer(1);
layer.property("Transform").property("Position").setValue([960, 540]);
`
처음엔 이 구조가 낯설지만, 몇 번만 만져보면 패턴이 보여요.
실무 활용 예시
실제 프로젝트에서는 이런 식으로 많이 써요.
예를 들어 유튜브 채널용 브랜디드 숏폼 패키지를 만든다고 해볼게요. 클라이언트가 매주 20개 영상에 같은 인트로 구조를 써야 하고, 제목만 바뀌는 상황이에요. 이때 스크립트로 다음 작업을 자동화할 수 있어요.
- 지정된 이름의 컴프 자동 생성
- 텍스트 레이어와 배경 솔리드 자동 추가
- 컨트롤 Null 생성
- 자주 쓰는 이펙트 프리셋 적용용 기본 구조 세팅
- 출력용 컴프 이름 규칙 통일
이런 자동화가 있으면 디자이너는 구조 세팅에 시간을 쓰는 대신, 실제 모션 퀄리티와 타이포 리듬 조정에 더 집중할 수 있어요. 저도 외주에서 시리즈형 콘텐츠 작업할 때, 아예 “기본 뼈대 만드는 1차 스크립트”를 따로 두고 시작하는 편이에요. 사람이 반복하면 반드시 한두 군데 빼먹는데, 스크립트는 그 부분을 꽤 안정적으로 잡아줘요.
또 다른 예시는 자막 정리 작업이에요. 여러 에디터나 디자이너가 협업하는 프로젝트에서는 레이어 이름, 색상 라벨, 부모 구조가 제각각이 되기 쉬워요. 이럴 때 마감 직전에 정리용 스크립트를 한 번 돌리면 파일 구조가 훨씬 깔끔해져요. 이런 건 겉으로 티는 안 나지만, 수정 대응 속도에서 차이가 크게 나요. 실무에서는 이런 “안 보이는 정리 자동화”가 생각보다 중요해요.
마무리
After Effects 스크립트 자동화는 거창한 개발 영역이라기보다, 반복 작업을 줄이기 위한 실무 도구에 가까워요. 핵심은 세 가지예요. 첫째, ExtendScript는 AE를 제어하는 자바스크립트 기반 스크립트라는 점. 둘째, .jsx 파일로 저장해서 반복 작업을 자동화할 수 있다는 점. 셋째, 처음부터 큰 툴을 만들기보다 내가 자주 하는 단순 작업 하나부터 줄이는 게 가장 효과적이라는 점이에요.
다음 단계로 배우면 좋은 연관 주제는 아래 쪽이에요.
- ScriptUI로 간단한 버튼 패널 만들기
- 자주 쓰는 템플릿 컴프 자동 생성
- expression과 script의 차이 이해하기
- JSON 데이터 연동으로 텍스트 자동 배치하기
모션그래픽 실무에서 스크립트는 결국 시간을 벌기 위한 기술이에요. 한 번 익혀두면 야근 줄이는 데 꽤 직접적으로 도움이 돼요. 특히 물량형 작업이 많은 분들이라면, 이번 기회에 .jsx 한 파일부터 꼭 시작해보시면 좋겠어요.
---
참고 영상
'Daily > 일상' 카테고리의 다른 글
| [AE/모그] Rive vs Lottie 비교 — 인터랙티브 애니메이션 선택 기준 (1) | 2026.04.25 |
|---|---|
| [AE/모그] Lottie 완전 가이드 — After Effects에서 웹 JSON 애니메이션으로 (1) | 2026.04.23 |
| [AE/모그] 모션그래픽 외주 견적 잡는 법 — 시간당 단가와 프로젝트 단가 계산법 (0) | 2026.04.21 |
| [AE/모그] After Effects와 Premiere Pro 다이나믹 링크 100% 활용법 (0) | 2026.04.18 |
| [AE/모그] After Effects 3D 레이어와 카메라 완전 가이드 (1) | 2026.03.14 |