본문으로 바로 가기
SubtitleMatrix

TTML을 SMI로 변환

형식 변환TTML / DFXP
또는 자막 텍스트를 붙여넣으세요

이 변환에서 달라지는 것

2가지가 버려지거나 결정이 필요합니다

  • 스타일

    굵게와 기울임을 뺀 모든 스타일(색, 외곽선, 그림자, 여백)

  • 형식 고유 내용

    원본 형식이 자막 블록 밖에 두는 내용(자막 블록이 아닌 구획, 머리말 텍스트, 자막 블록별 설정, 주석 처리된 이벤트) — 대상 형식에는 들어갈 자리가 없습니다

이 목록은 불러온 특정 파일이 아니라 두 형식의 기능 행렬에서 나옵니다. 어떤 파일은 형식이 허용하지만 행렬이 모델링하지 않는 기능을 쓰고 있다면 더 많이 잃을 수 있습니다.

TTML을 SMI로 바꾸면 각 자막이 SYNC 태그와 P 요소로 재배열됩니다. 시간은 밀리초 그대로 Start 값에 들어가지만, TTML 머리의 스타일 표는 SMI로 넘어가지 않습니다. SMI는 웹 페이지에 자막을 넣던 오래된 형식이라 브라우저가 태그를 직접 해석합니다.

TTML은 begin과 end에 00:00:04.126을 쓰고, SMI는 Start=4126처럼 시작 시각을 밀리초 정수로 씁니다. 값은 정확히 같습니다. SMI에는 끝 시각을 적는 자리가 없어서, 화면을 비우는 <P>&nbsp; 블록을 cue 뒤에 두는 방식으로 끝을 표현합니다.

잃는 것은 스타일과 형식 고유 정보입니다. <styling>의 글꼴·크기·외곽선·그림자·여백, <layout>의 영역, XML 머리말과 metadata가 사라집니다. 문단 안 강조는 <b>, <i>, <u>, <font color=…>로 남고, 두 줄은 <br>로 이어집니다.

여러 파일을 한 번에 처리할 수 있고 결과는 ZIP 하나로 묶입니다. SMI는 HTML과 비슷한 태그를 쓰지만 독립 파일이므로 서버가 필요하지 않으며, 변환도 브라우저 안에서만 실행됩니다.

예시

일반적인 TTML 파일을 SMI로 변환

입력

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
  <head>
    <styling>
      <style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
    </styling>
    <layout>
      <region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
    </layout>
  </head>
  <body>
    <div>
      <p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
      <p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
    </div>
  </body>
</tt>

결과물

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P>Hello <i>there</i>.
<SYNC Start=3500>
<P>&nbsp;
<SYNC Start=3500>
<P>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P>&nbsp;
</BODY>
</SAMI>

이 결과에서 사라지는 것: 스타일, 형식 고유 정보. 나머지는 줄 단위로 같습니다.

까다로운 입력에 같은 변환 적용

입력

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
    xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
    ttp:frameRate="25" xml:lang="en">
  <body>
    <div>
      <p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
      <p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
      <p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
      <p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom &amp; Jerry.</p>
    </div>
  </body>
</tt>

결과물

<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial, sans-serif; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1500>
<P>Loaded from an offset and a duration.
<SYNC Start=3500>
<P>&nbsp;
<SYNC Start=4000>
<P>A coarser clock spelling.
<SYNC Start=6500>
<P>&nbsp;
<SYNC Start=7000>
<P>Frames, at 25fps.
<SYNC Start=8480>
<P>&nbsp;
<SYNC Start=9000>
<P><font color="#FF0000">Half-open</font> and Tom &amp; Jerry.
<SYNC Start=11000>
<P>&nbsp;
</BODY>
</SAMI>

실제 파일에서 흔한 손상입니다. 줄 바꿈이 섞이고, 공백이 남고, 빈 필드가 있습니다. 위의 깔끔한 예시와 비교해 파서가 무엇을 넘겨주는지 보세요.

자주 묻는 질문

TTML에서 SMI로 어떤 스타일이 살아남나요?

글자에 붙은 강조는 살아남습니다. 굵기, 기울임, 밑줄, 색이 <b>, <i>, <u>, <font color=…> 태그로 본문에 적히고 브라우저가 이를 해석합니다. 반면 TTML의 스타일 표가 정한 글꼴, 크기, 외곽선, 그림자, 여백은 SMI에 실리지 않고, 자막을 넣은 페이지의 CSS가 대신 스타일을 정합니다.

TTML의 <styling>·<layout> 표는 SMI에서 어떻게 되나요?

사라집니다. XML 선언, 네임스페이스, 이름 있는 스타일과 영역, <metadata>, <p>의 style·region 참조가 SMI에 대응하는 자리를 갖지 못합니다. 문단 안쪽 span의 강조만 태그로 남습니다.

TTML을 SMI로 바꾸면 결과가 어떻게 생겼나요?

cue 번호도 타임코드 줄도 없이, 자막마다 <SYNC Start=…> 태그와 그 아래 <P>가 옵니다. SYNC가 화면 내용을 통째로 바꾸기 때문에 cue 뒤에는 <P>&nbsp; 블록을 두어 화면을 다시 비웁니다. TTML의 cue 하나가 SMI의 cue 하나가 됩니다.

TTML 시간값은 SMI에서 정확한가요?

밀리초까지 정확합니다. TTML의 00:00:04.126은 SMI의 Start=4126이 되고, 반올림이나 이동이 없습니다. 2.9초짜리 자막은 SMI에서도 2.9초입니다.

두 줄짜리 TTML 자막은 SMI에서 어떻게 되나요?

두 줄 사이에 <br>이 들어갑니다. SAMI가 강제 줄 바꿈을 적는 방식이며, 두 줄이 한 자막이라는 사실은 유지되어 재생기가 함께 보여 줍니다.

TTML cue 순서는 SMI에서도 유지되나요?

유지되고, 변환 과정에서 시작 시간이 이른 순서로 정렬됩니다. TTML이 cue를 뒤섞어 두었다면 SMI 결과에서 순서가 바로잡히며, 이는 내용이 아니라 구조를 바꾸는 일입니다.

관련 도구