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. 외제 만세가 아니고, 정말이다. [본문으로]
Trackback 0 Comment 9
  1. bum 2011.12.12 10:36 address edit & delete reply

    제가 매번 만들어 달라고 했었으면서 이걸 왜 이제 봤을까요. 한달이나 늦게... 잘 쓰겠습니다!! 컬러코드도 변환이 되겠군요

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2011.12.12 12:51 address edit & delete

      써보시고 문제점이 발견되면 올려주세요. ^^

    • Favicon of http://bbunker.com/blog2 BlogIcon bum 2011.12.28 11:10 address edit & delete

      잘 사용하고 있다고 보고 드리려고 왔습니다
      자막 변환 관련해서 더이상 고민이 없네요. 자막변환하느라 vmware에서 윈도우 부팅하는 것 빼면 말이죠. :)
      그간 여러개의 어플을 써봤지만 이게 제일 좋습니다. 다른분께도 강추.

      질문이 두개 있는데요
      1. 이 프로그램이 컬러코드도 변환이 되는 것이죠? 제가 그간 컬러코드가 없는 SMI만 변환을 했던 것인지 아직 컬러를 보진 못했습니다. 컬러코드 있는 SMI로 테스트 해보겠습니다
      2. 자막이 표기될때 기본적으로 3줄 박스가 생성됩니다. 자막이 한줄이나 두줄일때도요. 이건 애플TV의 문제인지는 확인되지 않으나 예전에 썼던 어플들에서는 자막 라인에 맞게 박스가 생성되면 자막이 (대사가 끝났음에도) 계속 표시되었고, 3줄박스가 생성되는 경우는 자막이 제때 사라졌었습니다.

    • Favicon of http://zockr.tistory.com BlogIcon BLUEnLIVE 2011.12.28 18:02 address edit & delete

      잘 쓰신다니 기분 좋네요. ㅎㅎ

      1. 네. 컬러코드를 정상적으로 변환합니다.

      2. iOS의 특성이 그렇더군요.

    • Favicon of http://bbunker.com/blog2 BlogIcon bum 2011.12.29 10:27 address edit & delete

      컬러코드도 잘 변환되고 아이폰에서는 자막 박스가 제대로 표시되는 것을 확인했습니다. 이 이상의 자막 문제는 애플의 문제이지 이 자막변환기의 문제는 아니다 라고 말하면 정확하겠네요!
      감사합니다.

  2. Favicon of http://ccy21c33.tistory.com BlogIcon Yun 2011.12.24 22:39 address edit & delete reply

    좋은 프로그램 감사합니다

  3. Favicon of http://bbunker.com/blog2 BlogIcon bum 2012.01.03 14:12 address edit & delete reply

    몇일더 사용한 피드백을 드립니다.

    VCi를 사용하지 않고 다른 툴 (맥의 ivi, subler) 로 인코딩을 하면서 이 툴로 변환된 SRT를 추가하거나 변환된 파일에 따로 SRT를 추가하는 작업을 하면 컬러코드가 날아가는 것 같습니다.
    - ivi로 인코딩+소프트자막 = <font> 태그 노출과 자막박스에 추가 빈출 하나 추가(총세줄)
    - subler로 인코딩된 파일에 SRT만 추가시 자동으로 font 태그 삭제.

    SRT로만 잘 변환이 되면 되는게 아니라 자막을 입히는 과정에서도 컬러코드가 깨지지 않도록 뭔가 처리를 해 줘야 하는 것 같습니다. 맥에서도 컬러코드를 살려서 SRT 삽입해주는 프로그램을 찾아봐야겠습니다. 안되면 vmware에서 VCi를 써야겠군요 :)

  4. seyo 2012.03.01 22:45 address edit & delete reply

    ps3에 사용할 때 srt로 변환해야 하는데..
    뭔가 부족한 변환툴 때문에 자막이 이상하게 나왔는데..
    덕분에 아주 깔끔하게 영화보게 되었습니다. 고맙습니다~ 아울러 아이패드에서도 잘 쓰겠네요~

  5. Favicon of http://darkkiller14.net BlogIcon darkkiller14 2012.07.04 01:29 address edit & delete reply

    안녕하세요^ 스플래쉬로 영화감상하늗네 srt로 변환시 컬러폰트가 안먹네요. 윗분이 지적하셨는데 이거 어떻게 해야 되는건가요?