Linux generic

psycho 2012. 11. 16. 01:24

 AviSynth라는 영상처리용 프로그램이 있다. 리핑(Ripping)에 관심이 있는 사람이라면 한번쯤은 들어봤을 텐데, 무료로 사용할 수 있으면서도 수많은 플러그인이 개발되어 있어 잘만 사용하면 상용 동영상 편집 소프트웨어 못지않은 작업을 할 수 있는 아주 바람직한 녀석이라 할 수 있다.


 문제는 저 녀석이 기본적으로 Windows용이라는 데 있다. 물론 Windows를 쓰는 사람에게야 아무런 문제가 되지 않지만, 필자같이 메인 운영체제로 Linux를 쓰는 사람에게는 이만한 저주도 없다. 저 AviSynth라는 녀석과 비슷한 컨셉으로 Windows 이외의 운영체제도 지원할 수 있도록 개발되고 있는 프로젝트는 꽤 있지만, 아직 AviSynth 자체를 대체할 만한 물건은 없는 상태이다.


 다행스러운 점은, Linux 진영에는 WINE이라는 Win32 호환 계층1이 있다는 점이다. 2013년을 바라보고 있는 이 시점에서는 (제대로 설정했을 경우) 상당수의 Win32용 응용프로그램을 (수많은 미구현 메시지와 함께) 별 탈 없이 돌릴 수 있다. 심지어는 Direct3D를 사용하는 게임까지 돌아간다2. 이는 AviSynth도 예외가 아니라서, 몇몇 필요한 파일들만 설치해주면 쓸 수 있다. 당연히, 순수한 WINE 자체만으로는 제대로 돌아가지 않는다.


 이 글은 기본적으로 WINE을 배포판 수준에서 지원하는 Linux를 대상으로 한다. CentOS 같이 WINE을 기본으로 지원해주지 않는 배포판에서는 컴파일해서 사용하는 수밖에 없다. 아쉽게도 필자는 WINE을 지원해주는 openSUSE를 쓰고 있는지라 컴파일 관련 문제에 대해서는 인터넷 검색으로 직접 해결해야 한다. 혹시 직접 컴파일한 버전으로 해볼 일이 있다면 추가하도록 하겠다.


 ※필요한 것들

Mesa : OpenGL 라이브러리. 이게 없으면 WINE의 DirectX 관련 기능이 제대로 동작하지 않는다. 32bit 프로그램을 쓰기 위해서는 32bit

           라이브러리를 설치해야 하고, 64bit 프로그램을 쓰기 위해서는 64bit 라이브러리를 설치해줘야 한다.3 운영체제가 64bit라고 해서

           64bit 라이브러리만 덜렁 설치했다간 DirectShow를 사용하는 프로그램에서 온갖 에러가 쏟아지는 장면을 감상하게 될 것이다.

Winetricks : 2012년 11월 현재 안정버전이 1.4씩이나 되는데도 불구하고 미완성인4 WINE에 실질적으로 Windows용 응용프로그램을

                 돌리는 데 큰 무리가 없도록 필요한 파일들을 자동으로 설치, 구성해주는 스크립트라고 생각하면 된다. WINE을 지원해주는

                 배포판이라면 대부분 wine 패키지 자체에 포함되어 있거나 winetricks라는 패키지가 따로 있을 것이다.


 먼저, WINE을 설치한다. openSUSE라면 zypper install wine, Ubuntu라면 apt-get install wine 등 각 운영체제에 맞는 방법으로 설치하면 된다. 필자가 모든 Linux 배포판을 다 써 본 것이 아니므로 자기가 사용하는 운영체제에서 사용하는 명령이 없다고 불평하지는 않았으면 한다.

 다음으로 Mesa 라이브러리를 설치하는데, X server를 사용하는 시스템에는 기본적으로 설치되어 있을 것이다. 단, 64bit Linux를 쓰는 독자의 경우 32bit용 프로그램을 사용하고 싶다면5 반드시 32bit용 Mesa 라이브러리 패키지의 이름을 검색 명령으로 찾아보고 그것을 설치해야 한다. 아주 중요한 사항이라 두 번에 걸쳐 이야기하는 것이다.

 그 다음 과정은 winecfg를 실행해서 기초적인 설정을 해주는 것인데, 생략해도 큰 상관은 없다. 어차피 어떤 프로그램이든 WINE을 통해 실행시키면 첫 실행시에 Default 설정을 해주기 때문이다. 물론 설정을 따로 만져줘야 할 필요가 있다면 만져주면 된다. 이 글에서는 WINE의 설정에 관해서 자세한 사항은 이야기하지 않겠다.

 그 다음으로, winetricks라는 프로그램이 설치되어 있는지 확인한다. 혹시 배포판에서 지원해주지 않는 경우에는 http://winetricks.org/winetricks의 내용을 통째로 긁어 winetricks라는 이름으로 저장한 후 사용하면 된다6. winetricks는 GUI를 지원하지만, 우리의 목적을 달성하기 위해 설치해야 할 것은 두 가지밖에 없으므로 그냥 Command-line으로 설치하고자 한다. 다음의 명령을 실행하자. 필요한 DLL 파일을 알아서 긁어온 다음 알아서 적당한 위치에 설치하고 설정해준다.


 winetricks dlls vcrun6sp6 quartz


 AviSynth가 VC++ 6 Runtime을 요구하기 때문에7 vcrun6sp6 패키지를 설치해주지 않으면 AviSynth.dll을 불러올 때 에러가 발생한다. quartz는 DirectX 라이브러리의 일부로, AviSynth 자체에는 필요하지 않지만 DirectShow를 사용할 경우(AviSynth의 DirectShowSource()를 사용하는 경우 등)에 설치해주지 않으면 역시 아주 보기좋은(?) 에러8를 뱉어내는 WINE을 보게 될 것이다.


 AviSynth, ffdshow9, Haali Media Splitter10는 그냥 설치 프로그램을 받은 다음 WINE으로 돌려주면 별 문제 없이 설치해서 사용할 수 있다. Haali Media Splitter를 굳이 써야 할 이유가 없거나 좋아하지 않는 사람은 설치하지 않아도 무방하다. 필요하다면 비슷한 기능을 하는 다른 프로그램을 설치해서 쓰면 될 것이다. 단, 그 프로그램을 설치했을 때 WINE 상에서 제대로 동작하지 않는다면 필요한 함수가 WINE에 제대로 구현되어 있지 않은 경우가 대부분이므로 필요한 DLL을 찾아서 winetricks로 설치하거나 수동으로 설치해 주어야 한다.


 마지막으로 VirtualDub인데, 솔직히 필자는 VirtualDub을 preview 용도 정도로만 쓰기 때문에11 VirtualDub을 적극 활용하는 데는 필요한 라이브러리가 더 있을 수 있다. 이 부분에 대해서는 직접 해결법을 찾길 바라며 양해를 구하는 바이다. 어쨌든 WINE에서 VirtualDub을 제대로 쓰기 위해서는 반드시 해 줘야 할 것이 있다.


 1) Options 메뉴의 Preferences...를 찾아 들어간다.

 2) 왼쪽의 리스트에서 Display를 클릭한 다음, "Use DirectX for display panes" 옵션을 체크 해제한다.

 3) 하단의 Save 버튼을 눌러 설정을 저장한다.


 이렇게 해 주지 않으면 아마 대부분의 시스템에서 동영상을 열 때 VirtualDub이 에러를 뿜어낼 것이다12. 간혹 가다가 이 설정을 끄지 않아도 제대로 동작하는 경우를 볼 수도 있지만, 그 경우가 자신에게 해당된다고는 기대하지 않는 것이 정신건강에 좋을 것이다. 실험해 보고 싶다는 독자는 말리지 않겠다. 만약 운이 좋아 끄지 않아도 동작한다면 굳이 끌 필요는 없다. 사족으로, 필자가 실험해 본 바로 이는 DirectX 관련 dll을 설치해 준다고 해서 해결되지는 않는다. 사족에 하나 덧붙이자면, Windows 사용자의 경우도 이 설정을 끄고 사용하면 (출력되는 프레임의 화질 문제는 논외로 치고) 더 빠른 응답속도를 볼 수 있을 것이다.


 이 글에서는 Linux 시스템에서 AviSynth라는 막강한 동영상 처리 프로그램을 사용하는 데 필요한 극히 기초적인 부분만을 다루었다. 앞에서도 이야기했지만, WINE에서 뭔가가 안 된다면 API 미구현이 원인인 경우가 가장 많으며, winetricks로 필요한 라이브러리만 찾아서 설치해 주면 웬만한 문제는 해결된다. 구조적 문제로 라이브러리만으로는 해결이 안 되는 부분이라면 어쩔 수 없지만, 대부분의 경우 인터넷 검색만으로도 충분히 스스로 해결할 수 있다. 그렇기 때문에, 이 문서에서 설명하는 것 자체에 뭔가 문제가 있는 경우가 아니면 질문 같은 것을 받지 않는다. 이 점은 양해해 주기를 바라며, 또한 이 글이 굳이 Linux를 사용하면서 AviSynth 같은 Windows에 매우 의존적인 프로그램을 사용하려는 사람들에게 조금이나마 도움이 되기를 바란다.

각주 1

기능상 에뮬레이터라고 생각하기 쉽지만, 프로젝트 설명에 의하면 에뮬레이터가 아니다. 오죽하면 WINE이 WINE is not an Emulator의 약자라는 말까지 있겠는가?

각주 2

비록 자체 구현이 아니라 Windows의 Native DLL을 빌려와야 하는 경우가 많지만...

각주 3

아무것도 안 하더라도 32bit 프로그램이 돌아가는 Windows 64bit보다 못하다고 여길지도 모르겠는데, 실제로는 64bit Windows에도 SysWOW64 폴더 아래에 32bit DLL이 들어가 있으며, 이게 없으면 32bit 프로그램은 당연히 제대로 실행되지 않는다.

각주 4

반드시 그런 것은 아니지만, 관례적으로 개발자가 지향하는 목적을 완전히 달성했을 때 1.0의 버전을 붙인다. 즉, '주가 되는 기능'을 완성한 시점에서 1.0이 된다는 이야기다.

각주 5

AviSynth가 기본적으로 32bit용이기 때문에 실질적으로 필수라고 할 수 있다. 물론 64bit AviSynth를 사용려는 사람에게는 해당되지 않는 이야기다.

각주 6

실행 퍼미션을 주는 것을 잊지 말라. 아니면 Shell script이므로 /bin/sh winetricks의 형태로 실행시킬 수 있다.

각주 7

2012년 11월 16일 현재 최신 버전인 2.58, 2.6a3 기준

각주 8

필자의 경우에는 프로그램이 갑자기 죽는 건 예사요, Memory leak detected라는 무시무시한(?) 에러를 본 적도 있다.

각주 9

2012년 11월 16일 현재 최신 버전인 1.2.4422 기준

각주 10

2012년 11월 16일 현재 최신 버전인 2011년 3월 3일 릴리즈된 버전 기준.

각주 11

AvsP를 쓰는 게 좋지 않냐고 묻는 독자가 있을 수 있는데, 어찌된 일인지 필자가 Windows로 테스트를 했을 때도 필자가 작업하던 영상의 경우 에러 때문에 도저히 쓸 수 있는 상태가 아니었다.

각주 12

2012년 11월 16일 현재 최신 버전인 1.9.11 기준.

  1. 기능상 에뮬레이터라고 생각하기 쉽지만, 프로젝트 설명에 의하면 에뮬레이터가 아니다. 오죽하면 WINE이 WINE is not an Emulator의 약자라는 말까지 있겠는가? [본문으로]
  2. 비록 자체 구현이 아니라 Windows의 Native DLL을 빌려와야 하는 경우가 많지만... [본문으로]
  3. 아무것도 안 하더라도 32bit 프로그램이 돌아가는 Windows 64bit보다 못하다고 여길지도 모르겠는데, 실제로는 64bit Windows에도 SysWOW64 폴더 아래에 32bit DLL이 들어가 있으며, 이게 없으면 32bit 프로그램은 당연히 제대로 실행되지 않는다. [본문으로]
  4. 반드시 그런 것은 아니지만, 관례적으로 개발자가 지향하는 목적을 완전히 달성했을 때 1.0의 버전을 붙인다. 즉, '주가 되는 기능'을 완성한 시점에서 1.0이 된다는 이야기다. [본문으로]
  5. AviSynth가 기본적으로 32bit용이기 때문에 실질적으로 필수라고 할 수 있다. 물론 64bit AviSynth를 사용려는 사람에게는 해당되지 않는 이야기다. [본문으로]
  6. 실행 퍼미션을 주는 것을 잊지 말라. 아니면 Shell script이므로 /bin/sh winetricks의 형태로 실행시킬 수 있다. [본문으로]
  7. 2012년 11월 16일 현재 최신 버전인 2.58, 2.6a3 기준 [본문으로]
  8. 필자의 경우에는 프로그램이 갑자기 죽는 건 예사요, Memory leak detected라는 무시무시한(?) 에러를 본 적도 있다. [본문으로]
  9. 2012년 11월 16일 현재 최신 버전인 1.2.4422 기준 [본문으로]
  10. 2012년 11월 16일 현재 최신 버전인 2011년 3월 3일 릴리즈된 버전 기준. [본문으로]
  11. AvsP를 쓰는 게 좋지 않냐고 묻는 독자가 있을 수 있는데, 어찌된 일인지 필자가 Windows로 테스트를 했을 때도 필자가 작업하던 영상의 경우 에러 때문에 도저히 쓸 수 있는 상태가 아니었다. [본문으로]
  12. 2012년 11월 16일 현재 최신 버전인 1.9.11 기준. [본문으로]