필터 설정 함수
[code php]2:1 reduce 설정 함수 없음.
2:1 reduce (HQ) 설정 함수 없음.
3x3 average 설정 함수 없음.
blur 설정 함수 없음.
blur more 설정 함수 없음.[/code]
[code php]box blurvoid Config(int width, int power);
brightness/contrast void Config(int brightness, int contrast);[/code]
[code php]deinterlace void Config(int mode);[/code]
0=섞음(blend), 1=복제1(dup1), 2=복제2(dup2), 3=버림1(discard1), 4=버림2(discard2), 5=겹치지 않음(unfold), 6=겹침(fold)
[code php]emboss void Config(int direction, int height);
field swap 설정 함수 없음.[/code]
[code php]fill void Config(int x1, int y1, int x2, int y2, int color);[/code]
x1...y2: 픽셀 입력, 색상은 24비트 RGB (HTML 코드처럼 입력. 다만 # 대신 0x 사용)
[code php]flip horizontally 설정 함수 없음.
flip vertically 설정 함수 없음.
general convolution void Config(int c0, int c1, int c2, int c3, int c4, int c5, int c6, int c7, int c8, int bias, int clip);
grayscale 설정 함수 없음.[/code]
[code php]hsv void Config(int h, int s, int v);[/code]
h: 색조(Hue) 조정, 0...65535 -> 0~360 도
s: 채도 배율, 0...131072 -> 0~200 %
v: 명도 배율, 0...131072 -> 0~200 %
[code php]invert 설정 함수 없음.[/code]
[code php]levels void Config(int inputlo, int inputhi, int gammacorr, int inputmid, int outputlo, int outputhi);
void Config(int inputlo, int inputhi, int gammacorr, int inputmid, int outputlo, int outputhi, int lumaonly);[/code]
모든 인수는 0~255 값을 가집니다. 다만, 24비트 고정 소수점 수로 표현되는 gammacorr 인수 제외.
만약 lumaonly 인수가 0 이 아니면 필터는 RGB 대신에 luma로 작동합니다.
[code php]logo void Config(string logoFile, int xpos, int ypos, int alphaEnable, int premultDisable, int xj, int yj, int opacity);
void Config(string logoFile, int xpos, int ypos, string alphaFile, int premultDisable, int xj, int yj, int opacity);[/code]
logoFile: 로고 이미지의 파일명
xpos, ypos: 원점으로부터의 위치 (픽셀) (xj/yj 참조)
alphaEnable: 0 이 아니면 픽셀 단위의 투명도 켜기. 투명도는 알파 채널에 바탕을 두고 있다.
premultDisable: 0 이 아니면 미리 곱해지지 않은 알파값(non-premultiplied alpha) 이용
xj: 수평 조정
0 - 왼쪽
1 - 가운데
2 - 오른쪽
yj: 수직 조정
0 - 위
1 - 가운데
2 - 아래
opacity: 완전한 로고 위의 알파 상수, 0...65536
[code php]null transform 설정 함수 없음.[/code]
[code php]resize void Config(int w, int h, int/string mode);
void Config(int w, int h, int/string mode, int framew, int frameh, int color);[/code]
필터 모드:
0 "가장 가까운 (nearest)" 또는 "점 (point)"
1 "이중 선형 (bilinear)"
2 "쌍삼차 (bicubic)"
3 (정밀한 이중 선형. 문자열 없음)
4 (정밀한 쌍삼차, 문자열 없음)
[code php]rotate void Config(int mode);[/code]
0=좌로 90도, 1=우로 90도, 2=180도
[code php]rotate2 void Config(int angle, int filtmode, int color, int expandbounds);[/code]
angle : 24비트 소수 (16777216 = 360도)
filtmode : 0=점(point), 1=이중 선형, 2=쌍삼차
[code php]sharpen void Config(int power);
smoother void Config(int threshold, int use_blur_pass);
threshold void Config(int threshold);
temporal softener 설정 함수 없음.
(motion blur)
temporal smoother void Config(int power);[/code]
[code php]TV void Config(mode);[/code]
0=Y, 1=I, 2=Q, 3=avg3x3, 4=avg5x5, 5=5x5+tmp, 6=chromaup, 7=chromadown
다른 필터
도널드 그래프트(Donald Graft)의 스마트 디인터레이서(smart deinterlacer; 스마트한 인터레이스 제거기)의 버전이 VirtualDub 프로그램에 포함되어 있습니다.
[code php]void Config(int motion_only, int blend, int luma_threshold, int scene_threshold);[/code]
내 자막 표시기:
[code php]void Config(int enable_supersampling, string script_filename);[/code]
다른 것들은 당신이 필터 제작자에게 요청해야 합니다.
객체 : VirtualDub.audio.filters (VirtualDub 1.5 이상)
이 하위 객체는 필터 그래프를 고급 음향 모드(advanced audio mode)로 제어합니다.
[code php]void Clear();[/code]
고급 필터 그래프에서 모든 필터를 제거합니다.
[code php]int Add(string name);[/code]
그래프에서 음향 필터를 추가합니다. 필터의 이름은 UTF-8로 인코딩됩니다. 필터의 ID#를 반환합니다.
[code php]void Connect(int srcfilt, int srcpin, int dstfilt, int dstpin);[/code]
원본 필터(srcfilt/srcpin)에 있는 출력 pin으로부터 대상 필터(dstfilt/dstpin)에 있는 입력 pin까지 두 필터 사이의 연락을 짓습니다. 두 필터와 pin 번호는 0부터 시작합니다.
객체 : VirtualDub.audio.filters.instance[nFilt] (VirtualDub 1.5 이상)
nFilt 인수는 0부터 시작하는, 필터 그래프에서의 음향 필터의 색인입니다.
[code php]void SetInt(int parmidx, int value);
void SetLong(int parmidx, int valuehi, int valuelo);
void SetDouble(int parmidx, int valuehi, int valuelo);
void SetString(int parmidx, string value);
void SetRaw(int parmidx, int length, string base64value);[/code]
음향 필터를 위한 설정 매개변수를 설정합니다.
"parmidx" 인수는 설정 매개변수의 색인입니다.
long 형(64비트 정수형) 및 double 형(64비트 부동 소수점형) 매개변수를 위해, 먼저 해석된 상위 32비트를 가지고 값은 2개의 32비트 정수로 나뉩니다. (the value is broken into two 32비트 integers, with the high 32비트s being passed first.)
문자열 매개변수를 위해, 문자열 값은 UTF-8 코드와 같은 유니코드 문자열로 인코딩됩니다.
raw (binary) 매개변수를 위해, "length" 인수는 인코딩되지 않은 길이를 바이트 단위로 참조합니다. 그리고 "base64value" 인수는 MIME BASE64 인코딩을 사용하여 인코딩된 바이너리 데이터입니다.
[code php]void SetLong(int parmidx, long value); // [VirtualDub 1.6 이상]
void SetDouble(int parmidx, double value); // [VirtualDub 1.6 이상][/code]
이 오버로드는 1.5 버전에서 같은 이름의 raw 메소드에 해당합니다. 그 함수들이 long 형 및 double 형 변수를 직접 다루는 경우는 제외합니다.
음향 필터 매개변수
그것들은 VirtualDub 1.5.6 버전에 내장된 음향 필터를 위한 설정 매개변수입니다.
필터 |
Index/자료형 |
설 명 |
Gain |
0 (double) |
이득 계수 (-8.0 ~ 8.0) |
New rate |
0 (uint32) |
새로운 진동수 (단위 Hz) |
Ratty pitch shift |
0 (double) |
음조를 일정 비율로 옮김 (0.5 to 2.0) |
Lowpass/highpass |
0 (uint32)
1 (uint32) |
진동수 분리 (단위 Hz)
필터 탭 (대략의 품질) |
Resample |
0 (uint32)
1 (uint32) |
새로운 진동수 (단위 Hz)
필터 탭 (대략의 품질) |
Stretch |
0 (double) |
샘플링 속도(샘플링 레이트) 늘이기 (0.25 ~ 4.0) |
VirtualDub.jobs 파일 형식
VirtualDub 프로그램에서 작업(Jobs)은 일반적인 텍스트 형식(plain text format)의 스크립트로서 저장됩니다. 그 스크립트는 추가적인 제어 매개변수를 가진, 특별한 형식을 가진 텍스트 문자열입니다. 그 작업 제어 파일을 직접 편집하기보다 VirtualDub 프로그램이 그 작업 제어 파일을 변경하도록 하는 것이 낫습니다. 하지만 텍스트 편집기 또는 외부 프로그램에서 편집하는 것이 유용합니다.
모든 제어 행은 달러 기호($)로 시작하는 토큰을 가진 주석 행이며, 그 행에는 선택적으로 행마다 오직 하나의 제어 연산(control op)을 가진 인수가 뒤따릅니다.
[code php]// $numjobs 3[/code]
이 행은 3개의 작업이 이 파일 안에 있다고 VirtualDub 프로그램에 알려줍니다. 평범한 스크립트로서 작업 파일(job file)을 실행할 수 있으며, 스크립트가 아닌 모든 명령은 주석으로서 저장됩니다. 작업 제어(job control)에서 오류 제어가 어렵더라도 각각의 부분은 분할된 스크립트로서 실행되며, 하나의 스크립트 안에서 생긴 오류는 다른 것의 실행을 막도록 오류는 그 분할된 스크립트 사이에 격리됩니다.
각각의 파일에서 추가적인 작업의 형식은 다음과 같은 형식을 가집니다.
[code php] // $job "Job 1"
// $input "f:\mkrtest.avi"
// $output "f:\test.avi"
// $state 2
// $start_time 01c01df3 c2eb68c0
// $end_time 01c01df3 eb3d85b0
// $script
<스크립트 명령>
// $endjob[/code]
작업($job) 및 입력 파일명($input), 출력 파일명($output) 토큰은 이스케이프 문자를 포함할 수 없는 문자열임을 기억하십시오. 또한 입력 및 출력 파일명은 화면 표시용으로 쓰입니다. 그것들은 스크립트와 일치해야 하며 그것들을 변경해서는 안 됩니다(they should match the script but changing them will not change the files used.).
상태 ($state) 토큰은 작업 항목의 실행 상태를 제어합니다.:
0 |
WAITING |
작업은 당장에라도 실행될 수 있습니다. |
1 |
INPROGRESS |
작업이 현재 실행중입니다. 작업 파일을 읽어왔을 때 VirtualDub 프로그램에서 이 태그가 보이면 작업이 중단된 것으로 봐야 합니다. 그리고 작업은 ABORTED 상태로 바뀝니다. |
2 |
DONE |
작업이 완료됐고, 실행될 필요가 없습니다. |
3 |
POSTPONED |
작업은 이미 실행되었으나 사용자가 연기시켰습니다. 따라서 생략되어야 합니다. |
4 |
ABORTED |
작업은 시작되었으나 완료되지는 않았습니다. 사용자가 WAITING 상태로 바꾸지 않는 한 VirtualDub 프로그램은 이 작업을 다시 시도하지 않습니다. |
5 |
ERR |
이 작업을 실행하는 동안 오류가 발생했습니다. 사용자가 WAITING 상태로 바꾸지 않는 한 VirtualDub 프로그램은 이 작업을 다시 시도하지 않습니다.
|
$start_time 및 $stop_time 토큰은 각각의 주어진 작업이 시작하고 멈추는 시간을 포함합니다. 시간은 두 개의 32비트 16진수 값으로서 저장됩니다. 첫 번째 것은 Win32 FILETIME 구조체의 dwHighDateTime 값이고, 두 번째 것은 dwLowDateTime 값입니다.두 값에서 0 (Zero)은 그 항목을 위한 어떤 시간도 가리키지 않습니다. 시작 시간 없이 멈춤 시간을 가지고 있음은 이해할 수 없습니다(It makes no sense to have a stop time without a start time.).
현재의 Sylia 스크립트는 $script 및 $endjob 표지를 하나로 몰아서 다루고 있습니다. 이것은 스크립트가 마지막―모든 작업 매개변수 명령보다 뒤에―에 와야 함을 뜻합니다. 이 스크립트에서, 다중 작업을 포함한, 어떤 명령이라도 실제로 유효합니다. 만약 다중 작업이 순서대로 나열될 필요가 있다면, 이것은 아마도 도움이 될 것입니다. 만약 처음 작업이 실패하면 다음 작업들은 실행할 수 없습니다. 호출 당시의 환경이 무엇이든 간에 스크립트는 실행합니다. 그래서 스크립트는 모든 매개변수를 알맞게 설정할 필요가 있습니다. 그리고 스크립트는 변수가 어떤 특별한 방법으로 설정된 구성인지를 추정할 수 없습니다.
이 글은 스프링노트에서 작성되었습니다.