[After Effects] 비디오로부터 스톱모션 영상 만들기

글쓴이 Engineer Myoa 날짜

  1. 서론

에펙의 활용도는 무궁무진하다..  Adobe사가 이런 계열로 평정하고 있으니.. 참 대단하다

정적영상처리의 끝판왕이 포토샵이라면 동영상처리 및 생성 끝판왕은 에펙이 아닐까 싶다.

일반적으로 영상 제작이나 편집은 파이널컷이나 프리미어등 좋은 솔루션이 있으나

화려한 효과를 만들거나 수십수백개의 레이어를 이용해 수초간의 짧은 영상을 생성하는 전문적인 파트에서 에펙은 정말 비길자가 없다고 생각한다.

에펙 찬양은 여기까지로 하고, 최근 찍어둔 몇 개의 동영상을 스톱모션으로 바꾸려고 한적이 있다.

하나하나 스틸컷을 뽑아서 이어붙이자니, 프로그래머로써 할짓은 아닌거같고 에펙의 표현식(Expression)을 사용하면 뭐든 가능할 것 같았다.

구글링을 해보니 timeToFrames와 framesToTime을 2가지 함수를 제시해주었다. 이 함수를 가지고 비디오를 스톱모션 영상으로 바꾸어보자.

 

2. 본론

 

우선 가져온 푸티지 영상을 컴포지션으로 올린다.

타임라인에서 푸티지를 우클릭하면 메뉴에 시간->시간 다시 매핑 이 있다.

추가된 속성에서 Alt+Click을 해주면 표현식을 입력할 수 있는 키프레임이 나온다.

 

이제 표현식을 사용해야하는데,

 

Time conversion methods (expression reference)

시간 변환 메서드(표현식 참조)

 

timeToFrames(t = time + thisComp.displayStartTime, fps = 1.0 / thisComp.frameDuration, isDuration = false)

반환 유형: 숫자

인수 유형: t 및 fps는 숫자이고 isDuration은 부울입니다.

기본값이 현재 컴포지션 시간인 t의 값을 정수인 프레임 수로 변환합니다. 초당 프레임 수는 fps 인수에 지정되며 기본값은 현재 컴포지션의 프레임 속도(1.0 / thisComp.frameDuration)입니다. 기본값이 false인 isDuration 인수는 t 값이 절대 시간이 아니라 두 시간 간의 차이를 나타내는 경우 인수 값이 true여야 합니다. 절대 시간은 음수 무한대로 반내림되고 지속 시간은 0에서 양수로 반올림됩니다.

framesToTime(frames, fps = 1.0 / thisComp.frameDuration)

반환 유형: 숫자

인수 유형: frames 및 fps는 숫자입니다.

timeToFrames의 역수입니다. 필수 인수인 frames에 해당하는 시간을 반환합니다. 정수일 필요는 없습니다. fps인수에 대한 자세한 내용은 timeToFrames를 참조하십시오.

timeRemap

반환 유형: 속성

[시간 다시 매핑]이 사용된 경우 [시간 다시 매핑] 속성의 값을 초 단위로 반환합니다.

출처: https://helpx.adobe.com/kr/after-effects/using/expression-language-reference.html

 

설명이 조금 모호하기도 하고 getter setter의 개념이 없어 값을 유추하기도 힘들다.

그래서 몇번의 삽질을 통해 나온 값을 대강 정형화 해보았다.

until_skip_frame =45;
stretch_ratio = 150/100;
f = timeToFrames(timeRemap);
p=Math.floor(f*stretch_ratio);
framesToTime(p* until_skip_frame);

until_skip_frame은 몇 프레임씩 스킵할 것인지
stretch_ratio은 얼마나 느려졌는지 빨라졌는지. Stretch_ratio가 1이면 until_skip_frame을 높인만큼 재생속도가 빨라지게 된다.

 

3. 결론

에펙의 표현식에서 디버깅이나 콘솔이 제공이 안된다는게 큰 단점이었다.

다만 강력한 기능을 제공하는 것은 여전하니  코딩으로 영상을 처리하기 편리하도록 이 부분의 문제만 조금 해결되었으면 좋겠다.

 

 

 

 

 

 

 

카테고리: 강의취미

5개의 댓글

답글 남기기

Avatar placeholder

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다