노무현 대통령 배너
BLOG main image
왕미친놈의 왕미친세상입니다. 미친 소리는 써도 되지만, 근거 없는 소리는 쓰면 안 됩니다.


스크립트 함수 레퍼런스

모든 함수는 객체의 멤버 함수입니다. 예컨대 Open() 함수는 VirtualDub 객체의 멤버 함수이고, 다음과 같이 접근합니다.:

[code php]VirtualDub.Open(...);[/code]
  • 경고 : 대부분 또는 모든 함수는 어떤 매개변수의 유효함을 알아낼 수 없다는 하에서 당신이 올바르지 않은 매개변수를 제공하면 데이터가 파괴될 수 있습니다. -10x-10 크기 변경 필터(resize filter)를 적용하는 것과 같은 어리석인 짓은 시도하지 마십시오.

객체 : Sylia

[code php]void dprint(int/string value);[/code]

이름 있는 문자열 또는 변수를 디버그 출력으로 인쇄한다.

[code php]void messagebox(string text, string caption);   // (VirtualDub 1.6.2 이상)[/code]

메시지 박스를 화면에 표시한다.

    NOTE:    메시지 박스는 VirtualDub 프로그램이 배치 또는 명령행 모드에서 실행 중이더라도 화면에 표시됩니다. 그래서 이것은 제작 스크립트에서는 사용하지 않는 것이 최선입니다.

[code php]string ToString(int);            // (VirtualDub 1.6.2 이상)
string ToString(long);            // (VirtualDub 1.6.2 이상)
string ToString(double);        // (VirtualDub 1.6.2 이상)
string ToString(string);        // (VirtualDub 1.6.2 이상)[/code]

수치 변수를 십진수 형식의 문자열로 변환합니다.

문자열-문자열 변환 버전은 아무것도 하지 않습니다. 그리고 문자열-문자열 변환 버전은 편의상 디버깅을 위해 임의 형식의 식을 화면에 표현하는 방식으로 존재합니다.

[code php]int Atoi(string s);            // (VirtualDub 1.6.5 이상)
long Atol(string s);            // (VirtualDub 1.6.5 이상)
double Atod(string s);            // (VirtualDub 1.6.5 이상)[/code]

문자열을 정수(int), 긴 정수(long int), 배정도 실수(double)로 변환합니다. 문자열은 숫자 표현이 유효하지 않기 때문에 변환에 실패하면 알 수 없는 오류가 나타납니다. 이러한 함수는 명령행 매개변수 문자열을 수치 형식으로 변환하는 데 유용합니다.

객체 : VirtualDub

[code php]void SetStatus(string text);[/code]

VirtualDub 창 아래쪽에 있는 상태 표시줄에 나타낼 텍스트를 설정합니다.

[code php]void Open(string filename, int type, int xopts);
void Open(string filename, int type, int xopts, string xoptstring);[/code]

동영상 파일을 연다. 형식은 다음 가운데 하나입니다.

[code php]   0   자동
  1   AVI
  2   MPEG-1
  4   스트립 AVI
  5   AVI through AVIFile (Avisynth)[/code]

xopts 값이 0 이 아니면, VirtualDub 프로그램은 파일을 확장된 열기 옵션으로 연다. xoptstring 값이 없으면, 대화상자가 열리고, 그게 아니면 xoptstring 문자열이 바이너리 옵션 구조의 MIME BASE64 방식으로 인코딩된 문자열로 처리됩니다.

[code php]void Open(string filename, string type, int xopts);
void Open(string filename, string type, int xopts, string xoptstring);    // (VirtualDub 1.5.5 이상)[/code]

이것은 우선권을 가진, 1.5.5 버전 이상에서 나타나는 Open() 함수의 형식입니다. 번호를 다루는 대신에, 그것은 형 이름을 다룹니다. 다음과 같은 형 이름이 있습니다.

[code php]   "Audio/video interleave input driver (internal)"
  "AVIFile/Avisynth input driver (internal)"
  "Image sequence input driver (internal)"
  "MPEG-1 input driver (internal)"[/code] [code php]void Open(string filename);        // (VirtualDub 1.6.5 이상)[/code]

그것은 파일 형식을 결정하는 자동 검출 모드를 항상 이용하는 Open() 명령의 더 간단한 형식입니다.

[code php]void Append(string filename);[/code]

추가적인 동영상 세그먼트(칸살)를 현재 파일에 덧붙입니다.

[code php]void Close();[/code]

현재 입력 파일을 닫습니다.

[code php]void Preview();[/code]

현재 설정 값으로 현재 파일의 미리보기를 실행합니다. 이것은 File > Preview 메뉴에 해당합니다.

[code php]void SaveAVI(string filename);[/code]

AVI2 형식으로 출력 파일을 만드는 처리 엔진을 실행합니다.

[code php]void SaveCompatibleAVI(string filename);[/code]

AVI1 형식으로 출력 파일을 만드는 처리 엔진을 실행합니다.

[code php]void SaveSegmentedAVI(string filename, int spacethresh, int framethresh);[/code]

다중 AVI 파일로 출력 파일을 만드는 처리 엔진을 실행합니다. spacethresh 값은 메가바이트 값으로 나타낸 파일의 최대 크기이고, framethresh 값은 최대 프레임 수입니다. framethresh 값이 0 이면 무시됩니다.

[code php]void SaveImageSequence(string prefix, string suffix, int mindigits, int format);
void SaveImageSequence(string prefix, string suffix, int mindigits, int format, int quality);    // (VirtualDub 1.6.0 이상)[/code]

"prefix#suffix" 형식을 가진 파일명으로 이미지 시퀀스[각주:1]를 저장합니다. # 기호는 시퀀스 번호인데, 중간의 수치 값에 0을 덧붙인 형태입니다. format 값은 만들어지는 파일의 형식을 기술합니다.[각주:2]

[code php]   0 - Windows BMP
  1 - TARGA
  2 - JPEG      (VirtualDub 1.6.0 이상)[/code] [code php]void SaveWAV(string filename);        // (VirtualDub 1.4d 이상)[/code]

WAV 형식으로 출력 파일을 만드는 처리 엔진을 실행합니다.

[code php]void RunNullVideoPass();        // (VirtualDub 1.6.5 이상)[/code]

동영상 전용 모드(video-only mode) 처리 엔진을 실행합니다. 그러나 출력은 버립니다(사용하지 않습니다). 이것은 사용 가능한 출력을 만들지 않는 과정(pass)을 분석하는 데 동영상 필터 또는 코덱을 사용할 때 유용합니다.

[code php]void Log(string output);        // (VirtualDub 1.6.5 이상)[/code]

로그에서 정보 우선순위에 따라 항목을 출력합니다. VirtualDub 프로그램이 명령행에서 실행될 때, 텍스트는 또한 표준 출력으로 출력됩니다.

객 체 : VirtualDub.video

[code php]int GetDepth(int var);
void SetDepth(int var, int value);[/code]

var 변수가 0 이면, 이 함수들은 입력 색상에 영향을 주고, 그게 아니면 출력 색상을 다룹니다. GetDepth() 함수는 0 또는 1, 2 값을 반환합니다. SetDepth() 함수는 색상의 비트 값과 같은 16 또는 24, 32를 돌려줍니다. 나는 그것들이 왜 일치하지 않는지를 알지 못합니다.

당신에게 SetInputFormat() 및 SetOutputFormat() 함수 대신에 그것을 사용하라고 권고했습니다. 16/24/32비트 설정은 XRGB1555/RGB888/XRGB8888 형식에 각각 해당합니다.

[code php]void SetInputFormat(int format);    // (VirtualDub 1.6.0 이상)
void SetOutputFormat(int format);    // (VirtualDub 1.6.0 이상)[/code]

비디오 작업에 쓰일 입력 및 출력 형식의 우선권을 설정합니다.

[code php]0    자동 검출 / 입력과 같음
5    XRGB1555    16비트 555 RGB
6    RGB565        16비트 565 RGB
7    RGB888        24비트 888 RGB
8    XRGB8888    32비트 888 RGB + 투명도 (dummy alpha)
9    Y8        휘도만 적용 [16, 235]
10    YUV422_UYVY    4:2:2 YCbCr 인터리브, UYVY순
11    YUV422_YUY2    4:2:2 YCbCr 인터리브, YUY2순
14    YUV422_Planar    4:2:2 YCbCr 2차 평면 (YV16)
15    YUV420_Planar    4:2:0 YCbCr 2차 평면 (YV12/I420)
17    YUV410_Planar    4:1:0 YCbCr 2차 평면 (YVU9)[/code] [code php]int GetMode();
void SetMode(int mode);[/code]

동영상 작업 모드 설정:

[code php]      0   직접 스트림 복사 (direct stream copy)
     1   빠른 재압축 (fast recompress)
     2   느리 재압축 (slow recompress)
     3   전체 작업 모드 (full processing mode)[/code] [code php]int GetFrameRate(int var);
void SetFrameRate(int var, int value);[/code]

value 값을 조절하여 특별한 프레임 레이트를 설정하거나 얻습니다.:

[code php]   var=0    프레임 레이트 요소 골라내기. 1=모든 프레임
  var=1    새로운 프레임 레이트 (마이크로초 / 프레임); 0=변화 없음, -1=기간이 일치함을 뜻함
  var=2    0 이 아니면, TV 역화면이 가능[/code]

시 간이 같으면 TV 역화면(inverse telecine)으로서 골라내기를 하는 프레임 레이트 설정을 하지 않습니다. 그것은 작동하지 않습니다.

[code php]void SetTargetFrameRate(int hi, int lo);    // (VirtualDub 1.5.2 이상)[/code]

64비트 유리수(rational fraction. hi 나누기 lo)로서 프레임 레이트 변환을 위한 대상 프레임 레이트를 설정합니다. hi 및 lo는 모두 *부호 없는* 수입니다. 21억 4748만 3648 부터 42억 9496만 7295까지인 값은 32비트 음수 값에 해당하므로 그냥 지나칩니다.

1.6.7 버전에서는, long 형으로 해석되는 큰 값으로서 모든 값을 양수로서 지정할 수 있습니다. 그리고 함수에 알맞은 int 값으로 자동으로 변환합니다.

[code php]int GetRange(int var);
void SetRange(int startMS, int endMS);[/code]

특별한 범위 값을 얻거나 설정합니다. var=0 이면 시작 오프셋으로 사용되며, var=1 이면 종료 오프셋으로 사용됩니다. 시작 오프셋은 앞에서부터 밀리초 단위로 측정되고, 종료 오프셋은 끝에서부터 밀리초 단위로 측정됩니다. 그래요, 이것이 어리석인 짓임을 나도 알아요.

종료 오프셋이 단지 오프셋이기 때문에 이 함수들에서 사용하는 동영상 스트림의 길이를 결정하는 것이 가능하지 않습니다.

[code php]void SetRangeEmpty();                // (VirtualDub 1.6.5 이상)[/code]

현재 선택한 부분을 청소하지만, 작업 영역의 시작/끝 지점에 영향을 주지 않는다. 이것은 UI에서 Edit > Clear Selection (Ctrl+D) 메뉴에 해당하며, 스크립트를 실행한 뒤 화면에 보여주는 그럴듯한 선택 영역 제거하는 데 유용합니다.

[code php]int GetCompression(int var);[/code]

현재 선택된 압축기(compressor)를 위한 변수를 검색합니다.:

[code php]      var=0   압축기(compressor)를 위한 fccHandler ID를 반환합니다.
     var=1   최대 키프레임 간격을 반환합니다.
     var=2   품질 인수(quality factor)를 반환합니다. (0~10000).
     var=3   데이터 전송률(data rate)을 반환합니다. (0=데이터 전송률 없음).[/code] [code php]void SetCompression();
void SetCompression(string fccHandler, int keyrate, int quality, int datarate);
void SetCompression(int fccHandler, int keyrate, int quality, int datarate);[/code]

인수 없는 구문은 동영상 압축(video compression)을 꺼버립니다. 다른 두 구문은 동영상 압축기를 선택합니다. fccHandler가 정수 또는 문자열로 지정될 수 있음을 기억하십시오. 문자열이 4바이트보다 짧으면, 공백이 덧붙습니다.

[code php]void SetCompData(int length, string data);[/code]

동영상 압축기를 위한 개인 코덱 데이터를 설정한다. 동영상 압축(Video Compression) 대화상자에서 당신이 설정(Configure)을 클릭할 때 동영상 압축기는 변경됩니다. 이 데이터는 VirtualDub에서 분명치 않습니다. 그리고 단지 동영상 코덱에서 쓰이기도 합니다. length는 바이트로 나타낸 데이터 블록의 길이이고, data는 MIME BASE64 형식으로 인코딩된 데이터 블록입니다.

[code php]void EnableIndeoQC(int enableQC);[/code]

 

Ligos (이전에는 Intel) Indeo v4.x/5.x 동영상 코덱에서 빠른 압축(Quick Compress) 사용 가능 또는 사용 불가

[code php]void SetIVTC(int enableIVTC, int ivtcmode, int offset, int polarity);[/code]

TV 역화면(inverse telecine) 매개변수 설정.

[code php]   enableIVTC:   0 이 아니면 IVTC 사용 가능
  ivtcmode:   0=필드 기반, 1=프레임 기반
  offset:      IVTC 패턴을 위한 프레임 오프셋, -1=적합한 값
  polarity:   0=필드 A 우선, 1=필드 B 우선. offset=-1 때는 무시한다.[/code]

VirtualDub 1.4c 버전에 버그가 있습니다. 그 버전에서 오프셋 값이 불린 자료형(0 또는 1)으로 캐스트되는 일이 발생했습니다. 이것을 불행하게도 IVTC에 알맞은 설정을 만드는 일을 불가능하게 만들었습니다. 그 문제는 1.4d 버전에서 고쳐졌습니다.

[code php]int width;        // [VirtualDub 1.4d (12667) 이상]
int height;[/code]

읽기 전용 변수로 주어진 원본 동영상의 너비/가로(width) 및 높이/세로(height). 이 변수들은 원본 동영상이 존재하지 않으면 정의되지 않습니다.

객 체 : VirtualDub.audio

[code php]void GetMode();
void SetMode(int mode);[/code]

음향 작업 모드(audio processing mode)를 얻거나 설정한다.

[code php]   0   직접 스트림 복사 (direct stream copy)
  1   전체 작업 모드 (full processing mode)[/code] [code php]int GetInterleave(int var);
void SetInterleave(int enabled, int preload, int interval, int is_ms, int offset);[/code]

음향 인터리브 매개변수를 얻거나 설정한다.

[code php]   값 얻기   설정        설명
  var=0   enabled      0 이 아니면 음향 인터리브는 사용 가능(enabled)
  var=1   preload      밀리초 단위로 미리 읽기(preload)
  var=2   interval      밀리초 또는 프레임 단위의 인터리브 간격(Interleaving interval)
  var=3   is_ms      0 이 아니면 인터리브 간격은 밀리초 단위입니다. (is in milliseconds)
  var=4   offset      오프셋(offset)을 바꿉니다. (단위: 밀리초)[/code] [code php]int GetClipMode(int var);
void SetClipMode(int begin, int end);[/code]

음향 오려내기(audio clipping) 매개변수를 얻거나 설정합니다. begin (var=0) 변수는 동영상이 나왔을 때 음향이 바뀌도록 지정합니다. 이것은 거의 언제나 0 이 아닙니다. end (var=1) 변수는 음향이 동영상보다 길지 않도록 오려내도록 지정합니다. 이것 또한 거의 언제나 0 이 아닙니다.

[code php]int GetConversion(int var);
void SetConversion(int new_rate, int new_precision, int new_channels);
void SetConversion(int new_rate, int new_precision, int new_channels, int integral_rate, int high_quality);[/code]

음향 변환 매개변수를 얻거나 설정합니다.

[code php]   var=0 (new_rate)   Hz 단위의 새로운 샘플링 레이트(샘플링 속도, sampling rate); 0=변화 없음
  var=1 (new_precision)   새로운 정밀도(precision); 0=변화 없음, 1=8비트, 2=16비트
  var=2 (new_channels)   0=변화 없음, 1=모노, 2=스테레오[/code] [code php]void SetSource(int mode);
void SetSource(string file);[/code]

음향 원본을 설정합니다. mode=0 이면 음향 없음, mode=1 은 음향 입력. 문자열 형식은 외부 WAV 파일을 읽어옵니다.

[code php]void SetCompression();
void SetCompression(int wFormatTag, int nChannels, int wBitsPerSample, int nAvgBytesPerSec, int nBlockAlign);
void SetCompression(int wFormatTag, int nChannels, int wBitsPerSample, int nAvgBytesPerSec, int nBlockAlign, int cbData, string data);[/code]

음향 압축 형식을 설정합니다. 첫 형식은 음향 압축을 깨끗이 지웁니다. 둘째 및 셋째 형식은 표준 Win32 WAVEFORMATEX 구조로부터 매개변수를 지정합니다.

[code php]   wFormatTag   음향 압축 형식 지정
  nChannels   1=모노, 2=스테레오.
  wBitsPerSample   8 / 16 PCM. 다른 것으로 바꿀 수 있음
  nAvgBytesPerSec   말 그대로 초당 평균 바이트 수
  nBlockAlign   압축된 데이터 블록의 크기[/code]

개 인 데이터에 음향 압축기(audio compressor)를 사용할 때 주어지는 이 필드는 VirtualDub를 불분명하게 만듭니다.

[code php]   cbData      데이터의 크기 (단위: 바이트)
  data      MIME BASE64 형식으로 인코딩된 데이터 스트링[/code]

일반적으로, 당신은 압축기를 조회하는 것 또는 VirtualDub 프로그램이 저장한 작업 스크립트(job script)를 찾는 것에 의해 이 필드를 유도하기를 바랍니다. 왜냐하면 음향 압축기(audio compressor)는 단지 지정된 값을 받아들이는 경향이 있기 때문입니다. 몇몇, 그러나 전부는 아닌, 개인적인 데이터 형식은 Win32 Platform SDK 안의 MMREG.H 파일로 문서화되어 있습니다.

[code php]void SetVolume();    // [VirtualDub 1.4d (12667) or later]
void SetVolume(int v);    // [VirtualDub 1.4d (12667) or later]
int GetVolume();    // [VirtualDub 1.4d (12667) or later][/code]

현재의 음량(audio volume) 증폭 값을 얻거나 설정합니다. 음량은 8비트 고정 소수점 수로 나타냅니다. 256은 증폭 없음, 128은 절반의 음량, 512는 2배의 음량입니다. 빈 인수 형식의 SetVolume() 함수는 음량 증폭을 사용할 수 없도록 만듭니다.

객체 : VirtualDub.subset

부분 집합(subset)은 동영상 스트림 작업을 위한 편집 목록(edit list)입니다. 이것은 프레임 범위의 집합으로 이루어져 있습니다. 프레임 범위는 원본 스트림 안에 있는 작업될 수 있는 프레임을 가리키는 범위입니다. 프레임 번호는 0부터 시작합니다(zero-based).

1.5.4 이전 버전에서는, 부분 집합은 부득이 원본 순서대로 정렬된 범위(range)를 포함할 수밖에 없었습니다. 그래서 범위는 추가할 때마다 다시 정렬되었습니다. 1.5.5 버전부터는, 부분 집합은 복제본이나 원본과는 다른 순서로 반복되거나 이용되는 동영상 스트림의 일부를 허용하는 범위를 벗어난 것을 포함합니다. 최고의 호환성을 위하여, 범위는 항상 오름차순으로 추가하기를 권장합니다.

[code php]void Delete();[/code]

편집이 허용되지 않을 만큼 부분 집합을 지웁니다. 전체 원본 파일에서 작업합니다. 객체는 단지 시작/끝(start/end) 오프셋만을 작업합니다.

[code php]void Clear();[/code]

존재하는 어떤 부분 집합이라도 제거하고, 프레임을 가지지 않는 새로운 하나의 부분 집합을 만듭니다. 이 작업은 부분 집합 구성을 시작하려고 AddFrame()/AddRange() 함수를 호출하기 전에 이루어집니다.

[code php]void AddFrame(int start, int length);
void AddRange(int start, int length);    // [VirtualDub 1.4.10 이상][/code]

부분 집합에서 프레임의 범위를 추가합니다. 부분 집합 프레임은 격리되어야 합니다. 그것들은 서로 겹치지도 접촉하지도 않아야 합니다. (예컨대, [0,5]와 [5,5] 등으로 하지 마십시오.) 1.5.5 버전부터는, 겹치는 범위 또는 허용 범위를 벗어난 범위가 허용됩니다. 그러나 이웃하는 범위는 여전히 피해야 합니다.

AddRange() 함수는 1.4.10 버전에서 더 나은 이름의 동의어로서 추가되었습니다. 그것은 AddFrame() 함수와 같으며, AddFrame() 구문은 지금 비난을 받습니다(deprecated).

[code php]void AddMaskedRange(int start, int length);    // [VirtualDub 1.4.8 이상][/code]

부분 집합에서 마스크된 프레임의 범위를 추가합니다. 마스크된 프레임은 이전 프레임을 반복하는 프레임입니다. 이것은 손상된 데이터를 가진 것으로서 다른 용도로는 쓰이지 않는 프레임을 위한 위치 표시기로 쓰입니다.

객체 : VirtualDub.params (VirtualDub 1.6.1 이상)

[code php]string operator[](int index);        // (VirtualDub 1.6.1 이상)[/code]

불러오기 (/i) 명령행 스위치로부터 매개변수를 검색합니다. 매개변수 색인은 0부터 시작하는데, 그래서 params[0]은 첫 매개변수가 됩니다. 매개변수가 가리키는 것이 존재하지 않으면, 오류가 발생합니다.

객체 : VirtualDub.project (VirtualDub 1.6.5 이상)

[code php]void ClearTextInfo();            // (VirtualDub 1.6.5 이상)[/code]

출력 AVI 파일과 연결된 텍스트 정보를 지웁니다. 기본적으로 주석을 입력 파일로부터 읽어와서 보존합니다.

[code php]void AddTextInfo(string fourcc, string text);[/code]

이를 테면 제작자 및 이름 문자열과 같은, 다음(subsequent) AVI 출력 파일에 사용할 텍스트 주석을 추가합니다. fourcc 값은 표준 AVI 텍스트 주석의 한 종류로서, 예컨대 "ISBJ" 및 "IART" 등과 같은 네 문자로 된 코드(FOURCC)여야 합니다. text 라고 지정된 두 번째 매개변수를 기억하십시오. 그것은 전혀 가공하지 않은(raw) 8비트 문자열인데, AVI 파일로부터 직접 복사됩니다. 그리고 두 번째 매개변수는 UTF-8 형식이 아닙니다. 그것은 AVI 형식 자체가 그러한 문자열로 코드 페이지 인코딩하여 표현할 방법을 전혀 가지고 있지 않기 때문입니다.

객체 : VirtualDub.video.filters

[code php]void Clear();[/code]

필터 목록에서 모든 필터 인스턴스(instance)를 제거합니다.

[code php]void Add(string filter);       // [VirtualDub 1.4c 이하]
int Add(string filter);            // [VirtualDub 1.4d 이상][/code]

동영상 필터 목록의 맨 아래에 지정된 필터의 새로운 인스턴스를 추가합니다.

VirtualDub 1.4d 버전부터 이 함수는 추가된 필터의 인스턴스 번호를 반환합니다.

객체 : VirtualDub.video.filters.instance[nFilt]

nFilt 값은 0 부터 시작하는, 필터 인스턴스의 변경된 색인 값입니다.

[code php]void Remove();[/code]

목록에서 선택된 필터를 제거합니다. 이것은 그 뒤에 오는 필터의 색인을 변경합니다.

[code php]int GetClipping(int var);
void SetClipping(int x1, int y1, int x2, int y2);[/code]

잘라내기 매개변수를 입력받는 필터를 얻거나 설정합니다. var 변수는 0부터 3까지의 범위를 가지며, 이것은 각각 x1 및 y1, x2, y2 변수에 해당합니다. 모든 값은 모서리(edge)로부터의 픽셀 값입니다.

[code php]... Config(...);[/code]

이것은 아마도 동영상 필터가 제공하는 함수입니다. 사용자 정의 매개변수를 가지고 있다면, 일괄처리 모드(batch mode)로 작업하기 위한 필터가 필요합니다. 그러나 이 구성원(member)을 강요할 어떤 구문도 없고, 매개변수 구문은 각각의 필터에 변화를 줍니다.

  1. 이미지 시퀀스(image sequence) 및 시퀀스(sequence) 는 영화나 동영상의 한 장면을 뜻합니다. [본문으로]
  2. 최신 버전인 1.9.x 버전에서는 PNG 형식으로도 저장할 수 있습니다. 스크립트에서 지원하는지는 확인하지 못했습니다. [본문으로]
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

VirtualDub 스크립트 언어 레퍼런스, v0.7

들어가기에 앞서

이 글은 VirtualDub scripting language reference, v0.7(http://www.virtualdub.org/docs/vdscript.txt) 문서를 한국어로 번역한 글입니다. 당연한 말이겠지만, 번역의 신뢰도는 그다지 높지 않습니다. 그러므로 이 글로 원문을 대체하여 사용하는 일이 없기를 바라며, 어디까지나 원문의 이해를 돕는 데만 사용해야 합니다. 이 번역문을 믿음으로써 발생하는 모든 사고와 피해에 대해서는 아무런 책임을 지지 않습니다.

이 문서는 VirtualDub's scripts 부분을 번역하였습니다.

머리말

이것은 VirtualDub의 대단한 스크립트 인터페이스를 기술한 문서입니다. 나는 이것을 VirtualDub의 라이선스와 같은, GNU General Public License (GPL)로 발표합니다. 이 참조는 VirtualDub 1.6.7 (WIP) 때부터 통용되며, 그리고 아마도 그 이전 버전에는 적용되지 않을 터입니다. 나는 이 레퍼런스를 자주 다시 업데이트할는지도 모르니, http://www.virtualdub.org/ 페이지를 자주 확인하기 바랍니다.

나는 스크립트 인터페이스를 중요한 일반적인 인터페이스가 되는 것을 고려하지 않았음을, 따라서 나는 이것을 언제든지 없애버리는 것에 대해 아무렇지도 않게 생각하고 있음을 기억하십시오. 나는 작업 스크립트를 망치지 않으려고 호환성을 유지하려고 노력합니다.

그러나 나는 바보짓을 한 적 있습니다(V1.4b). 당신들에게 경고했습니다.

-- Avery Lee <phaeron@virtualdub.org>
   2005년 6월 9일

VirtualDub 스크립트

VirtualDub 일괄처리 시스템은 스트립트 언어에 바탕을 두고 있으며, 그 스크립트는 프로그램 디렉터리에 있는 VirtualDub.jobs으로 불리는 파일로 저장됩니다. 저장 대화상자에서 나중에 작업 단추(Defer button)[각주:1]를 클릭하면, 작업 처리를 시작할 정보가 이 파일에 기록됩니다. 이것은 텍스트 파일이며, 그래서 그것은 손수 편집할 수 있으며 외부 프로그램으로 만들 수도 있습니다. 당신은 어떻게 이 작업이 이루어지 익숙해질 때까지 몇 개를 만들어보기를 원할 것입니다.

도움말 파일에 기록된 명령행 옵션은 당신이 배치 파일 또는 다른 프로그램으로부터 VirtualDub을 스크립트와 함께 실행하는 것을 허용합니다. 당신이 이런 작업을 한다면 다음과 같은 사항을 주의해야 합니다.

1) VirtualDub.exe 파일을 고객의 응용 프로그램과 함께 압축 파일로 묶지 마십시오. GPL은 소스 코드 없이 바이너리만 배포하는 것을 금지합니다. (GPL을 자세히 읽고 소스코드를 다운로드하겠다고 요청하지 않은 최종 사용자에게 당신이 액세스를 허용했을 때부터, 이것은 전적으로 진실이지는 않다.) 더구나 나는 문서 및 도움말 파일이 제거된 VirtualDub 프로그램을 보는 것을 좋아하지 않는다. 그런 일을 하지 말아 주십시오.

2) 당신의 응용프로그램과 VirtualDub 프로그램 사이에 매우 확실한 차별을 두십시오. 당신이 외부 응용프로그램을 실행하고 있음을 사용자가 알게 하십시오. 그리고 무슨 일이 잘못되었는지를 알게 하십시오. 나는 단지 한 사건을 겪었습니다. 그러나 나는 외부 응용프로그램이 바보짓을 할 때 내 프로그램이 결점이 있다고 생각하는 사람들로부터 지원해 달라는 이메일을 받고 싶지는 않습니다. 나는 이미 충분히 많은 이메일을 받습니다.

3) 당신의 스크립트를 VirtualDub.jobs 파일에 저장하십시오. 그러나 그것이 이미 존재하는 이전 파일을 덮어썼다면 나중에 복원하십시오. 이것은 이미 존재하는 사용자 스크립트를 보호하며, 작업 파일(job file)에서 사용자에게 오류를 보여주는 대신 VirtualDub 프로그램이 오류를 기록하게 하고, 작업을 중단합니다.

4) VirtualDub 프로그램에 내장되지 않은 필터를 당신이 사용하려면, 그것을 *반드시* VirtualDub 플러그인 디렉터리에 설치해야 합니다. 그렇게 설치된 플러그인은 VirtualDub 프로그램이 시작할 때 자동으로 읽어옵니다. VirtualDub 프로그램은 현재 외부 필터를 스크립트에서 읽어오는 일을 허용하지 않습니다.

5) 당신이 배치 파일에서 VirtualDub 프로그램을 실행하려면, 당신은 "start /wait" [각주:2]를 사용하여 실행할 필요가 있습니다. 그게 아니라면 VirtualDub 프로그램을 읽어온 뒤에도 배치 파일이 계속 실행될 것입니다. 프로그램에서 이용하려면, CreateProcess()를 이용하여 VirtualDub을 실행하고, VirtualDub 프로그램이 작업을 완료할 때까지 기다리려면 WaitForSingleObject()를 이용하십시오.

VirtualDub 스크립트 시스템은 대개 사용자 인터페이스를 통하여 같은 조작법을 제공합니다. 거기에는 어떤 숨겨진 기능도 없습니다. 그리고 몇몇 옵션은 스크립트에서 설정할 수 없습니다. 스크립트에서 캡처 모드 사용은 완전히 불가능합니다. 그러므로 캡처 기능을 위해 윈도 VCR을 설정하려고 시도하지는 마십시오.

Sylia: 세계 최악의 스크립트 언어

내가 이 스크립트 언어를 만들었을 때 내가 생각한 것을 나는 모릅니다. 그것은 매우 느슨하게 C 언어에 바탕을 두고 있습니다. 나는 이것을 만들기 전에 버블검 크라이시스(Bubblegum Crisis)[각주:3]를 보았습니다. 단지 세 가지 형의 변수(void, int, string)가 있고, 세 가지 키워드가 정의되어 있었습니다.

[code php]declare    var;    전역 변수를 지정된 형 없이 선언.
true        1
false        0[/code]

모든 문장 또는 식이 선언되지는 않으며, 모든 문장은 세미콜론( ; )으로 끝나야 한다. 어떤 흐름 제어도 없습니다. 함수도 없고, 프로시저도 없습니다. if / while / for / switch / goto 명령도 없습니다. Sylia는 클래스 객체와 배열을 지원합니다. 그러나 스크립트에서 그것들은 정의될 수 없거나 또는 사례를 들어 증명할 수는 없습니다. 객체는 변수에 할당될 수 있으며, 다음과 같은 경우에 유효합니다.

[code php]declare foo;
foo = VirtualDub.video.filters;
foo.Add("bar");[/code]

배열과 멤버 함수의 이름은 또한 변수에 할당될 수 있습니다. 후자의 경우, 변수가 역참조될 때까지 기다리는 것이 오버로드 해결책입니다.

상수는 아마도 정수 또는 문자열(string)입니다. 정수는 32비트이며 부호가 있습니다. 그리고 십진수/8진수(앞에 0을 붙임)/16진수(앞에 0x를 붙임)로 지정할 수 있습니다. -1L과 같은 형 접미사는 허용되지 않습니다. 문자열은 큰따옴표( " " )로 감싸야 하지만, 다음과 같은 C 언어 이스케이프 문자를 포함할 수 있습니다.

[code php]\a, \b, \f, \n, \r, \t, \v, \xhh, \\, \"[/code]

문자열은 아마도 널(null)을 포함하지 않습니다.

다음과 같은 C 언어의 연산자를 수식에서 지원합니다.

[code php]=    할당
+    정수 더하기, 문자열 연결 또는 양수 부호(단항 연산자)
-    정수 빼기 또는 음수 부호(단항 연산자)
*    정수 곱셈
/    정수 나눗셈
%    나머지 연산
[]    배열 색인 연산자
()    집합 표시 또는 함수 역참조 연산자
.    객체 역참조 연산자
~    비트 부정 연산잔 (bitwise not)
&    비트곱 연산자 (bitwise and)
|    비트합 연산자 (bitwise or)
^    비트 배타합 연산자 (bitwise xor)
!    논리 부정 연산자 (logical not)
==    정수 비교 (같은)
!=    정수 비교 (다른)
<    정수 비교 (작은)
<=    정수 비교 (작거나 같은)
>    정수 비교 (큰)
>=    정수 비교 (크거나 같은)
&&    논리곱 (logical and)
||    논리합 (logical or)[/code]

우선 순위는 C 언어와 같습니다. 0으로 나누기와 나머지 연산은 약간의 매스꺼움을 야기하거나, 불안정을 유발하거나, 또는 스크립트 에러를 발생시킵니다.

UTF-8 문자열 인코딩 (VirtualDub 1.5.5 이상)

VirtualDub 1.5.5 버전부터, Windows NT/2000/XP 하에서는 응용프로그램의 일부가 유니코드로 실행됩니다. 이는 8비트(ANSI)로 나타낼 수 없는 문자를 가지는 파일명이 존재함을 뜻합니다. 스크립트 명령어는 내부 필터의 예외에 따라 파일명을 받아들입니다. 지금은 ANSI보다는 UTF-8을 받아들입니다. UTF-8은, 멀티바이트 시퀀스를 사용하여 인코딩된 U+007F 위의 코드 포인트를 제외하면, Win32에서 사용하는 유니코드 인코딩인 UTF-16과 비슷합니다.

VirtualDub은 스크립트를 저장할 때 C 언어 형식의 \x 이스케이프 문자열을 사용하는  UTF-8 시퀀스를 이스케이프합니다. 그래서 심지어 파일명을 나타내는 때에도 스크립트 파일에서 상위 비트 문자는 전혀 볼 수 없습니다. 이것은 1.5.5 버전에서 스크립트가 ANSI 파일로서 읽어올 수 있음을 뜻합니다.

UTF-8 인코딩 또는 유니코드 표준에 대한 더 많은 정보는 유니코드 웹사이트 http://unicode.org/ 를 살펴보기 바랍니다.

추가적인 데이터 형 (VirtualDub 1.6.0 이상)

VirtualDub 1.6.0 버전부터, Sylia 스크립트는 64비트 긴 정수(long integer) (l) 및 배정도 실수 (d) 형, 변수, 상수를 지원합니다. 해석기(interpreter)는 메소드 원형에 어울리는 데에 필요하다면 자동으로 형 변환을 합니다. 다중 오버로드가 가능하다면, 먼저 목록에서 하나가 사용됩니다.

꾸미지 않은 문자열(VirtualDub 1.6.1 이상)

  • 옮긴이 주 : “Undecorated strings”을 “꾸미지 않은 문자열”로 옮긴 까닭은 UTF-8 문자열로 인코딩하지 않은 상태 또는 C 언어 이스케이프 문자를 쓰지 않은 상태를 가리키기 때문입니다.

이스케이프된 역슬래시를 포함하는 문자열 경로는 배치 파일에서 만들어지기 어렵고, 몇몇 언어는 UTF-8 변환을 지원하지 않습니다. Sylia 스크립트는 문자열을 위한 대체할 수 있는 구문을 지원합니다. 앞에 u 또는 U 문자가 붙은 문자열은 꾸며지지 않은, ANSI 인코딩된 문자열처럼 다루어집니다. 예컨대:

[code php]VirtualDub.Open(U"e:\test\test.avi");[/code]

문자열은 명령어 시스템에서 다루어지기 전에 스크립트 시스템 안에서 시스템 ANSI 코드페이지에서 UTF-8로 자동으로 바뀝니다. 이것은 이스케이프 또는 텍스트 변환이 필요 없이 스크립트 안에 파일 경로를 직접 삽입하는 것을 허용합니다.

참고로 위의 예제를 ANSI 문자로 나타내면 다음과 같습니다.

[code php]VirtualDub.Open("e:\\test\\test.avi");[/code]

스크립트 인수 (VirtualDub 1.6.4 이상)

불러오기 (/i) 스위치는 명령행으로부터 스크립트에 다다르는 매개변수를 허용하도록 추가되었습니다.

[code php]virtualdub /i foo.script in.avi out.avi[/code]

/i 스위치 뒤에 곧바로 나타나는 스위치가 없는 매개변수는 VirtualDub.params[] 배열에 자리 잡습니다. 위의 예제에서 VirtualDub.params[0]은 이렇게 문자열 "in.avi"를 반환합니다.

명령행 인터페이스 (VirtualDub 1.6.5 이상)

VirtualDub 1.6.5 버전부터, 명령행 모드에서 VirtualDub 프로그램의 실행이 가능합니다. 명령행 모드는 몇 종류의 배치 작업을 더 쉽게 만듭니다. 그럼으로써 vdub.exe (32비트) 또는 vdub64.exe (64비트)를 실행하십시오. 이것은 그때 프로그램의 출력 방향을 표준 출력으로 바꿉니다. 또한 이것은 오류가 발생하면 0 이 아닌 오류 코드를 반환합니다.

프 로그램을 /? 옵션과 함께 실행하면 명령행 도움말을 보여줍니다.

버전 조회 (VirtualDub 1.6.5 이상)

실행할 수 있는 빌드 번호를 VirtualDub을 종료할 때 나타내도록 하는 /queryVersion 플래그가 추가되었습니다. 이것은 프로그램의 다른 버전을 위해 더 쉽게 검출하고 조정하도록 만들어 줍니다. NT CMD 배치 파일를 실행하면 %ERRORLEVEL% 환경 변수에서 빌드 번호를 찾게 됩니다.

캐스팅 (VirtualDub 1.6.7 이상)

1.6.7 버전에서는, 수치형 자료 사이에서 C 언어 형식의 캐스트를 강제로 사용하는 것이 가능합니다.

[code php]Foo(1 + (int)4.0);[/code]

배정밀도 실수(double)로부터 롱(long) 또는 인트(int)로의 캐스팅은 0을 잘라내게 됩니다. 배정밀도 실수의 값이 대상 형식으로 표현할 수 없으면, 결과 값은 확정되지 않습니다. 롱(long)으로부터 인트(int) 결과 값으로의 캐스팅은 하위 비트를 보존합니다. 그리고 인트(int)으로부터 롱(long) 결과 값으로의 캐스팅은 부호를 확장합니다.

수치 값으로부터 문자열로, 문자열로부터 수치 값으로 캐스팅될 수 없습니다. Atoi() 및 Atol(), Atod(), ToString() 함수를 이용하십시오.

이 글은 스프링노트에서 작성되었습니다.

  1. 나중에 작업 단추(Defer button)는 VirtualDub 1.6.7 (WIP) 이후에 파일 저장 대화상자의 왼쪽 아래에 나타나는 체크 박스 및 메시지를 가리킨다고 여겨집니다. 나중에 이름이 바뀌었고, 결국 V1.9.x에서는 사라졌습니다. [본문으로]
  2. "start /wait"에 대한 자세한 사항은 명령 프롬프트에서 "start /?"를 입력하기 바랍니다. [본문으로]
  3. 버블검 크라이시스(Bubblegum Crisis)는 1987년작 일본의 애니메이션입니다. [본문으로]
글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

카테고리

분류 전체보기 (1005)
스크립트 (22)
벌레와 팁 (126)
소프트웨어 (240)
하드웨어 (6)
이야기 (24)
말의 나무 (506)
미쳐보자 (22)
일기 (48)
아이폰 (10)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

글 보관함