'번역'에 해당되는 글 1건

  1. 2009.05.20 Avisynth Wiki 2 - 시작하기
2009. 5. 20. 22:30
본 포스트는 http://avisynth.org/mediawiki/Getting_started 의 글을 번역(의역)한 포스팅입니다.
독자의 편의를 위하여 국내사정을 감안한 뒤 추가하거나 제거한 부분이 있습니다.
일부 용어가 옳지 않게 사용 되었을 수 있습니다. 리플로 지적 부탁드립니다.

시작하기

 처음으로 할 일은 "스크립트"라고 불리는 특별한 명령어가 들어있는 간단한 텍스트 파일을 만드는 일입니다. 이 명령어들은 하나 혹은 하나 이상의 동영상들과 필터들이 원하는대로 결과물을 내어 주도록 만듭니다.

 하나의 스크립트 파일을 다 만드셨다면, VirtualDub이나 MeGUI같은 인코딩 툴을 실행해서 (이 이외에도 엔젤 인코더라는 프로그램이 avs를 지원합니다만, 보통 버덥 모드나 메구이를 사용하는게 요즘 추세입니다)avs 파일을 열어 봅시다.

 avs 파일을 열면, 이제서야 잠자던 AviSynth가 깨어나 일을 시작합니다. avs파일을 받은 프로그램은 AviSynth에게 스크립트의 내용을 해석 해 줄것을 부탁하고, Avisynth는 그 부탁 받은 스크립트를 바탕으로 동영상을 불러오고, 필터를 적용해서 압축되지 않은 동영상 형태로 프로그램에 돌려줍니다.

 사실 쉬운 이해를 위해서 위처럼 쓰긴 했습니다만, Avisynth는 따로 실행되는 프로그램이 아니라, 완전히 Background에서 실행되는 프로그램입니다. (Background를 설명하면 운영체제에 대한 설명까지 덧붙여야 하므로, 건너 뜁니다. 모르시는 분들은 검색해 주세요)
 이런 저런 이유로, 인코딩 프로그램들은 Avisynth를 통한 영상을 하드디스크 어딘가에 붙어있는 AVI파일을 바로 불러온것으로 인식합니다.

아날로그 편집 (Linear Editing)
 
 Avisynth로 할수 있는 가장 간단한 작업은 영상 자르기등의 Virtualdub에서 하던 작업입니다.
 이 스크립트는 쉽습니다. 복잡한 필터나 스크립트도 나오지 않으니 걱정하실 필요도 없습니다.

 연습을 위해서 test.avs 파일을 만들고, 그 파일 안에 다음과 같이 써 봅시다

 Version

 test.avs 파일을 WMP나 KMP, 곰플등으로 재생 해 보면 Avisynth의 버전 정보와 저작권에 관한 내용의 10초짜리 영상을 볼 수 있습니다.

 여기서 Version 은 소스 필터라고 부릅니다.
 이 필터는 수정 할 동영상을 불러오는 역할을 합니다.
 Avisynth 스크립트 (이하 avs, 혹은 avs 스크립트라고도 적겠습니다)의 첫줄에는 소스 필터가 와야 합니다. 동영상을 불러와야 그걸 편집하겠지요 :D
 (역주 : 아직은 그런 고급 기능을 쓸 리 없겠지만, 소스 필터 위에 다른 소스가 오는 경우가 있습니다.)

 이제, 두번째줄에 무언가 더 써 넣어 봅시다. 이렇게요
Version
ReduceBy2

 다시 test.avs 파일을 플레이어로 열어 봅시다. 아까처럼 버전과 저작권 안내가 뜹니다. 하지만 아까의 영상의 반만한 크기로 영상이 뜰겁니다.

 ReduceBy2는 "Transformation filter"라고 부릅니다. 이전 영상을 어떻게 어떻게 바꿔주는 필터라는 의미입니다. 버츄얼덥에서 필터를 사용하듯, 이런 Transformation filter를 여러개 사용 할 수 있습니다.
 이제 다른 필터를 써 봅시다. 점점 검은색으로 변하면서 끝나는 fade-out 영상을 만들어 보도록 합시다. 세번째줄에 다음과 같이 넣어 주세요

Version
ReduceBy2
FadeOut(10)

 다시 열어봅시다. 처음 9초는 아마 처음과 똑같을 겁니다. 하지만 마지막 1초에서는 부드럽게 검은색으로 변하면서 끝나는 걸 볼 수 있습니다.
 잘 보시면 10이라는 숫자를 가지고 있는걸 볼 수 있는데, 여기서 10은 fadeout이 시작되는 프레임의 번호를 말합니다.
 
 근데,,, fadeout 효과를 보기까지 너무 오래 걸리죠. 기다리는 시간을 줄여봅시다.
 이제 120~150프레임만 남길겁니다. 나머지는 버려야죠.
 (역주 : 프레임에 대한 개념이 없으시면 앞으로 이해하시는데 많은 애로사항이 꽃핍니다. 검색이나 다른 방법을 통해 꼭 동영상의 원리와 프레임에 대한 개념을 습득 하고 이 글 혹은 다른 인코딩 관련 글을 읽으시길 바랍니다. 모르셔도 읽으실 순 있지만 이해 하실지는... 모르겠습니다.)

뭐 하여간, 잘라 봅시다.
Version
ReduceBy2
# 앞의 119개의 프레임을 잘라내고, 120~150프레임만 유지합니다.
# (119개를 잘라내는 이유는 Avisynth는 첫프레임의 번호를 0으로 두기 때문입니다.)
Trim(120,150)
FadeOut(10)

 이 예제에서는 # 가 처음으로 등장했습니다.
 #는 주석을 의미합니다.
 #가 사용된 줄은 전부 주석 처리 되며, 주석처리 된 줄은 Avisynth가 아예 무시합니다.

 이제 다시 Trim을 살펴 봅시다. fadeout은 10이라는 하나의 변수를 주었지만, trim은 120,150 이라는 반점(콤마, ',')로 구분된 두개의 변수를 주었지요.
 Trim에서 두개의 변수를 준다는 의미는 첫번째 변수 프레임 ~ 두번째 변수 프레임 까지의 영상을 제외한 다른 부분을 모두 잘라낸다는 의미입니다.

 그런데... 만약에 처음 119프레임만 제거하고 싶다면 어떻게 해야할까요?
 여기서 0 이 등장합니다.
 이건 따라하지 말고 어떻게 쓰이는지만 한번 구경 해 보세요.
 
Version
Trim(120,0)

 여기서 0의 의미는 "끝까지" 입니다.
 끝까지 유지 한다고 했으니, 앞의 119프레임만 제거하고, 뒷부분은 자르지 않습니다.

 여기서 하나 문제가 생깁니다. Trim을 쓰면 자르기 쉽다지만, 자르려는 위치가 몇 프레임인지 알 도리가 없지요.
 두가지 방법이 있습니다. 화면에 프레임 번호를 표시해주는 ShowFrameNumber 필터를 쓰거나, 버츄얼덥 같은 영상의 현재위치의 프레임 번호를 알려주는 프로그램을 사용하면 됩니다.
 (역주 : 사실 AvsP를 더 추천합니다. Trim 결과를 바로 확인 할 수 있거든요)

 이제 Version 보다 더 유용한 필터인 AVISource를 써 보도록 합시다.
 AVISource는 AVI 파일을 읽어오는 기능을 합니다.
 만약에 가지고 있는 AVI 파일이 있다면, 바로 이 필터로 읽어 올 수 있습니다.

AVISource("d:\capture.avi")  # 따옴표 안은 하드디스크의 Avi 파일 경로를 넣습니다.
ReduceBy2
FadeOut(15)
Trim(120,0)

 이 한줄의 소스는 2GB 이상의 영상을 지원하지 않는 프로그램에서 2GB가 넘는 영상을 감상하거나, 편집할 때 유용하게 사용 할 수 있습니다.


디지털 편집 (Non-Linear Editing)
이제 재밌는 부분을 해봅시다. AVS 파일을 다음과 같이 만드세요

StackVertical(Version, Version)

 이제 열어봅시다.
 결과를 보면 버전 전보가 위아래로 두개 나옵니다.
 StackVertical 필터는 두개의 영상을 불러와서 상하로 합치는 역할을 합니다.
 이 스크립트에서 Version 필터는 두번 불러와집니다. 각각 한번의 Version 정보를 보내지요.
 이 두 정보 (영상)을 StackVertical 이 합치는겁니다.
 (역주 : 말로 설명하기 어려우니 직접 한번 해보세요, Version 대신 AVISource()등을 넣어도 됩니다. 다만 각각 다른 영상을 불러오려면 두 영상의 가로 사이즈가 같아야 합니다)

 이런 종류의 필터 중에서 가장 유용하게 쓰이는 필터중에 UnalignedSplicer가 있습니다.
 이 필터는 비디오의 끝과 끝을 이어줍니다.
 이제 3개의 AVI 파일을 이 필터로 한번 이어봅시다.

UnalignedSplice(AVISource("d:\capture.00.avi"), \
 AVISource("d:\capture.01.avi"), \
 AVISource("d:\capture.02.avi"))

 StackVertical 필터나 UnalignedSplice 둘다 60개 까지 합칠 수 있습니다.
 
 하나 팁을 드리자면, + 부호를 쓰면 좀 더 편하게 UnalignedSplice 필터를 쓸 수 있습니다.

 예를 하나 들어보자면, 아래 스크립트는 방금 해본 스크립트와 같은 결과가 나옵니다.

AVISource("d:\capture.00.avi") + \
 AVISource("d:\capture.01.avi") + \
 AVISource("d:\capture.02.avi")
(참 짧아지네요 ㅡ,ㅡ)

 이제, 여러개의 동영상을 하나의 AVI 파일로 만드는 방법을 알았습니다. 하지만 소리가 별도의 WAV파일로 저장되었다면 어떻게 해야할까요? 합칠 순 있을까요?

 아래처럼 해보세요
AudioDub(AVISource("d:\capture.00.avi") + \
 AVISource("d:\capture.01.avi") + \
 AVISource("d:\capture.02.avi"), \
 WAVSource("d:\audio.wav"))

(역주 : 사실 음성의 경우에는 싱크 문제등으로 인하여 영상만 따로 인코딩 한 뒤에 Muxer로 합쳐주는게 일반적인 인코딩 방법입니다. 고로 이 방법은 쓸데가 없다. 고 생각하셔도 무방합니다.)

'Avisynth > 번역' 카테고리의 다른 글

Avisynth Wiki 1 - 첫걸음  (4) 2009.05.14
aWarpSharp  (0) 2009.03.22
Posted by 아스쿨