JSON을 SSA로 변환
또는 자막 텍스트를 붙여넣으세요
이 변환에서 달라지는 것
1가지가 버려지거나 결정이 필요합니다
- 정밀도
타이밍 정밀도 — 결과물의 시계가 더 거칠어 모든 타임스탬프가 가장 가까운 10 ms로 반올림됩니다
이 목록은 불러온 특정 파일이 아니라 두 형식의 기능 행렬에서 나옵니다. 어떤 파일은 형식이 허용하지만 행렬이 모델링하지 않는 기능을 쓰고 있다면 더 많이 잃을 수 있습니다.
JSON 자막을 SSA로 바꾸면 자막이 Dialogue 줄로 재구성되고 시간은 0.01초 단위로 반올림됩니다. SSA는 ASS의 이전 형식이라 레이어 대신 Marked 필드를 씁니다. 스타일과 위치, 노래방 표시는 SSA가 표현할 수 있어 이 방향의 손실 목록에는 정밀도만 오릅니다.
JSON은 start와 end를 4126 같은 밀리초 정수로 적고, SSA는 0:00:04.13을 적습니다. 4.126초는 4.13초가 되고 cue는 5ms 넘게 움직이지 않습니다. 늘어나거나 순서가 바뀌는 일은 없습니다.
lines 배열의 tags에 담긴 서식은 SSA 태그로 옮겨지고, styles 객체의 이름 있는 스타일도 SSA의 스타일 구역으로 넘어갑니다. 두 줄 자막은 \N으로 이어지고, cue 위치와 노래방 구간도 SSA가 읽을 수 있는 형태로 남습니다.
여러 파일을 넣으면 순서대로 처리되어 ZIP 하나로 내려옵니다. SSA는 오래된 재생기에서도 읽히지만 새 도구는 ASS를 더 잘 지원하므로 대상 플레이어를 확인하세요. 변환은 브라우저 안에서 실행됩니다.
예시
일반적인 JSON 파일을 SSA로 변환
입력
{
"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"
}
]
}
결과물
[Script Info]
Title: Fixture: typical
ScriptType: v4.00
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,,,,0,0,,,,,,,,,
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:02.00,Default,,0,0,0,,{\pos(100,200)}Hello world.\NSecond line.
Dialogue: 0,0:00:02.50,0:00:04.00,Default,,0,0,0,,Plain line.\N{\i1}Styled{\i0} line.
Dialogue: 0,0:00:04.50,0:00:06.00,Default,,0,0,0,,Roger: I am here.
이 결과에서 사라지는 것: 정밀도. 나머지는 줄 단위로 같습니다.
까다로운 입력에 같은 변환 적용
입력
[
{ "start": 0, "end": 1000, "lines": ["First."] },
{ "start": 1000, "end": 2000, "text": "Second." },
"not an object",
{ "start": 2000, "end": 3000, "lines": ["Third."], "class": "top" }
]
결과물
[Script Info]
ScriptType: v4.00
[V4 Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, TertiaryColour, BackColour, Bold, Italic, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, AlphaLevel, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,1,2,2,2,10,10,10,0,1
[Events]
Format: Marked, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:01.00,Default,,0,0,0,,First.
Dialogue: 0,0:00:01.00,0:00:02.00,Default,,0,0,0,,Second.
Dialogue: 0,0:00:02.00,0:00:03.00,Default,,0,0,0,,Third.
실제 파일에서 흔한 손상입니다. 줄 바꿈이 섞이고, 공백이 남고, 빈 필드가 있습니다. 위의 깔끔한 예시와 비교해 파서가 무엇을 넘겨주는지 보세요.
자주 묻는 질문
JSON을 SSA로 바꾸면 타임코드가 왜 0.01초 단위가 되나요?
SSA는 0:00:04.13처럼 0.01초까지, JSON은 4126처럼 0.001초까지 적기 때문입니다. 모든 값이 가장 가까운 10ms로 반올림되어 4.126초는 4.13초가 되고, 순서가 바뀌거나 cue가 5ms 넘게 움직이지 않습니다.
JSON을 SSA로 바꾸면 결과가 어떻게 생겼나요?
cue 번호 없이 자막마다 [Events] 구역의 Dialogue 줄 하나가 됩니다. SRT가 번호를 두는 자리에 SSA는 Marked 필드를 두고, JSON의 cue 하나가 SSA의 cue 하나가 되어 순서와 글자는 같습니다.
두 줄짜리 JSON 자막은 SSA에서 어떻게 되나요?
두 줄 사이에 \N이 들어간 한 자막으로 나옵니다. SSA가 강제 줄 바꿈을 적는 방식이며, 두 줄이 같은 자막이라는 사실은 유지됩니다.
JSON의 스타일과 위치, 노래방 표시는 SSA에서 남나요?
남습니다. SSA는 이름 있는 스타일, cue 위치, 노래방 구간을 모두 표현할 수 있어서 이 방향의 손실 목록에 스타일이나 위치가 오르지 않습니다. tags 배열의 줄별 서식도 SSA 태그로 옮겨집니다.
JSON cue 순서는 SSA에서도 유지되나요?
유지되고, 변환 과정에서 시작 시간이 이른 순서로 정렬됩니다. JSON 파일이 cue를 뒤섞어 두었다면 SSA 결과에서 순서가 바로잡히며, 이는 내용이 아니라 구조를 바꾸는 일입니다.
SSA를 다시 JSON으로 바꾸면 무엇을 잃나요?
형식 고유 정보를 잃습니다. SSA에서 JSON으로 가는 방향은 SSA의 전역 설정과 내장 자원을 JSON에 담지 못합니다. 이 방향에서 반올림된 시간은 SSA에 더 정밀한 값이 없으므로 그대로 남습니다.