Categories: AI 생산성

ai 애프터이펙트 영상 생성 자동화

ai로 애프터이펙트 영상자동화가 가능하다는 것을 알고 계신가요? 포토샵이나 일러스트레이터를 AI에게 맡겨 보셨다면 영상 쪽도 궁금하실 텐데요. 애프터 이펙트는 프로젝트 전체를 코드로 만들 수 있게 열려 있습니다. 레이어를 놓고 시간마다 값을 찍는 일을 전부 스크립트로 적으면, 사람이 화면을 한 번도 클릭하지 않아도 영상 한 편이 나옵니다.

애프터 이펙트 플랜 살펴보기

※ 이 글에는 제휴 링크가 포함되어 있으며, 제휴활동을 통해 소정의 수수료를 지급받을 수 있습니다. 구매자에게 추가 비용은 발생하지 않습니다.

영상파일 하나 없이 사진 11장으로 12초 세로 영상을 만들면서 어떻게 ai가 애프터이펙트를 다루는지 공유합니다.

아래 내용들 중에 많은 부분은 사람이 직접 할 필요가 없습니다. ai가 애프터이펙트를 다루는 것도 클로드코드와 애프터이펙트만 설치되어 있으면 됩니다. 애프터이펙트는 크리에이티브클라우드를 구독중이시면 별도로 비용이 들어가지 않습니다.

애프터이펙트의 계산 값이며 어떤 보정 값으로 수정하며.. 등등은 모두 ai가 할 영역입니다. 사람은 결과물을 보고 어떤식으로 되어야하는지, 내가 원하는 움직임은 어떤 것인지를 다시 알려주면 됩니다.

오늘 작업으로 만들어진 영상은 위와 같습니다.

사람이 정하는 값과 스크립트가 계산하는 값 나누기

자동화를 설계할 때는 어떤 값을 사람이 넣고 어떤 값을 계산에 맡길지부터 나눴습니다. 경계를 먼저 그어두면 나머지 설계가 따라옵니다.

사람이 정하는 값스크립트가 계산하는 값
화면에서 보일 폭 (600px)레이어 배율 (%)
궤도 각도와 반경카메라 x·z 좌표
초점이 맞을 시각초점 거리 키프레임
문구 등장과 퇴장 시각자간·흐림 애니메이터 키프레임

왼쪽에 남긴 값은 전부 화면을 보면 맞는지 알 수 있습니다. 퍼센트나 좌표처럼 화면만 봐서는 판단이 안 되는 값은 계산에 넘겼습니다. 반대로 나누면 자동화를 해놓고도 사람이 계속 숫자를 만지게 됩니다.

바뀌는 값을 파일 맨 위 표로 몰아두기

사람이 정하는 값은 스크립트 여기저기에 흩어두지 않고 파일 맨 위에 모아뒀습니다. 다음 영상을 만들 때 아래쪽 코드는 건드리지 않고 이 부분만 바꾸면 되니까요.

W, H, FPS, DUR = 1080, 1920, 24, 12.0
ZOOM = 900.0                       # 30mm 상당 광각
POI0 = (790.0, 1210.0, 140.0)      # 카메라가 겨누는 지점

ORBIT = [                          # (시간, 각도°, 반경, 카메라 높이)
    (0.00, -25.0, 1780, 1180),
    (3.00, -13.0, 1400, 1060),
    (6.00,   3.0, 1180,  975),
    (9.20,  26.0, 1150,  900),
    (12.00, 36.0, 1305,  945),
]

카메라 위치를 x, y, z 좌표로 적어두면 궤도를 조금 넓히려 할 때 모든 값을 다시 계산해야 합니다. 각도와 반경으로 적어두고 좌표는 계산으로 뽑으면, 반경 숫자 하나만 바꿔도 전체 궤도가 따라옵니다.

def cam_at(deg, r):
    t = math.radians(deg)
    return (POI0[0] + r * math.sin(t), POI0[2] - r * math.cos(t))

소재도 같은 방식으로 표에 적습니다. 파일 이름, 원본 폭, 놓을 위치, 화면에서 보일 폭을 한 줄에 담아두면 사진을 교체할 때 줄 하나만 고치면 됩니다.

# (파일, 원본폭, 월드x, y, z, 화면에서 보일 폭, 위글, 회전)
MID = [
    ('sa-apple-a.png',    1086, 1270, 1620,  360, 360, 7, 3.2),
    ('sa-apple-c.png',    1150, -280, 1510,  520, 330, 7, 2.6),
    ('fr-apple-core.png', 1200, 1210,  820,  340, 340, 6,-3.4),
]

위에 얘기한 부분들은 사실 다 ai가 처리한 부분들입니다. 저는 영상에서 원하는 스타일로 3D카메라로 영상이 입체적인 카메라 움직임과 깊이감을 얻고 싶었던 것이고 지시도 그런 정도만 했습니다.

화면에서 보일 폭으로 배율 계산하기

사진을 앞뒤로 세워두면 같은 크기로 넣어도 화면에서 보이는 크기가 제각각이 됩니다. 뒤에 놓인 사진일수록 작게 보이니까요. 손으로 맞추면 사진 한 장 옮길 때마다 다시 계산하게 됩니다.

3D 레이어의 화면 배율은 카메라 줌을 레이어와 카메라 사이 거리로 나눈 값입니다. 원하는 화면 폭이 정해지면 배율은 한 줄로 나옵니다.

def sc_for(nat_w, pos, want):
    return 100.0 * want * math.dist(REF, pos) / (nat_w * ZOOM)

nat_w는 원본 사진의 픽셀 폭, pos는 레이어 월드 좌표, want는 화면에서 보이길 원하는 폭입니다. REF는 기준 시각의 카메라 위치인데, 카메라가 움직이므로 중간 시점 하나를 기준으로 잡아 둡니다.

덕분에 지시도 숫자가 아니라 눈에 보이는 크기로 하게 됩니다. “이 사진을 60.4%로 줄여줘” 대신 “화면에서 600px쯤 보이게 해줘”라고 말하면 퍼센트는 계산으로 나옵니다.

위에 말한 600픽셀쯤 보이게.. 이런 얘기 저는 직접 한 게 아니라 클로드코드가 스스로에게 한 명령이라고 보시면 됩니다. 그렇게 스스로 설정하고 깊이감을 추가하고 흐릿하게 보일 것 명확하게 보일 것을 제가 정해준 정도에서 자유롭게 설정하는 거예요.

한국어판 애프터 이펙트에서 매치네임으로 속성 붙이기

해외 자료를 보고 스크립트를 짜면 속성 이름이 전부 영문으로 적혀 있습니다. 한국어판 애프터 이펙트에서는 그 이름으로 속성을 찾지 못하고 실행이 멈춥니다. 속성마다 따로 붙어 있는 내부 이름, 매치네임을 쓰면 어느 언어판에서든 잡힙니다.

function P(l, mn){ return l.property("ADBE Transform Group").property(mn); }
P(layer, "ADBE Position").setValue([x, y, z]);
P(layer, "ADBE Rotate Y").expression = expr;

var trk = animator.property("ADBE Text Animator Properties")
                  .addProperty("ADBE Text Tracking Amount");

한글 텍스트도 그대로 넣으면 깨집니다. \uXXXX로 이스케이프해서 넘기면 됩니다.

esc = ''.join(ch if ord(ch) < 128 else '\\u%04X' % ord(ch) for ch in text)

결과를 로그 파일로 받아오기

애프터 이펙트에는 표준 출력이 없습니다. 스크립트를 실행해도 무엇이 만들어졌는지 알 방법이 없어서, 감싸는 스크립트에서 로그 파일에 적어두고 나중에 읽는 방식을 씁니다.

var LOG = new File("/절대경로/.ae-log.txt");
LOG.open("w");
try { $.evalFile(new File("/절대경로/orchard2.jsx"));
  for (var i=1; i<=app.project.numItems; i++){ var it = app.project.item(i);
    if (it instanceof CompItem) LOG.write("comp="+it.name+" layers="+it.numLayers+"\n"); }
} catch(e) { LOG.write("ERROR: "+e.toString()+" @line "+e.line+"\n"); }
LOG.close();

에러도 이 파일로 들어옵니다. 몇 번째 줄에서 멈췄는지가 남아서, 스크립트를 고칠 때 화면을 열어보지 않아도 됩니다.

기존 프로젝트를 닫아두는 줄도 필요합니다. 열려 있는 프로젝트가 있으면 저장 여부를 묻는 창이 떠서 자동 실행이 그 자리에서 멈춥니다.

if (app.project) { try { app.project.close(CloseOptions.DO_NOT_SAVE_CHANGES); } catch(e){} }
app.newProject();

명령 한 줄로 렌더 돌리기

보통은 애프터 이펙트를 열고 렌더 대기열에 넣어 실행 버튼을 누릅니다. 자동화하려면 사람이 눌러야 하는 버튼이 없어야 하는데요. 애프터 이펙트에는 화면을 띄우지 않고 렌더만 돌리는 실행 파일이 함께 설치되어 있습니다.

"/Applications/Adobe After Effects 2026/aerender" \
  -project /절대경로/orchard2.aep \
  -comp orchard2 \
  -output /절대경로/out/orchard2-1080x1920.mov

-project 경로는 절대 경로여야 합니다. 상대 경로로 주면 프로젝트를 찾지 못합니다. 출력 확장자를 .mov로 적어도 기본 출력 모듈이 H.264 mp4를 냅니다. 심도와 모션 블러를 켠 288프레임이 41초에 끝났습니다.

중간 확인은 렌더를 기다리지 않고 컴포지션에서 프레임을 직접 뽑는 편이 빠릅니다.

comp.saveFrameToPng(t, new File("/절대경로/frames2/t"+t.toFixed(1)+".png"));

이부분도 내부적으로 크로드코드가 스크립트를 어떻게 썼는지를 보여주는 부분이구요. 저는 영상을 확정해주고 출력하라고 승인했을 뿐입니다.

통과 기준을 숫자로 정해 자동으로 재기

스크립트로 뽑으면 결과를 확인하는 일도 스크립트에 맡기게 됩니다. 눈으로만 보면 마지막 프레임 한 장을 보고 통과시키기 쉽거든요. 무엇을 재게 할지는 미리 정해둬야 합니다.

항목재는 방법
밝기 낙차0.5초마다 평균 밝기를 재서 최고와 최저 차이
움직임0.5초 간격 두 프레임의 화소 차이 평균
멈춘 곳 확인프레임 간 변화량의 최솟값
자막 가독성글자 주변만 잘라내 재는 대비

재는 방법을 잘못 잡으면 문제가 있는 영상도 통과합니다. 자막 가독성을 화면 전체 평균으로 재면 흰 글씨가 흰 과육에 겹친 자리가 평균에 묻혀버리거든요. 글자 주변만 잘라내 재야 잡힙니다.

다음 영상은 입력만 바꿔 다시 돌리기

한 편을 만들고 나면 손에 남는 것이 셋입니다.

  1. .aep 프로젝트 342KB. 레이어와 키프레임과 계산식이 그대로 들어 있어 애프터 이펙트에서 열고 고칩니다
  2. 생성 스크립트. 맨 위의 표만 바꾸면 같은 구조가 다시 만들어집니다
  3. 정리해둔 배경 제거 사진 11장. 원본은 따로 보존해 재처리가 가능합니다

두 번째 영상부터는 소재 목록의 파일 이름을 바꾸고, 문구 세 줄을 바꾸고, 필요하면 W, H를 1080×1080으로 고쳐 다시 돌리면 됩니다. 첫 편에 들어간 설계 시간이 두 번째 편에는 들어가지 않습니다.

크리에이티브 클라우드 플랜에 포함된 앱 확인하기

마치며

위에 많은 부분이 클로드코드가 직접 애프터이펙트를 다루면서 스크립트 처리를 어떻게 했는지를 보여주는 부분입니다.
제가 한 것은 결과물을 보고 결과물에서 어떻게 변경되었으면 좋겠는지를 확인해주고 수정을 지시한 것들이거든요.
그러니까 애프터이펙트를 전혀 다루지 못하는 분들도 클로드코드로 애프터이펙트를 사용할 수 있는 거예요.
3D카메라는 애프터이펙트에서 많이 사용하는 기능이지만 설정을 하는게 사람이 직접하면 노드를 일일이 잡아줘야하고 귀찮은 작업이 많습니다. 하나하나 조정하는데 시간도 좀 걸리구요. 하지만 이렇게 간단하게 처리가 가능한 것이죠.

포토샵과 일러스트레이터도 같은 방식으로 열려 있습니다. 상세페이지는 포토샵 스크립트로 만들고 영상은 애프터 이펙트로 넘기는 식으로 이으면, 같은 소재를 두 번 만들지 않아도 됩니다.

애프터 이펙트는 단일 앱으로도 결제되고, 포토샵·일러스트레이터와 함께 쓰는 모든 앱 플랜에도 포함되어 있는 크리에이티브 클라우드 앱입니다. 플랜 구성과 가격은 수시로 바뀌니 결제 전에는 어도비 페이지에서 직접 보시는 편이 정확합니다.

애프터 이펙트 플랜 확인하고 시작하기

상세페이지 gif 추가하기

storyblock

Recent Posts

도장 만들기: 이름만 넣으면 되는 무료 도구와 인감도장의 차이

계약서나 견적서에 찍을 도장이 급히 필요할 때가 있습니다. 인터넷 도장 만들기 서비스는 대부분 결제를 요구하거나…

7시간 ago

개인정보 마스킹, 검은 사각형으로 덮으면 안 되는 이유

서류를 낼 때 주민등록번호를 가려 달라는 요구를 자주 받습니다. 그런데 개인정보 마스킹을 한다고 PDF 위에…

3일 ago

건강보험 산정특례, 병원비가 5%가 되는 조건과 30일 규칙

건강보험 산정특례는 큰 병에 걸렸을 때 병원비 본인부담을 5%나 10%로 낮춰 주는 제도입니다. 암 진단을…

3일 ago

어도비 스톡 소재 사용량을 크레딧으로 설계하기 (어도비 스톡 플랜 비교)

어도비 스톡 소재 구독은 플랜 이름만 보면 비교가 되지 않습니다. 같은 한 달에 이미지를 열…

1주 ago

자녀장려금 자녀 1명당 100만원, 내 소득이면 얼마나 나오나

자녀장려금은 자녀 1명당 최대 100만 원입니다. 그런데 이 100만 원을 다 받는 집은 생각보다 적습니다.…

1주 ago

보청기 지원금 131만원의 실제 계산법: 누가 얼마를 받나

보청기 지원금을 검색하면 131만원이라는 숫자가 가장 먼저 나옵니다. 그런데 이 금액을 한 번에 받는 사람은…

2주 ago