공부/공부(코딩)

[어도비 익스프레션] 01. 호기심의 시작

Quill 2018. 2. 11. 11:13

영상 제작 자동화를 위한 호기심


  텍스트 에니메이션을 공부하던 중에 abode의 after effects에서 코딩을 이용한 영상 편집이 가능하다는 사실을 알아냈다.

이를 이용해서 영상 제작을 자동화 하면 어떨까하는 생각이들었다.


  adobe사는 여러 코딩 에디터를 거쳐서 지금(2018년)은 brackets라는 코딩에디터로 웹 디자인과 연동되는 코딩 시스템을 가추어나가고 있다. 


기능을 추가하려면 Abobe Scripts를 공부하자


  에프터 이펙트에 기능을 추가하고 싶다면 저것을 공부해야한다. 예를 들어 텍스트 에니메이션 효과에 들어가보면 보이는 에니메이션 템플릿 같은 것들을 이 어도비 스크립트로 만들 수 있다. 어도비 스크립트는 자바스크립트의 확장언어로 자바스크립트 문법을 알고 있어야 편하다.  하지만 내가 원하는 것은 편집 과정 안에서 필요한 것으로 기능 추가와는 거리가 멀다. 

Abode Scripts란?

  A script is a series of commands that tells an application to perform a series of operations. 

  스크립트란 앱에 여러 기능들을 실행하도록 말해주는 일련의 명령 모음입니다.


  You can use scripts in most Adobe applications to automate repetitive tasks, perform complex calculations, and even use some functionality not directly exposed through the graphical user interface. 

  어도비 사의 대부분의 제품에서 반복적인 일, 복잡한 계산, 그리고 그래픽 인터페이스에서는 숨겨진 기능들을 사용할 수 있습니다. 


  For example, you can direct After Effects to reorder the layers in a composition, find and replace source text in text layers, or send an email message when rendering is complete.

  예를 들어, 컴포지션에 있는 레이어의 순서를 재배치 할 수있고, 자막에서 특정 단어만 바꿀 수도 있고, 렌더링이 완료되면 메일을 보내주게 할 수도 있습니다.


  After Effects scripts use the Adobe ExtendScript language, which is an extended form of JavaScript. ExtendScript files have the .jsx or .jsxbin filename extension.

  에프터 이펙트  스크립트는 자바스크립트에서 확장된 Adobe ExtendScript language를 사용 하고 있습니다. ExtendScript 파일은 .jsx나 .jsxbin 확장자를 가집니다.


  For a description of the scripting capabilities available with After Effects, see the After Effects Scripting Guide on the After Effects Developer Center.

  에프터 이펙트에서 가능한 스크립팅 기술들에 대한 설명을 보려면 After Effects Developer Center에 있는 에프터 이펙트 가이드를 참조하세요.



편집 자동화를 위해서는 익스프레션을 공부한다.

  기능을 추가하기 위한 것이 아니라면 익스프레션(표현식)을 공부함이 맞다.
  
  변화를 주고 싶은 속성 값, 예를 들어 어떤 레이어의 포지션에 있는 타임워치를 알트+클릭하면 표현식을 직접 입력할 수 있게 된다. 가장 간단하고 자주 쓰는 명령어는 wiggle(int *빠르기*,int*움직일 범위*);이다. 무작위 흔들림을 표현하는 데 쓴다. 간단한 다른 명령들은 추가 메뉴를 클릭하면 둘러볼 수 있다.




  

익스프레션의 선택자


  속성을 가져오거나 변화 시킬 수 있으려면 정확하게 상대를 지칭 할 수 있어야한다. 이를 선택자라고 한다.

thisComp.layer("Layer 1").transform.position
 위 식은 thisComp라는 전역 객체를 선택한 후에 그 아래에 있는 하위 요소인 layer의 특정 이름을 가진 레이어의 위치 값을 선택하여 가져왔다.

thisComp.layer(1).transform.position
  위와 같이 하면 인덱스로 레이어를 가져올 수도 있다. 첫번째 레이어를 선택한 것이다. 

  thisComp.layer(1).position.valueAtTime(time+2)
변화를 주는 키프레임을 2초 차이나게 할 수 있다.

thisComp.layer(1).text.sourceText+"ㅋ";
 특정 레이어의 글자에 ㅋ를 추가하여 나타냈다.

  thisComp.name
  콤포지션 이름을 가져온다.

  
 완성된 이펙트를 매번 재계산 하고 싶지 않고 그냥 고정하고 싶을 경우에는 익스프레션을 일반 키프레임으로 고정 할 수도 있다.[타임라인] 패널에서 표현식이 작성된 속성을 선택한 후 [애니메이션] > [키프레임 도우미] > [표현식을 키프레임으로 변환]을 선택합니다.
 방법은, [타임라인] 패널에서 표현식이 작성된 속성을 선택한 후 [애니메이션] > [키프레임 도우미] > [표현식을 키프레임으로 변환]을 선택합니다.
  
  Layer A의 x 위치 값과 Layer B의 y 위치 값을 결합하려면 다음을 사용합니다.
  x = thisComp.layer("Layer A").position[0];  
  y = thisComp.layer("Layer B").position[1];  
  [x,y]  
 

키프레임의 타이밍을 조절하는 방법


  시간차를 두면 특정 표현이 연달아 표현되는 것 같은 효과를 줄 수 있다. 


아오아




  이때 사용되는 것이 타이밍 조절이다. 기본적으로 모든 효과 속성의 타이밍을 측정하고 변화 시킬 수 있는 것 같다.

  표현식 내의 시간은 항상 레이어 시간이 아닌 컴포지션 시간이며 초 단위로 측정됩니다. 모든 표현식의 기본 시간은 표현식이 계산되는 현재 컴포지션 시간입니다. 다음 표현식에서는 모두 기본 컴포지션 시간을 사용하고 같은 값을 반환합니다.

  thisComp.layer(1).position 
  thisComp.layer(1).position.valueAtTime(time)

상대 시간을 사용하려면 time 인수에 증분된 시간 값을 더합니다. 예를 들어 현재 시간 5초 전의 위치 값을 구하려면 다음 표현식을 사용합니다.

  thisComp.layer(1).position.valueAtTime(time-5)

  

변수 생성, 상대경로 지정


Path = "~/desktop/source.txt";
// = 변수의 데이터 타입은 생성 될때 자동으로 지정된다.

myPath = "/C/temp/test.txt";
$.evalFile (myPath);
text.sourceText = aaa;

try {} catch(err) {}


예외 사항에 대한 대응을 미리 지정한다.


문자열 다루기


문자열은 자바스크립트에서 다루던 방식과 같다.
예를 들어 \n은 개행 문자이다.

split("-") // 문자열을 배열로 만들기


a1 = "aaa - bbb";
text.sourceText =  a1.split("-")[1] ;
// 결과는 bbb




풀지 못한 숙제(미확인 코딩)

var theFile = File.openDialog("select the file");
$.evalFile(theFile.absoluteURI);
// = 다이얼 로그를 부르는 코드를 소개 받았는데 애초에 파일 대화상자 열기도 가능한거 맞나?









반응형