코드로 만든 비디오를 편집 가능한 After Effects 프로젝트로 변환하기
목표는 모션 디지이너가 직접 제작한 것처럼 열고 작업할 수 있는 프로젝트를 만드는 것입니다. 텍스트는 실제 텍스트, 패스는 셰이프 레이어, 각 오브젝트는 이름이 지정된 프리컴프, 카메라는 재키프레임 가능한 하나의 널(Null)로 구현됩니다. 반대로, 렌더링된 프레임 시퀀스를 컴프에 그대로 넣는 것은 편집이 불가능하므로 메인 애니메이션으로 절대 전달하지 마세요.
접근 방식은 세 단계로 이루어집니다:
- 렌더러가 그리는 동일한 데이터로부터 씬을 내보냅니다.
scene.json으로 작성합니다.- 생성된 ExtendScript를 실행하여 After Effects가 스스로 프로젝트를 빌드하도록 합니다.
바이너리 .aep 파일을 직접 작성하지 않습니다.
renderer data ──export──▶ scene.json + assets/ ──make_jsx.js──▶ build.jsx ──After Effects──▶ project.aep (+ check stills)
번들 스크립트 (scripts/ 디렉토리):
aelib.jsx: After Effects 내부에서 실행되는 빌더입니다. 씬을 읽고 컴프, 레이어, 키, 마스크, 이펙트, 매트, 마커 및 오디오를 생성한 후 .aep와 빌드 로그를 저장합니다.make_jsx.js:node make_jsx.js [--portable] scene.json build.jsx. 씬을 검사(누락된 에셋, 잘못된 부모 관계, 프리컴프 순서)하고 하나의 자체 포함된build.jsx를 작성합니다.--portable플래그를 사용하면 경로가build.jsx기준이 되므로 폴더를 압축하여 다른 컴퓨터(Windows 포함)에서 실행할 수 있습니다. 전달하는 모든 것에 사용하세요.run_in_ae.sh:run_in_ae.sh build.jsx /abs/path/Project.aep [timeout]. macOS에서 설치된 After Effects에서 빌드를 실행하고, 완료를 기다린 후 로그를 출력합니다.
익스포터를 작성하기 전에 references/scene-spec.md를 먼저 읽으세요. 모든 필드, 이징, 확인된 이펙트 매치 이름과 값 범위, 그리고 시간을 낭비하는 함정을 정의합니다.
워크플로우
1. 비디오가 그리는 내용을 파악
렌더러를 읽고 화면에 나타나는 모든 것과 그 움직임을 나열합니다:
- 배경 또는 월드.
- 각 오브젝트 또는 문서.
- 각 텍스트 조각.
- 카메라 움직임.
- 단어나 비트에 맞춰진 순간.
- 룩: 그레인, 글로우, 비네트, 모션 블러, 페이드.
- 오디오.
각 항목에 대해 숫자가 어디서 오는지(상수, 지오메트리 함수, 타이밍 파일) 기록합니다.
2. 각 요소를 AE 네이티브 형태로 매핑
모션 디자이너가 직접 만들었을 형태를 선택합니다:
| 코드에서 | After Effects에서 |
|---|---|
| 월드 위의 카메라 움직임 (이동, 확대/축소, 회전) | 하나의 CAMERA null. 앵커 포인트 = 카메라가 바라보는 지점 (월드 좌표). 스케일 = 줌. 회전 = 롤. 위치 = 컴프 중앙. 모든 월드 레이어를 이 널의 자식으로 만듭니다. 그러면 screen = position + R·scale·(p - anchor)는 정확히 캔버스 카메라 변환이 되므로 월드 레이어는 코드에서 사용하는 좌표를 유지합니다. |
| 핸드헬드 셰이크, 충격 효과 | 널의 위치와 회전에 표현식 적용. |