SAMI→SRT 완벽 변환 프로그램


아이폰용 비디오 변환기를 만드는 과정에서 SAMI 자막을 SRT 포맷으로 변환해주는 프로그램을 뒤져봤다.
그런데, 모든 SAMI 자막을 정상적인 SRT로 변환해주는 프로그램을 찾을 수가 없었다.

여러가지 이유가 있겠지만, 대략 이런 이유들이 있다.

1. SAMI는 MS가 대충 만든 포맷
    SAMI 자체가 심도 있는 검토를 통해 만들어진 포맷이 아니다.
    HTML을 기반으로 하면서도 유니코드를 사용할 수 없다는 문제도 있다.[각주:1]

2. 자막의 특성을 제대로 반영하지 못함
    자막은 표시 시간 즉, 시작~끝 시간이 명시되어야 한다.
    하지만, SAMI는  를 끝 시간으로 사용하는 희안한 방식을 쓴다.

3. 실제 사용되지 않는 필드가 있음
    대표적으로, 헤더 영역의 다음 내용은 대체 왜 있는지 모르겠다.

<!--
P { margin-left:8pt; margin-right:8pt; margin-bottom:2pt;
    margin-top:2pt; font-size:20pt; text-align:center;
    font-family:arial, sans-serif; font-weight:normal; color:white; }
.KRCC { Name:Korean; lang:ko-KR; SAMIType:CC; }
.ENCC { Name:English; lang:en-US; SAMIType:CC; }
-->

    물론, 처음 만들어졌을 때는 나름의 이유가 있었겠지만, 아무도 사용하지 않는 사장된 필드다.
    이 외에도 <Sync start>와 <p>를 섞어 쓰는 것도 좀 어색하다.[각주:2]

4. HTML 기반임에도 불구하고 유니코드 포맷의 자막들도 많음
    대표적으로 영화 [아바타]의 감성자막. 나비어를 제대로 표현하기 위해 유니코드 포맷을 사용했다.
    즉, 규격에도 맞지 않은 한국식 자막이 있다.[각주:3]

즉, SAMI 파일 자체가 자막을 제대로 수용할 수 있는 규격이 아니어서 이를 억지로 적용한 자막이 많아 변환이 어렵다는 것.[각주:4]

반면에, 해외에서 널리 쓰이는 SRT 포맷은 SAMI 포맷에서 나타난 문제가 없다.[각주:5]

1. 유니코드 중 UTF-8을 기본으로 함
    우리나라에서 만들어진 SRT는 ASCII를 주로 사용하는데, UTF-8이 기본이다.
    그리고, 이렇게 해야 [아바타]의 나비어 자막도 제대로 나온다.

2. 자막의 특성이 상당부분 반영된 시작/끝 시간 필드가 있음

3. 사용되지 않는 필드가 거의 없음

물론, 화면 상에서 자막의 위치를 지정하는 기능이 없어, 더 나은 자막 규격에 비해 다소 부족한 면도 있다.
하지만, SAMI를 변환하기엔 아무런 무리가 없고, 애플에서 사용하는 ttxt로 변환하기도 쉬운 편이다.



SAMI 자막을 최대한 읽어들인 뒤 정상적인 srt 파일로 완벽하게 변환해주는 프로그램을 공개한다.
이 프로그램은 대략 아래와 같은 자막들을 읽고 변환한다.

1. ASCII/유니코드/UTF-8 포맷의 모든 SAMI 파일

2. 헤더에 명시된 언어와 실제 자막의 언어가 일치하지 않는 모든 SAMI 파일

3. 행의 끝이 CR/LF이거나 CR only, LF only인 모든 SAMI 파일

※ 적용된 언어별로 별도의 SRT 파일 생성

이 프로그램은 아래 링크에서 다운받을 수 있다.



  1. 코드 페이지를 표기할 수 있는 규격이 없음 [본문으로]
  2. 이 부분은 사실 다국어 지원을 멋지게 하기 위해 만들어진 것임. 하지만, 현실은 시궁창. [본문으로]
  3. 어떠한 것든지, "한국식"이란 말이 붙으면 다 엉터리다. 엉터리가 아닌 게 있나? 한국식 민주주의? [본문으로]
  4. 그럼에도 이 자막들을 다 잘 재생시키는 플레이어도 대단함. [본문으로]
  5. 외제 만세가 아니고, 정말이다. [본문으로]