본문으로 바로 가기
SubtitleMatrix

JSON을 ASS로 변환

또는 자막 텍스트를 붙여넣으세요

이 변환에서 달라지는 것

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

  • 정밀도

    타이밍 정밀도 — 결과물의 시계가 더 거칠어 모든 타임스탬프가 가장 가까운 10 ms로 반올림됩니다

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

JSON 자막을 ASS로 옮기면 스타일과 화면 위치, 노래방 표시까지 ASS가 표현할 수 있는 것은 그대로 살아남습니다. 유일한 손실은 정밀도로, JSON의 밀리초 값이 ASS의 0.01초 단위로 반올림됩니다. 이 페이지는 그 한 가지를 미리 알려 주고 .ass 파일을 만들어 줍니다.

JSON은 cue마다 start와 end를 4126 같은 밀리초 정수로 적습니다. ASS는 Dialogue 줄에 0:00:04.13을 적으므로 값이 10ms 단위로 맞춰집니다. 4.126초는 4.13초가 되고, cue가 늘어나거나 순서가 바뀌지는 않으며 어느 것도 5ms 넘게 움직이지 않습니다.

여러 줄 자막은 \N으로 이어지고, lines 배열의 tags에 담긴 기울임·굵기·색은 ASS의 서식 태그로 옮겨집니다. 문서의 styles 객체에 정의된 이름 있는 스타일도 ASS의 스타일 구역으로 넘어가므로, 이 방향에서 사라지는 정보는 반올림뿐입니다.

시즌 전체를 한 번에 넣어도 대기열이 차례로 처리하고 결과를 ZIP 하나로 묶어 줍니다. 변환은 브라우저 안에서 실행되며 JSON 원본은 어디에도 업로드되지 않습니다.

예시

일반적인 JSON 파일을 ASS로 변환

입력

{
  "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, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,,,,0,0,,,,,,,,,,,,,,

[Events]
Format: Layer, 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, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1

[Events]
Format: Layer, 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을 ASS로 바꾸면 타임코드가 왜 달라지나요?

ASS는 0:00:04.13처럼 0.01초까지, JSON은 4126처럼 0.001초까지 적기 때문입니다. 모든 값이 가장 가까운 10ms로 반올림되어 4.126초는 4.13초가 되고, 순서가 바뀌거나 cue가 5ms 넘게 움직이지 않습니다. 다른 파일과 정밀하게 맞춰야 하는 작업이라면 이 지점만 주의하세요.

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

cue 번호 없이 자막마다 [Events] 구역의 Dialogue 줄 하나가 됩니다. SRT가 번호를 두는 자리에 레이어 필드가 오고, JSON의 cue 하나가 ASS의 cue 하나가 되어 순서와 글자는 같습니다.

JSON의 두 줄짜리 자막은 ASS에서 어떻게 되나요?

두 줄 사이에 \N이 들어간 한 자막으로 나옵니다. ASS가 강제 줄 바꿈을 적는 방식이고, JSON의 lines 배열에 있던 두 항목이 같은 자막이라는 사실도 유지됩니다.

JSON의 스타일과 위치, 노래방 표시는 ASS에서 남나요?

남습니다. 이 사이트의 JSON은 이름 있는 스타일을 styles 객체에, 줄별 서식을 tags 배열에 담고 cue 위치와 노래방 구간도 보관하는데, ASS는 이 모두를 표현할 수 있습니다. 그래서 이 방향의 손실 목록에 스타일이나 위치가 오르지 않습니다.

JSON cue 순서는 ASS에서도 유지되나요?

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

ASS를 다시 JSON으로 바꾸면 무엇을 잃나요?

형식 고유 정보를 잃습니다. ASS에서 JSON으로 가는 방향은 ASS의 [Script Info] 같은 전역 설정과 내장 자원을 JSON에 담지 못합니다. 이 방향에서 반올림된 시간은 JSON에 더 정밀한 값이 없으므로 그대로 남습니다.

관련 도구