본문으로 바로 가기
SubtitleMatrix

JSON 자막 형식 안내

이 형식이 표현할 수 있는 것

텍스트 스타일
글꼴, 색, 외곽선, 그림자
화면 위치 지정
예
가라오케 타이밍
예
자막 블록 안의 줄 바꿈
예
시간축
모든 자막 블록의 시작과 종료 시간
타이밍 해상도
1 ms
시간을 프레임 번호로 저장
아니요
오른쪽에서 왼쪽으로 쓰는 텍스트
예

예시

일반적인 JSON 파일과 그 파일에서 읽어 낸 것

파일

{
  "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"
    }
  ]
}

담긴 내용

3 cues, 5 lines of text

  0 ms → 2000 ms
    Hello world.
    Second line.
    [Default; position 100,200 (center)]
  2500 ms → 4000 ms
    Plain line.
    Styled line.   [italic ×1]
  4500 ms → 6000 ms
    Roger: I am here.
    [speaker Roger]

Outside the cues:
  styles     Default
  other keys version, title, fps, generator — carried through untouched

오른쪽은 변환된 파일이 아니라 이 사이트가 왼쪽 파일에서 읽어 낸 내용이며, 그 파일을 변환할 때 모든 방향이 출발하는 지점입니다.

까다로운 JSON 파일과 그래도 읽어 낸 것

파일

{
    "cues": [
        { "start": "0:00:01,5", "end": "0:00:03,0", "text": "Unpadded timecode." },
        { "start": 4000.5, "end": 5000, "lines": ["Fractional start.", { "text": "Second.", "tags": [] }] },
        { "start": 9000, "end": 8000, "lines": ["End before start."] },
        { "start": "nope", "end": 12000, "lines": ["No readable start."] },
        { "start": 13000, "lines": ["No end at all."] }
    ],
    "generator": "subtitlematrix boundary",
    "styles": {},
    "title": "Fixture: boundary"
}

담긴 내용

3 cues, 4 lines of text

  1500 ms → 3000 ms
    Unpadded timecode.
  4001 ms → 5000 ms
    Fractional start.
    Second.
  9000 ms → 9001 ms
    End before start.

Outside the cues:
  other keys generator, title — carried through untouched

Reported while reading — repaired or skipped, never silently:
  2 × entries with no readable start and end time (they are not cues, so they were skipped)
  1 × cue times that were not whole milliseconds (they were rounded to the nearest millisecond)
  1 × cues whose end time was not after their start time (they were given a 1ms duration)

실제 파일에는 BOM, Windows 줄 바꿈, 타임코드 앞의 엉뚱한 줄, 아예 읽을 수 없는 타임코드가 들어 있습니다. 그래도 예외를 던지지 않고, 이해하지 못한 것은 조용히 버리지 않고 보고합니다.

SubtitleMatrix JSON → 다른 형식으로 변환

각 페이지는 전부 브라우저 안에서 실행됩니다. 라벨은 그 방향에서 무엇을 잃는지 미리 알려 줍니다.

이 형식으로 변환하기

이 사이트의 JSON은 자막을 데이터로 표현한 형식입니다. 이 페이지는 JSON이 무엇을 담을 수 있고 무엇은 담지 못하는지, 그리고 여기서 JSON으로 또는 JSON에서 변환할 수 있는 모든 형식을 정리한 참고 페이지입니다.

JSON은 버전 필드, 선택적인 스타일 표, 그리고 시간을 밀리초로 적는 cue 배열로 이루어집니다. 다른 형식이 표현하는 것을 가능한 한 잃지 않도록 설계되었고, 재생기보다 스크립트와 파이프라인을 위한 형식입니다. 스타일과 위치, 노래방 타이밍을 모두 담습니다.

위 표가 전부이며 숨은 기능 목록은 없습니다. 어떤 행이 아니오라면 JSON으로 변환할 때 정확히 그만큼 잃는다는 뜻이고, 아래 변환 페이지마다 파일을 열기 전에 같은 내용을 알려 줍니다. 대상 형식이 담지 못한 정보는 JSON으로 돌아와도 복원되지 않습니다.

모든 변환은 브라우저 안에서 실행됩니다. 업로드도 계정도 필요 없어서 비밀 유지 계약이 걸린 자료, 환자 기록, 방송 금지 시점의 자료도 기기 밖으로 나가지 않습니다.

자주 묻는 질문

JSON 자막 파일이란 무엇인가요?

여기서 .json은 이 사이트가 정의한 자막 모양입니다. 버전 필드, 선택적인 스타일 표, 시간을 밀리초로 적는 cue 배열로 이루어지며, 다른 형식이 표현할 수 있는 것을 잃지 않도록 설계되었습니다. 재생기용이라기보다 스크립트와 파이프라인용입니다.

JSON은 스타일을 저장하나요?

저장하며 다른 형식보다 많이 담습니다. 글꼴, 크기, 색, 외곽선, 여백을 정하는 스타일 표와 줄별 서식이 있어 이름 있는 스타일 없이도 한 줄을 꾸밀 수 있고, 노래방 타이밍도 담습니다. 여기서 표는 이름으로 묶인 styles 객체이고, 줄별 서식은 텍스트 안의 코드가 아니라 각 줄의 tags 배열에 들어가므로 입출력 때 이스케이프할 것이 없습니다.

JSON cue마다 시작과 끝이 모두 있나요?

그렇습니다. JSON에서 한 순간은 4126처럼 적히고 밀리초까지 정확합니다. cue가 짧든 길든, 다음 cue와 겹치든 형식이 따로 제약을 걸지 않습니다.

JSON은 어떤 형식으로 변환해야 하나요?

JSON이 담는 모든 것을 그대로 받는 형식은 이 사이트에 없으므로 공짜 방향은 없습니다. 각 변환 페이지가 자기 손실 목록을 제시하니, 가장 익숙한 형식이 아니라 그 목록을 감당할 수 있는지로 대상을 고르세요.

JSON 파일을 텍스트 편집기로 열 수 있나요?

열 수 있습니다. 다만 쉼표와 따옴표를 정확히 유지해야 합니다. 시간은 평범한 숫자로 적힌 밀리초라서 1.25초에 나오는 cue는 start: 1250으로 보입니다. 손으로 고칠 때는 이 단위를 기억하세요.