TTML을 CSV로 변환
또는 자막 텍스트를 붙여넣으세요
이 변환에서 달라지는 것
3가지가 버려지거나 결정이 필요합니다
- 스타일
모든 스타일(굵게, 기울임, 색, 외곽선, 그림자)
- 위치
화면 위치 지정(모든 자막 블록이 기본 위치로 돌아갑니다)
- 형식 고유 내용
원본 형식이 자막 블록 밖에 두는 내용(자막 블록이 아닌 구획, 머리말 텍스트, 자막 블록별 설정, 주석 처리된 이벤트) — 대상 형식에는 들어갈 자리가 없습니다
이 목록은 불러온 특정 파일이 아니라 두 형식의 기능 행렬에서 나옵니다. 어떤 파일은 형식이 허용하지만 행렬이 모델링하지 않는 기능을 쓰고 있다면 더 많이 잃을 수 있습니다.
TTML을 CSV로 바꾸면 자막의 시간과 글자가 표의 행으로 옮겨지지만, 문서 머리에 있던 스타일과 화면 위치는 남지 않습니다. 결과는 start,end,text 머리글을 가진 스프레드시트 파일이라 엑셀이나 Google Sheets에서 바로 열어 고칠 수 있습니다.
TTML은 begin과 end에 00:00:04.126처럼 밀리초까지 적고 dur, 1.5s, 프레임 표기도 읽습니다. CSV의 start와 end 열도 같은 00:00:04.126 표기를 쓰므로 두 형식 사이에서 시간값은 한 글자도 바뀌지 않습니다. 반올림도 시간축 이동도 없습니다.
잃는 것은 스타일과 위치, 그리고 형식 고유 정보입니다. <styling> 표의 글꼴·크기·색·외곽선·여백, <layout> 표의 영역, XML 선언과 <metadata>는 CSV에 열이 없습니다. <span>으로 문단 안에 준 굵기·기울임·색은 텍스트 안의 태그로 남고, 여러 줄 자막은 한 셀 안에서 CSV 규칙대로 따옴표에 묶입니다.
한 파일이든 시즌 전체든 같은 방식으로 처리됩니다. 대기열이 파일을 차례로 읽고 모든 결과를 ZIP 하나로 묶어 내려 주며, 변환은 브라우저 안에서 끝나므로 업로드도 가입도 필요 없습니다.
예시
일반적인 TTML 파일을 CSV로 변환
입력
<?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>
결과물
start,end,text
00:00:01.000,00:00:03.500,Hello <i>there</i>.
00:00:03.500,00:00:06.000,"How are you?
Fine, thanks."
이 결과에서 사라지는 것: 스타일, 위치, 형식 고유 정보. 나머지는 줄 단위로 같습니다.
까다로운 입력에 같은 변환 적용
입력
<?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 & Jerry.</p>
</div>
</body>
</tt>
결과물
start,end,text
00:00:01.500,00:00:03.500,Loaded from an offset and a duration.
00:00:04.000,00:00:06.500,A coarser clock spelling.
00:00:07.000,00:00:08.480,"Frames, at 25fps."
00:00:09.000,00:00:11.000,"<font color=""#FF0000"">Half-open</font> and Tom & Jerry."
실제 파일에서 흔한 손상입니다. 줄 바꿈이 섞이고, 공백이 남고, 빈 필드가 있습니다. 위의 깔끔한 예시와 비교해 파서가 무엇을 넘겨주는지 보세요.
자주 묻는 질문
TTML의 굵기와 기울임은 CSV에서 살아남나요?
문단 안의 강조는 살아남고 스타일 표는 그렇지 않습니다. 굵기, 기울임, 밑줄, 색처럼 글자 일부에 붙은 서식은 CSV 텍스트 안에 <i>, <b>, <u>, <font color=…> 태그로 적힙니다. 반면 TTML이 문서 전체에 선언한 글꼴, 크기, 외곽선, 그림자, 여백은 CSV에 담을 곳이 없습니다.
TTML의 화면 위치는 CSV로 넘어가나요?
넘어가지 않습니다. CSV에는 자막을 어디에 그릴지 적는 열이 없어서 <p>가 가리키던 region과 style 참조가 버려지고, 모든 자막은 재생기가 고르는 기본 위치로 돌아갑니다. 대부분의 재생기에서 그 위치는 화면 아래쪽 가운데입니다.
TTML의 <styling>·<layout> 표는 CSV에서 어떻게 되나요?
모두 사라집니다. XML 선언과 네임스페이스, 이름 있는 스타일 표, 이름 있는 영역 표, <metadata>, 그리고 <p>의 style·region 참조가 CSV에 대응하는 자리를 갖지 못합니다. 문단 안쪽 span의 강조만 텍스트 태그로 남습니다.
TTML을 CSV로 바꾸면 결과가 어떻게 생겼나요?
첫 줄이 start,end,text 머리글이고, 그다음부터 자막 하나에 행 하나가 붙습니다. TTML의 cue가 같은 순서와 같은 글자로 CSV의 행 하나가 되며, 여러 줄은 한 text 셀 안에 들어갑니다.
TTML 시간값은 CSV에서 정확한가요?
밀리초까지 정확합니다. TTML도 CSV도 순간을 00:00:04.126으로 적기 때문에 시간값이 들어온 그대로 나갑니다. 2.9초 동안 보이던 자막은 CSV에서도 2.9초입니다.
두 줄짜리 TTML 자막은 CSV에서 어떻게 되나요?
하나의 text 셀 안에 두 줄로 들어가고, CSV 규칙에 따라 큰따옴표로 감싸집니다. 두 줄이 같은 자막이라는 사실은 유지되어 표를 다시 자막으로 바꿔도 한 cue로 읽힙니다.