자막 이야기 2

 | 개발
2007. 12. 30. 06:48
이제 smi 자막을 읽어 보여주기만 하면 됩니다.
그런데 smi의 스펙을 잘 몰랐습니다. HTML 비슷한 녀석이라는 것 밖에는... 나중에서야 Microsoft가 만든 포맷이라는 걸 알았는데 어차피 전체 스펙을 다 구현할 생각은 아니었고 우리나라에서 자주 쓰는 태그들만 구현할 생각이라 약식으로 만들기로 했습니다. 또 하나 생각해야 할 것은 실제로 배포되는 자막 파일들은 표준 스펙을 지키지 않는 것이 많다는 것이었습니다. 돌아다니는 자막 파일을 보니 태그 짝을 안맞추거나 <BR> 태그를 빠뜨린다거나 하는 불완전한 형식인 것이 많더라구요. 문제는 곰플레이어 같은 데서 이런 비표준 자막도 잘 읽어준다는 것입니다. 그러니 자막 제작자가 혹시 실수를 하더라도 눈치채지 못하고 잘못된 자막이 그냥 퍼져나가는 상황이 된 것 같습니다. 물론 반성해야 할 자막 제작자들도 있습니다. 어쩌다 하는 실수가 아닌 아예 대놓고 잘못 만든 것들도 많이 보이더라구요.

암튼 몇몇 자막 파일을 테스트로 하여 파서를 만들기 시작했습니다. 이런저런 비표준적인 요소들을 지원하는 것이 조금 신경 쓰였지만 별 문제없이 끝났습니다. 나중에 srt 같은 다른 형식의 자막도 지원할 수 있도록 했구요. 실제로 0.3 버전에서 srt 자막을 지원하기 시작했는데 srt 포맷은 문법이 매우 간단해서 비교적 분석이 쉬웠습니다. 하지만 외국도 자막 제작 사정은 우리와 비슷한지 그 간단한 문법에서도 역시 비표준 처리를 해야하더군요.

이제 영상과 동기를 맞춰 화면에 그리기만 하면 됩니다.
그리기는 기본적으로 텍스처를 만들어 뿌리는 식이므로 자막 외에도 상태 메시지나 이미지를 표시할 수 있도록 MMovieOSD라는 기반 클래스를 만들고 여기에서 MTextOSD와 MImageOSD를 상속했습니다. 자막은 여러 언어를 함께 표시하기 위해 MTextOSD에서 상속한 MSubtitleOSD를 따로 만들었습니다. 이들은 표시할 내용을 설정해두고 다음 그리기시에 텍스처를 만들어 그리는 구조입니다. 텍스처는 내용이 변경될 때에만 다시 만들어지도록 해 그리기의 부하를 최대한 줄였구요. 이제 Core Video의 콜백 함수에서 영상 시각에 맞는 자막을 찾아 MSubtitleOSD에 설정하기만 하면 되었죠. 좌표계가 다른 윈도우 시스템들과 달리 위, 아래가 뒤집혀 있어 좌표 계산이 조금 헷갈렸지만 결국 자막 표시에 성공했습니다. 환경 설정도 만들어 넣었구요.

고민스러웠던 점은 자막 크기를 어떻게 지정하는가 였습니다. 특정 포인트 크기를 줄 때 그 기준이 무엇이냐죠. 자막은 윈도우 크기에 따라 함께 커지고 작아져야 합니다. 윈도우 모드에서 원래 크기로 볼 때와 전체 화면으로 볼 때 영상 크기와 자막이 같은 비율로 유지되는 것이 좋으니까요. 이런저런 테스트를 통해 영상의 가로 크기가 640 픽셀일 때를 기준으로 자막 서체 크기를 설정하도록 했습니다. 윈도우 크기가 변경되면 서체 크기도 저 비율에 맞춰 변경됩니다.

환경 설정까지 대충 갖춰지니 제법 그럴 듯해 보이더군요. 환경 설정에서 자막 속성을 변경할 때 실시간으로 변경 사항이 적용되는 것을 보고 있노라니 내가 만들었지만 참 괜찮다 싶었습니다. 하하.

첫 릴리즈를 했을 때 PPC 맥에서 문제가 있었습니다.
PPC 맥이 없어서 좀 답답했지만 몇몇 분들의 도움으로 Kern 속성이 문제라는 것을 알았는데요, 쉽게 말해 글자 사이의 간격을 조절하는 속성인데 잘못된 것이 없음에도 PPC 맥에서는 죽더군요. 인터넷을 검색해보니 외곽선 속성과 함께 사용하면 죽는다는 보고만 있을 뿐 해결책은 나와있지 않았습니다. 할 수 없이 PPC 버전 Cocoa의 버그라고 결론짓고 그냥 Kern 속성을 빼버렸는데 아직까지 아무도 자간 조절 기능을 넣어달라고 하지 않아 다행입니다. ^^;;

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

무비스트 빌드하기  (12) 2008.04.14
전체 화면 전환 효과  (1) 2008.02.06
자막 이야기 3  (6) 2007.12.30
자막 이야기 1  (2) 2007.12.30
Posted by 무비스트
BLOG main image
홈페이지: https://movistprime.com EMAIL: movist.contact@gmail.com by 무비스트

공지사항

카테고리

전체 (96)
무비스트 (11)
릴리즈 (76)
개발 (5)
FAQ (4)

달력

«   2024/03   »
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
31

글 보관함