JSON을 TTML로 변환
또는 자막 텍스트를 붙여넣으세요
이 변환에서 달라지는 것
1가지가 버려지거나 결정이 필요합니다
- 가라오케
가라오케 타이밍(음절 단위 강조)
이 목록은 불러온 특정 파일이 아니라 두 형식의 기능 행렬에서 나옵니다. 어떤 파일은 형식이 허용하지만 행렬이 모델링하지 않는 기능을 쓰고 있다면 더 많이 잃을 수 있습니다.
JSON 자막을 TTML로 바꾸면 XML 문서 안의 <p> 요소가 되고, 시작과 끝은 begin과 end 속성에 밀리초까지 적힙니다. 스타일과 위치는 TTML이 표현할 수 있어 그대로 넘어가지만, 음절 단위 노래방 표시는 TTML에 자리가 없어 사라집니다.
JSON은 start와 end를 4126 같은 밀리초 정수로 적고, TTML은 같은 순간을 00:00:04.126으로 적습니다. 두 형식 모두 밀리초가 한계라 값이 한 글자도 달라지지 않습니다.
잃는 것은 노래방 하나입니다. 노래방 정보는 cue가 가진 구간으로 음절이 켜지는 순간을 적는데, TTML은 cue의 시작과 끝만 기록하므로 표시가 빠지고 음절은 평범한 텍스트가 됩니다. 두 줄 자막은 <br/>로 이어지고, cue 순서는 시작 시간을 기준으로 정렬됩니다.
여러 파일을 한 번에 넣으면 대기열이 차례로 변환하고 결과를 ZIP 하나로 묶습니다. TTML은 XML 텍스트 파일이라 재생기보다 방송·스트리밍 파이프라인에 쓰이며, 변환은 브라우저 안에서 끝납니다.
예시
일반적인 JSON 파일을 TTML로 변환
입력
{
"version": 1,
"title": "Fixture: typical",
"fps": 25,
"styles": {
"Default": {
"name": "Default",
"fontFamily": "Arial",
"fontSize": 20,
"primaryColor": "#FFFFFF",
"bold": false,
"italic": false
}
},
"generator": "subtitlematrix fixtures",
"cues": [
{
"id": "1",
"start": 0,
"end": 2000,
"lines": [
"Hello world.",
"Second line."
],
"style": "Default",
"position": {
"x": 100,
"y": 200,
"align": "center"
}
},
{
"id": "2",
"start": 2500,
"end": 4000,
"lines": [
"Plain line.",
{
"text": "Styled line.",
"tags": [
{
"kind": "italic",
"start": 0,
"end": 6
}
]
}
]
},
{
"id": "3",
"start": 4500,
"end": 6000,
"lines": [
"Roger: I am here."
],
"speaker": "Roger"
}
]
}
결과물
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:00.000" end="00:00:02.000">Hello world.<br/>Second line.</p>
<p begin="00:00:02.500" end="00:00:04.000">Plain line.<br/><span tts:fontStyle="italic">Styled</span> line.</p>
<p begin="00:00:04.500" end="00:00:06.000">Roger: I am here.</p> </body>
</tt>
이 결과에서 사라지는 것: 노래방. 나머지는 줄 단위로 같습니다.
까다로운 입력에 같은 변환 적용
입력
[
{ "start": 0, "end": 1000, "lines": ["First."] },
{ "start": 1000, "end": 2000, "text": "Second." },
"not an object",
{ "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]
결과물
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
<body>
<p begin="00:00:00.000" end="00:00:01.000">First.</p>
<p begin="00:00:01.000" end="00:00:02.000">Second.</p>
<p begin="00:00:02.000" end="00:00:03.000">Third.</p> </body>
</tt>
실제 파일에서 흔한 손상입니다. 줄 바꿈이 섞이고, 공백이 남고, 빈 필드가 있습니다. 위의 깔끔한 예시와 비교해 파서가 무엇을 넘겨주는지 보세요.
자주 묻는 질문
JSON의 노래방 타이밍은 TTML에서 어떻게 되나요?
타이밍은 사라지고 글자는 남습니다. 노래방 정보는 음절이 언제 켜지는지를 적지만 TTML은 cue의 시작과 끝만 기록하고 줄 안의 순간을 담지 않습니다. 그래서 표시가 빠지고 음절은 평범한 TTML 텍스트가 됩니다.
JSON을 TTML로 바꾸면 결과가 어떻게 생겼나요?
cue 번호 없이 자막마다 begin과 end 속성을 가진 <p> 요소가 되고, <body>(보통 <div>) 안에 들어가며 문서 맨 위에는 XML 선언이 붙습니다. JSON의 cue 하나가 TTML의 cue 하나가 되어 순서와 글자는 같습니다.
JSON 시간값은 TTML에서 정확한가요?
밀리초까지 정확합니다. JSON의 4126은 TTML의 00:00:04.126이 되고, 두 형식 모두 그보다 잘게 나누지 않습니다. 반올림이나 이동이 없어 2.9초짜리 자막은 그대로 2.9초입니다.
두 줄짜리 JSON 자막은 TTML에서 어떻게 되나요?
두 줄 사이에 <br/>이 들어갑니다. TTML이 강제 줄 바꿈을 적는 방식이며, 두 줄이 한 자막이라는 사실은 유지되어 재생기가 함께 보여 줍니다.
JSON cue 순서는 TTML에서도 유지되나요?
유지되고, 변환 과정에서 시작 시간이 이른 순서로 정렬됩니다. JSON 파일이 cue를 뒤섞어 두었다면 TTML 결과에서 순서가 바로잡히며, 이는 내용이 아니라 구조를 바꾸는 일입니다.
TTML을 다시 JSON으로 바꾸면 무엇을 잃나요?
형식 고유 정보를 잃습니다. TTML에서 JSON으로 가는 방향은 TTML 머리말의 스타일 표·레이아웃·metadata를 JSON에 담지 못합니다. 이 방향에서 버린 노래방 정보는 TTML에 기록이 없어 복원되지 않습니다.