|
x264 코덱의 성능과 악명을 동시에 들어오던 차에, 요즘 심취하게 된 퍼스트 건담 avi의 사이즈를 줄일 목적으로 손을 대 보았습니다. 먼저 xvid 1.1.0을 써서 비트레이트를 줄여보았지만, 어쩔 수 없는 깍두기와 변색 때문에 xvid는 포기했습니다.
하룻밤 동안의 삽질을 거쳐 x264 인코딩의 얼개를 파악했습니다.
필요한 유틸리티는 다음과 같습니다.
x264 rev. 604 binary by jarod
AVISynth 2.5.5 (기다리면 다운로드창이 뜹니다)
MKVtoolnix (win2000/xp/2003용)
VirtualDubMod
작업과정의 자동화를 위해서 다음 유틸리티가 더 필요합니다.
forfiles.exe
AVISynth와 MKVtoolnix는 설치하고, x264.exe와 forfiles.exe는 작업 디렉토리에 넣어둡시다.
제가 사용할 디렉토리는 e:\dn2입니다.
제가 소개할 방법은 cmd창에서 명령행 x264.exe (x264 CLI)를 직접 다루는 것입니다.
직관적이지는 않지만 배치 파일을 이용한 자동화가 강점입니다.
다른 방법으로는 1) vdubmod+x264vfw를 사용하는 것과, 2) MeGUI라는 전용 툴을 사용하는 것이 있습니다.
1)은 친숙한 virtualdub 환경에 인코딩할 수 있고 directshow filter가 지원하는 모든 avi파일을 바로 읽어들일 수 있다는 장점이 있는 반면, x264vfw가 더 이상 업데이트되고 있지 않아서 최신 버전의 모든 옵션을 적용할 수 없습니다.
2)는 비교적 업데이트가 빠르고 익숙해지면 쓰기 편리한 반면, x264 최신 버전과는 여전히 거리가 있고 AVISynth 최신 버전과 호환되지 않으며 자동화가 조금 불편합니다.
[과정 1] x264.exe의 사용법
x264.exe --longhelp를 치면 사용법이 죽 나옵니다. 텍스트 파일로 저장하고 다시 열어 보도록 합시다.
많은 옵션이 눈을 어지럽게 하는데요, 전부 설명하기는 어렵습니다. 아는 것도 별로 없고;;
지니님 블로그http://blog.naver.com/bobaejin2?Redirect=Log&logNo=150002312599를 참조했습니다.
옛 버전과 옵션 이름이 바뀐 것이 있어 일일이 맞춰보느라 조금 힘들었습니다.
아무튼 주목할 옵션은 다음과 같습니다.
--keyint 250
--scenecut 60
--bframes 3
--b-pyramid
--deblock 1:1
--ref 6
--qcomp 0.7
--partitions all
--direct temporal
--weightb
--me umh
--subme 6
--b-rdo
-8
-t 1
여기에 bitrate, 1 pass/2 pass, stats 파일 이름이 들어갑니다.
[과정 2] AVISynth의 사용법
AVISynth는 avi파일을 자유자재로 편집할 수 있는 스크립트 언어입니다.
형식은 텍스트 파일, 확장자는 .avs이고 일반 .avi과 똑같이 재생할 수 있습니다.
자세한 사용법은 설치 후 프로그램 폴더에 들어있는 <AviSynth Documentation>을 읽어보시기를.
여기에서 작성할 Gundam_01.avs의 내용입니다. 사운드 스트림을 제거한 .avi를 새로 만들지 않아도 간편하게 비디오 스트림만 인코더로 넘겨줄 수 있습니다. 미디어 플레이어로 재생하면 소리만 없는 채로 잘 나옵니다.
[과정 3] VirtualDubMod로 사운드 스트림 빼내기
나중에 MKVtoolnix로 영상과 합칠 사운드를 원본에서 뽑아내야 합니다. VirtualDubMod를 실행하고 원본 .avi를 연 다음 메뉴에서 [Streams]-[Stream list]-[Demux]를 클릭합니다. MP3/AC3 등등 원본 형식 그대로 뽑아줍니다. Gundam-01.mp3로 저장하면 충분합니다.
※ VirtualDub에서 wav 형식으로 뽑아내면 나중에 mkvtoolnix에서 합쳐지지 않습니다. 꼭 VirtualDubMod를 쓰세요.
[과정 4] 실제 인코딩
다음 배치 파일을 만들어서 실행합니다.
473kbps로 인코딩하면 640x480x23.97fps 23분짜리 영상이 대락 85mb정도로 맞춰집니다.
결과물로 gumdam_01-2.mkv가 튀어나옵니다.
※ start 명령에 /low 옵션은 idle priority를 부여합니다.
※ start 명령에 /b 옵션은 하나의 cmd창에서 실행시킵니다.
※ start 명령에 /wait 옵션은 앞선 프로세스가 끝날 때까지 다음 프로세스의 실행을 지연시킵니다.
[과정 5] 합치기
제 시퓨가 보급형인 관계로 아직 인코딩이 완료되지 않았지만, mkvtoolnix에 포함된 mkvmerge GUI로 불러들여 하단의 [Start muxing] 버튼을 눌러 합치기만 하면 됩니다. 불러들일 때는 비디오든 사운드든 관계없이 [Add] 버튼으로 추가합니다.
[과정 Special] forfiles를 이용한 자동화
다음 명령행을 써서 모든 .avi에 대하여 간편하게 만들 수 있습니다. (퍼스트 건담은 총 43화입니다)
enc_p1b.bat: 1패스용 배치 파일(비트레이트 입력)
enc_p2b.bat: 2패스용 배치 파일(비트레이트 입력)
enc_allb.bat: 1&2패스 통합 배치 파일(비트레이트 입력)
이제 enc.allb.bat [bitrate]를 실행하기만 하면 현재 디렉토리에 들어있는 모든 .avs를 자동으로 재인코딩합니다.
※ 굳이 파일을 여러개로 나누는 것은 스크립팅의 편리합도 있지만, 무엇보다 cmd.exe가 253자 이상의 인수를 받아들이지 못하기 때문입니다.
※ 그런데 x264 정말 인코딩 느리네요. 멘체스터 4200+로 갈아타고 싶은 욕망이 무럭무럭 들게 만듭니다.
하룻밤 동안의 삽질을 거쳐 x264 인코딩의 얼개를 파악했습니다.
필요한 유틸리티는 다음과 같습니다.
x264 rev. 604 binary by jarod
AVISynth 2.5.5 (기다리면 다운로드창이 뜹니다)
MKVtoolnix (win2000/xp/2003용)
VirtualDubMod
작업과정의 자동화를 위해서 다음 유틸리티가 더 필요합니다.
forfiles.exe
AVISynth와 MKVtoolnix는 설치하고, x264.exe와 forfiles.exe는 작업 디렉토리에 넣어둡시다.
제가 사용할 디렉토리는 e:\dn2입니다.
제가 소개할 방법은 cmd창에서 명령행 x264.exe (x264 CLI)를 직접 다루는 것입니다.
직관적이지는 않지만 배치 파일을 이용한 자동화가 강점입니다.
다른 방법으로는 1) vdubmod+x264vfw를 사용하는 것과, 2) MeGUI라는 전용 툴을 사용하는 것이 있습니다.
1)은 친숙한 virtualdub 환경에 인코딩할 수 있고 directshow filter가 지원하는 모든 avi파일을 바로 읽어들일 수 있다는 장점이 있는 반면, x264vfw가 더 이상 업데이트되고 있지 않아서 최신 버전의 모든 옵션을 적용할 수 없습니다.
2)는 비교적 업데이트가 빠르고 익숙해지면 쓰기 편리한 반면, x264 최신 버전과는 여전히 거리가 있고 AVISynth 최신 버전과 호환되지 않으며 자동화가 조금 불편합니다.
[과정 1] x264.exe의 사용법
x264.exe --longhelp를 치면 사용법이 죽 나옵니다. 텍스트 파일로 저장하고 다시 열어 보도록 합시다.
e:\dn2>x264 --longhelp > x264_help.txt일단 Syntax:를 보면 사용법이 나와 있군요. 입력이 가능한 파일로는 압축안된 raw YUV, MPEG(YUV4)가 있고, AVIS도 된다고 하네요. AVIS가 뭔지는 다음에 알아봅시다.
e:\dn2>x264 --longhelp
x264 core:54 svn-604
Syntax: x264 [options] -o outfile infile [widthxheight]
Infile can be raw YUV 4:2:0 (in which case resolution is required),
or YUV4MPEG 4:2:0 (*.y4m),
or AVI or Avisynth if compiled with AVIS support (yes).
Outfile type is selected by filename:
.264 -> Raw bytestream
.mkv -> Matroska
.mp4 -> MP4 if compiled with GPAC support (yes)
Options:
...
많은 옵션이 눈을 어지럽게 하는데요, 전부 설명하기는 어렵습니다. 아는 것도 별로 없고;;
지니님 블로그http://blog.naver.com/bobaejin2?Redirect=Log&logNo=150002312599를 참조했습니다.
옛 버전과 옵션 이름이 바뀐 것이 있어 일일이 맞춰보느라 조금 힘들었습니다.
아무튼 주목할 옵션은 다음과 같습니다.
--keyint 250
--scenecut 60
--bframes 3
--b-pyramid
--deblock 1:1
--ref 6
--qcomp 0.7
--partitions all
--direct temporal
--weightb
--me umh
--subme 6
--b-rdo
-8
-t 1
여기에 bitrate, 1 pass/2 pass, stats 파일 이름이 들어갑니다.
[과정 2] AVISynth의 사용법
AVISynth는 avi파일을 자유자재로 편집할 수 있는 스크립트 언어입니다.
형식은 텍스트 파일, 확장자는 .avs이고 일반 .avi과 똑같이 재생할 수 있습니다.
자세한 사용법은 설치 후 프로그램 폴더에 들어있는 <AviSynth Documentation>을 읽어보시기를.
여기에서 작성할 Gundam_01.avs의 내용입니다. 사운드 스트림을 제거한 .avi를 새로 만들지 않아도 간편하게 비디오 스트림만 인코더로 넘겨줄 수 있습니다. 미디어 플레이어로 재생하면 소리만 없는 채로 잘 나옵니다.
AVISource("e:\ani\Gundam_01.avi").KillAudio
[과정 3] VirtualDubMod로 사운드 스트림 빼내기
나중에 MKVtoolnix로 영상과 합칠 사운드를 원본에서 뽑아내야 합니다. VirtualDubMod를 실행하고 원본 .avi를 연 다음 메뉴에서 [Streams]-[Stream list]-[Demux]를 클릭합니다. MP3/AC3 등등 원본 형식 그대로 뽑아줍니다. Gundam-01.mp3로 저장하면 충분합니다.
※ VirtualDub에서 wav 형식으로 뽑아내면 나중에 mkvtoolnix에서 합쳐지지 않습니다. 꼭 VirtualDubMod를 쓰세요.
[과정 4] 실제 인코딩
다음 배치 파일을 만들어서 실행합니다.
start /low /b /wait x264.exe --keyint 250 --scenecut 60 --bframes 3 --b-pyramid --deblock 1:1 --ref 6 --qcomp 0.7 --partitions all --direct temporal --weightb --me umh --subme 6 --b-rdo -8 -t 1 --pass 1 --stats gundam_01-1.stats --progress -o gundam_01-1.mkv gundam_01.avs이제 1패스, 2패스 인코딩이 끝나기만을 기다리면 됩니다.
start /low /b /wait x264.exe --keyint 250 --scenecut 60 --bframes 3 --b-pyramid --deblock 1:1 --ref 6 --bitrate 473 --qcomp 0.7 --partitions all --direct temporal --weightb --me umh --subme 6 --b-rdo -8 -t 1 --pass 2 --stats gundam_01-1.stats --progress -o gundam_01-2.mkv gundam_01.avs
473kbps로 인코딩하면 640x480x23.97fps 23분짜리 영상이 대락 85mb정도로 맞춰집니다.
결과물로 gumdam_01-2.mkv가 튀어나옵니다.
※ start 명령에 /low 옵션은 idle priority를 부여합니다.
※ start 명령에 /b 옵션은 하나의 cmd창에서 실행시킵니다.
※ start 명령에 /wait 옵션은 앞선 프로세스가 끝날 때까지 다음 프로세스의 실행을 지연시킵니다.
[과정 5] 합치기
제 시퓨가 보급형인 관계로 아직 인코딩이 완료되지 않았지만, mkvtoolnix에 포함된 mkvmerge GUI로 불러들여 하단의 [Start muxing] 버튼을 눌러 합치기만 하면 됩니다. 불러들일 때는 비디오든 사운드든 관계없이 [Add] 버튼으로 추가합니다.
[과정 Special] forfiles를 이용한 자동화
다음 명령행을 써서 모든 .avi에 대하여 간편하게 만들 수 있습니다. (퍼스트 건담은 총 43화입니다)
forfiles /m *.avi /c "cmd /s /c echo AVISource("@path").KillAudio > @fname.avs"이렇게 하면 Gundam_01.avs~Gundam_43.avs가 생깁니다. 절대경로를 포함하도록 만든 .avs여서 작업 디렉토리로 옮겨도 에러가 생기지 않습니다.
enc_p1b.bat: 1패스용 배치 파일(비트레이트 입력)
start /low /b /wait x264.exe --keyint 250 --scenecut 60 --bframes 3 --b-pyramid --deblock 1:1 --ref 6 --qcomp 0.7 --partitions all --direct temporal --weightb --me umh --subme 6 --b-rdo -8 -t 1 --pass 1 --stats %1-1.stats --progress -o %1-1.mkv %1.avs
enc_p2b.bat: 2패스용 배치 파일(비트레이트 입력)
start /low /b /wait x264.exe --keyint 250 --scenecut 60 --bframes 3 --b-pyramid --deblock 1:1 --ref 6 --bitrate %2 --qcomp 0.7 --partitions all --direct temporal --weightb --me umh --subme 6 --b-rdo -8 -t 1 --pass 2 --stats %1-1.stats --progress -o %1-2.mkv %1.avs
enc_allb.bat: 1&2패스 통합 배치 파일(비트레이트 입력)
forfiles /M *.avs /c "cmd /c enc_p1b.bat @fname && enc_p2b.bat @fname %1"
이제 enc.allb.bat [bitrate]를 실행하기만 하면 현재 디렉토리에 들어있는 모든 .avs를 자동으로 재인코딩합니다.
※ 굳이 파일을 여러개로 나누는 것은 스크립팅의 편리합도 있지만, 무엇보다 cmd.exe가 253자 이상의 인수를 받아들이지 못하기 때문입니다.
※ 그런데 x264 정말 인코딩 느리네요. 멘체스터 4200+로 갈아타고 싶은 욕망이 무럭무럭 들게 만듭니다.
출처 : MultiFlatfrom 게임서버 도전기.ㅋ
글쓴이 : ryan 원글보기
메모 :
'컴퓨터관련' 카테고리의 다른 글
Window 작업관리자 실행시 알려진 프로세스 설명 자료...펌 (0) | 2008.02.17 |
---|---|
[스크랩] 불필요한 프로세서 - RTHDCPL.EXE ; ALCMTR.EXE (0) | 2008.02.17 |
mATX와 ATX의 차이...펌. (0) | 2007.10.14 |
[스크랩] AMD690 메인보드 ATI X1250 온보드 VGA (0) | 2007.10.14 |
nvidia sli... 펌. (0) | 2007.10.14 |