자막 이야기 1

 | 개발
2007.12.30 06:48
무비스트의 자막 부분 개발에 관한 이야기를 해볼까 합니다.
나름 가장 신경을 많이 쓴 부분이고 무비스트 개발의 큰 축을 이루는 부분이었기에 정리를 해보는 것도 좋을 것 같아서요. 개발자 대상의 글이긴 하지만 그리 어렵지 않으므로 개발자가 아닌 분들도 어느 정도 이해가 되실 듯 합니다.


무비스트의 가장 큰 특징이라면 무엇보다 고품질의 자막 지원일 것입니다.
사실 이것 때문에 개발을 시작했다고 봐도 과언이 아니고 개발시 가장 고민한 부분이기도 하죠.

보통 자막을 표시하는 방법은 크게 두 가지가 있는 것 같습니다. 하나는 디코딩된 영상에 추가로 덧그리는 것이고, 다른 하나는 영상과 별개로 그리는 것입니다. 이 두 방법은 구현의 난이도와 품질에 있어 트레이드 오프 관계에 있습니다. 전자는 구현이 쉽지만 영상이 리사이즈되면 자막도 따라서 스케일링되므로 품질이 떨어진다는 단점이 있고, 후자는 구현은 어렵지만 영상 크기가 변해도 변한 크기에 맞게 그릴 수 있으므로 품질이 유지된다는 장점이 있죠.

MPlayer와 VLC는 전자의 방법을 사용합니다. 그래서 전체 화면으로 보면 자막에 계단 현상이 나타납니다. 후자의 방법을 사용하는 대표적인 프로그램으로는 곰플레이어와 KMPlayer가 있습니다. 이들의 자막 품질이 좋은 이유죠. 예전에는 Windows에서 이런 걸 하려면 보통 오버레이를 이용했는데 요즘은 어떻게들 하는지 모르겠네요. Windows를 떠난지가 하도 오래 돼서... ^^;;;

맥에서 후자의 방법을 사용하는 플레이어는 거의 없는 듯 합니다. 몇 개 본 것 같기도 한데 오버레이 기법이 아니라 영상 위에 투명한 윈도우를 띄워 거기에 자막을 그리는 방식을 사용하더군요. 이 방법은 의외로 쉽게 품질 문제를 해결하지만 뜻하지 않은 부작용이 있습니다. 메인 윈도우를 이동하거나 리사이즈할 때 자막이 따로 노는 것 처럼 보일 수 있고 결정적으로 익스포제 실행시에 사라진다는 것입니다. 메인 윈도우와 함께 움직이고 항상 메인 윈도우 위에 보이게 하려면 자막 윈도우를 child window로 만들어야 하는데 child window는 익스포제 수행시 사라져 버리기 때문이죠. 익스포제 상태에서는 자막 좀 안나오면 어때? 하고 생각하면 그만이지만 막상 그걸 보면 참 어설퍼 보여서 이건 도저히 안되겠다 싶더군요.

무비스트는 고품질 자막을 목표로 하고 있기 때문에 당연히 후자의 방법을 사용해야 합니다. 문제는 그 방법을 모른다는 것이죠. 일단 시작은 예제를 따라 QTMovie와 QTMovieView로 했습니다. 먼저 -[QTMovieView drawRect:]에서 영상을 그린 후 자막을 추가로 그리도록 해보았습니다. 뜻대로 되지 않더군요. 개발자 커뮤니티를 봐도 이런 질문은 많지만 안된다는 답변 뿐이었습니다. 그리는게 안되면 컨트롤을 올리면 어떨까... NSTextField를 subview로 넣는 것이죠. 그럴싸한 아이디어였지만 역시 안되더군요. QTMovieView는 비디오 렌더링시 다른 가능성을 전혀 고려하지 않은 것 같았습니다. QuickTime의 자막 트랙을 이용해 볼까도 했는데 정보를 찾기가 너무 어렵더군요. 그러다가 QTMovieView는 항상 영상을 view에 꽉 차게 그리기 때문에 레터박스에 자막을 표시하는 것이 불가능하다는 것에 생각이 미치자 미련없이 포기해버렸습니다.

예전에 Windows에서 사용하던 오버레이 방법을 써보기로 했습니다. FunkyOverlayWindow 예제를 살펴봤는데 윈도우를 이동할 때 오버레이가 살짝 따로 노는 현상이 보기 싫더군요. 예전에 Windows에서도 그런 면이 있었는데 비슷한 것 같았습니다. 아무래도 만족스럽지가 못했죠.

그러다가 Custom Cocoa OpenGL 예제를 보고는 무릎을 탁 쳤습니다. CoreVideo101 예제에 QTMovieView 대신 OpenGL을 이용해 비디오를 그리는 방법이 나와있는데 자막도 OpenGL로 그리면 된다는 생각은 미처 못했던거죠. 마침 이 예제는 텍스트를 직접 OpenGL로 그리는게 아니라 Cocoa로 그린 후 이것을 텍스쳐로 만들어 뿌리는 방법을 사용하고 있었으므로 자막에 다양한 효과를 주기 위해 Cocoa를 그대로 이용할 수 있을 것 같았습니다. 그동안의 모든 고민이 한 방에 날아가는 순간이었죠!
사용자 삽입 이미지
신고

'개발' 카테고리의 다른 글

무비스트 빌드하기  (11) 2008.04.14
전체 화면 전환 효과  (1) 2008.02.06
자막 이야기 3  (6) 2007.12.30
자막 이야기 2  (2) 2007.12.30
자막 이야기 1  (2) 2007.12.30
Posted by 코코아벌레

BLOG main image
Mac OS X 용 동영상 플레이어 . . . . <무비스트> 공식 홈페이지 . . . . . . by 코코아벌레

카테고리

전체 (66)
무비스트 (9)
릴리즈 (48)
개발 (5)
FAQ (4)

달력

«   2017/04   »
            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            

글 보관함