프로그램

MeGUI - tp, ts파일 고화질 인코딩

엑소알(xor_life) 2010. 4. 19. 18:16
tp, ts 파일을 x264코덱을 사용하여 mkv 파일로 인코딩하는 방법입니다. 사실 저 역시 세부 스크립트 작성에 관해서는 문외한이기 때문에 기본적인 프리셋을 이용하는 방법만 포스팅하겠습니다.


필수 프로그램 설치


.NET Framework / AviSynth 2.57 / MeGUI
이상 세가지 프로그램을 순서대로 모두 설치 하세요. 설치 중 진행되는 모든 업데이트, 프리셋도 역시 모두 설치합니다.


부가 기능 설치(선택사항)

* NeroAacEnc (AAC 오디오 파일을 인코딩)
- NeroAacEnc.exe 파일을 C:\program files\meGUI\tools\neroAacEnc 에 복사한 후 MeGUI에서 [Option] - [Settings] - [External Program Settings] 에서 neroAacEnc 파일 경로를 설정해 줍니다.

* MT 필터 (2개 이상의 코어를 사용하여 인코딩)
- MT.dll 파일은 c:\program Files\AviSynth 2.5\plugins 에 복사하고 avisynth.dll 파일은 c:\windows\systme32 에 덮어쓰기 합니다.

* FFT3dGPU 필터
- FFT3dGPU.dll 파일과 fft3dgpu.hlsl파일을 c:\program Files\AviSynth 2.5\plugins 에 복사합니다.

* Limited Sharpen Faster 필터
- LimitedSharpenFaster.avsi 파일을 c:\program Files\AviSynth 2.5\plugins에 복사합니다.


인코딩

MeGUI는 바탕화면에 따로 아이콘을 생성하지 않습니다. 따라서 C:\program files\megui\MeGUI.exe 와 C:\program files\megui\tools\dgindex\DGIndex.exe 파일을 쉽게 열기 위해 해당파일의 단축아이콘을 만들어 두는 것이 좋습니다.



먼저 MeGUI는 음성과 영상을 따로 분리해서 작업하는 것이 여러모로 좋습니다. 따라서 영상과 음성을 분리합니다.
DGIndex를 실행하고, F2를 누르거나 File - Open을 통해 원하는 ts, tp파일을 엽니다.



파일의 경로가 표시되면 OK를 누릅니다.



원본파일이 열리면 F5를 눌러 좌측의 파일 정보창을 띄웁니다. 이때 파일 정보창에서 몇가지 항목을 기억하도록 합니다. (Frame Size / Frame Rate / Video Type / Frame Type / Field Order / Bitrate) 대개 국내 방송의 tp파일일 경우 위 그림과 같은 정보가 동일하게 표시 될 것입니다.

ESC를 눌러 재생을 멈추고, 다시 F4를 눌러 음성과 영상파일을 분리해 저장합니다. 새로운 경로에 원본파일과 같은 파일명을 가진 AC3파일과 d2v파일이 생성됩니다. (경로를 따로 설정하지 않는 경우 원본파일과 같은 경로에 저장됩니다.)



이제 MeGUI를 실행해, Tools - AVS Script Creator을 실행합니다



AVS Script Creator 창에서 I/O탭을 선택해 Video Input에 아까 생성했던 d2v파일을 불러옵니다. Input DAR항목은 화면 비율을 가리키므로 16:9 HD방송이라면 1.78을 선택합니다. 또한 미리보기에서 화면 상하좌우중 검은 테두리가 보인다면 Crop항목을 체크하고 숫자를 조정해 잘라낼 수 있습니다. 또, Resize 항목을 체크하고, 1280 x 720을 입력합니다.



Filters탭에서 Source type항목과, Field order의 항목을 채웁니다. 원본파일을 음성과 영상으로 나누면서 확인했던 정보들을 입력해 주면 됩니다. (국내 방송의 경우 위 그림과 같이 선택하면 대개는 맞습니다.)
Deinterlace를 체크하고 Yadif를 선택하고, Resize Filter는 Lanczos (Sharp)를 선택합니다. 다른 필터를 선택해도 되지만, 가장 효율적인 필터가 Lanczos (Sharp)입니다. 또, Noise Filter를 체크하고 Minimal Noise를 선택합니다. (역시 체크 해제하거나 다른 필터를 사용하는 것은 취향의 차이입니다.)



Script 탭으로 갑니다. 이제 스크립트를 작성해야 하지만 필터사용법은 저도 잘 모릅니다. 고작 아는 것이라고 해봤자 MT모드와 FFT3dGPU, LimitedSharpenFaster입니다.

MT모드

2개이상의 코어가 작동 될수 있도록 하여, 인코딩 속도를 올려주는 유용한 기능이지만 DirectX기반의 필터들과는 충돌이 발생하므로 중복해서 사용할 수 없고 MT모드를 굳이 쓰더라도 인코딩 중 원래 CPU점유율이 높았던 컴퓨터의 경우는 효과가 없습니다.
스크립트의 최상단에 setMTmode(2,0) 과 setMemorymax(1024)를 입력하고 스크립트의 최하단에 ConvertToYV12()를 입력합니다.
* setMTmode(2,0)의 경우 괄호안의 숫자는 세부적으로 조정이 가능하고, 아무것도 입력하지 않았을때는 2,0의 기본값과 같습니다. setMemorymax(1024)는 램이 2기가 이상인 경우 설정해 주는 편이 좋다고 합니다. 
 

FFT3dGPU

노이즈를 감소시켜주지만 과도할 경우 뿌옇게 보이므로 기본값을 추천합니다.
스크립트에 아래의 글을 추가합니다.
LoadPlugin("C:\Program Files\AviSynth 2.5\plugins\FFT3dGPU.dll")
FFT3DGPU()



스크립트를 작성한 뒤 하단의 Save를 눌러 AVS파일을 저장합니다.



먼저 음성파일부터 용량을 줄여보도록 하겠습니다. 하단의 Audio에서 Audio Input에 아까 분리해 놓은 음성파일, AC3파일을 불러옵니다. Audio Output를 입력하지 않아도 자동으로 Input과 동일한 경로가 입력됩니다.
Encoder settings 항목의 Config를 선택합니다.



Bitrate를 192로 내려주고 OK를 누릅니다. 창이 닫히면 하단의 Enqueue를 눌러 작업을 예약합니다.



Queue탭에 가보면 위와 같이 음성파일의 다운믹스가 예약되어 있음을 확인할 수 있습니다.



Tools - Bitrate Calculator을 선택합니다.



Results의 Average Bitrate항목을 7000으로 설정합니다. (평균 비트레이트를 설정하거나 우측의 Total Size를 설정해서 최종 파일크기를 결정할 수 있습니다.) Framerate는 원본보다 올릴경우 화질은 그대로지만 용량만 증가할테고, 원본보다 낮출경우 화질의 저하를 가져오지 굳이 건드리지 않습니다.
Video File Size에 최종 파일의 크기가 표시되면 Apply를 누릅니다.



Encoder settings 항목에서 프리셋을 선택합니다. (위에서는 x264:DXVA-HD-HQ를 선택했습니다만 종종 x264:DVXA-HD-FAST를 선택할 때도 있습니다.) 파일포맷을 MKV로 선택합니다.



프리셋 우측의 Config를 클릭해서 구체적인 세부항목을 직접 설정하는 것도 가능합니다. 프리셋 설정이 끝나면 Enqueue를 눌러 작업을 예약합니다. (아까 눌렀던 하단의 Enqueue버튼이 아니라 동영상 프리셋 아래 위치한 Enqueue버튼을 눌러줘야 합니다.)



Queue탭으로 가면 영상인코딩도 작업예약이 되어 있음을 확인 할 수 있습니다. (하단의 After encoding를 설정하면 작업이 완료된 후 컴퓨터를 종료할 수도 있습니다.)
Start 를 눌러 작업을 시작합니다.



작업이 완료되면 용량이 작아진 AC3파일과 MKV파일을 확인할 수 있습니다.



이제 아까의 작업으로 생성된 AC3, MKV 두개의 파일을 하나로 합쳐줘야 합니다. Tools - Muxer - Adaptive Muxer을 선택합니다. (MKV Muxer을 선택해도 됩니다.)



Video Input에 새로 생성된 MKV파일을 입력하고, Audio 1의 Input에 새로 생성된 AC3파일을 입력합니다. 맨 아래 Container을 MKV로 바꿔줍니다. Queue를 눌러 작업을 예약합니다.



아까와 동일하게 Queue탭으로 와서 Start를 눌러 작업을 실행합니다.
이제 음성과 영상이 함쳐진 MKV파일을 확인할 수 있습니다. 과정이 복잡해 보이긴 하지만 실제로 몇번 해보다 보면 그다지 어렵지는 않습니다. 또, 일반 인코더에서는 느낄 수 없는 선명함을 느낄 수 있습니다.


Tip - 1Pass / 2Pass 인코딩 때 스크립트를 각각 다르게

앞서 말씀드린 것처럼 MT모드는 일부 필터와 충돌을 일으킬 수 있습니다. 대표적으로 FFT3dGPU필터입니다. 따라서 두가지를 동시에 사용할 수는 없습니다. 따라서 1Pass에는 MT모드만, 2Pass에는 FFT3dGPU 필터만 적용시켜야 합니다. 그런데 1Pass를 진행하고 다시 스크립트를 작성해 2Pass를 진행하는 것보다 간단한 방법으로 스크립트를 각각 다르게 작성하는 것이 가능합니다.

스크립트를 작성할때 MT모드만 적용하고, FFT3dGPU는 적용하지 않고 인코딩을 실행합니다. 1Pass 인코딩이 진행되는 중 AVS파일을 메모장을 이용해 직접 열어 MT모드를 지우고 FFT3dGPU를 적용시킨 후 저장하면 1Pass는 MT모드가 2Pass는 FFT3dGPU필터 가 각각 적용됩니다.