본문으로 바로 가기
SubtitleMatrix

JSON을 TXT로 변환

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

이 변환에서 달라지는 것

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

  • 타이밍

    시간축 전체(결과 형식은 타이밍을 전혀 기록하지 않습니다)

  • 스타일

    모든 스타일(굵게, 기울임, 색, 외곽선, 그림자)

  • 위치

    화면 위치 지정(모든 자막 블록이 기본 위치로 돌아갑니다)

  • 가라오케

    가라오케 타이밍(음절 단위 강조)

  • 줄 바꿈

    줄 바꿈(여러 줄 자막 블록이 한 줄로 합쳐집니다)

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

JSON 자막을 TXT로 바꾸면 시간축이 완전히 사라지고 줄 순서와 글자만 남습니다. 스타일과 위치, 노래방 표시, 줄 묶음도 함께 사라집니다. 대본이나 번역 원문을 뽑을 때 쓰는 방향이며, 다시 자막으로 만들려면 시간을 새로 정해야 합니다.

JSON은 start와 end를 4126 같은 밀리초 정수로 적지만 TXT에는 시간을 적는 자리가 없습니다. 40번째 줄은 그대로 40번째 줄이지만, 그 줄이 몇 초에 나오는지는 결과 어디에도 남지 않습니다.

styles 객체의 스타일 표와 tags 배열의 서식, cue 위치, 노래방 구간이 모두 빠집니다. 두 줄짜리 자막은 두 줄로 풀리면서 같은 cue라는 사실도 잃어, 다시 읽으면 자막 두 개가 됩니다. 번역이나 재동기화 도구가 이 파일을 읽을 예정이라면 특히 주의하세요.

여러 파일을 넣으면 차례로 변환되어 ZIP 하나로 내려옵니다. 텍스트만 남기므로 검색과 교정에는 편하지만, 나중에 영상에 맞출 계획이라면 JSON 원본을 보관하세요. 변환은 브라우저 안에서 실행됩니다.

예시

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

입력

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

결과물

Hello world.
Second line.
Plain line.
Styled line.
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" }
]

결과물

First.
Second.
Third.

실제 파일에서 흔한 손상입니다. 줄 바꿈이 섞이고, 공백이 남고, 빈 필드가 있습니다. 위의 깔끔한 예시와 비교해 파서가 무엇을 넘겨주는지 보세요.

자주 묻는 질문

JSON의 시간 정보는 TXT에서 어디로 갔나요?

없어졌습니다. TXT는 글자만 담고 순간을 적는 자리가 없습니다. JSON cue의 순서는 유지되어 40번째 줄이 40번째 줄로 남지만, 그 줄이 언제 화면에 나타나는지는 결과 파일 어디에도 적히지 않습니다.

JSON의 굵기·기울임·색은 TXT에서 남나요?

남지 않습니다. TXT는 어떤 스타일도 저장하지 않으므로 tags 배열의 서식과 styles 객체의 이름 있는 스타일이 모두 빠지고, 모든 줄이 평문으로 적힙니다. 글자 자체는 바뀌지 않습니다.

JSON의 화면 위치는 TXT로 넘어가나요?

넘어가지 않습니다. TXT에는 위치를 적는 자리가 없어 cue에 저장된 위치가 버려집니다. 나중에 이 텍스트를 다시 자막으로 만들면 위치는 재생기의 기본값으로 돌아갑니다.

JSON의 노래방 타이밍은 TXT에서 어떻게 되나요?

타이밍은 사라지고 글자는 남습니다. 노래방 정보는 음절이 언제 켜지는지를 적지만 TXT에는 줄 안의 순간을 기록할 방법이 없어 표시가 빠지고 음절은 평범한 텍스트가 됩니다.

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

두 줄이 위아래로 적히지만 같은 자막이라는 사실은 사라집니다. TXT는 줄을 cue로 묶지 못하므로 결과를 다시 읽으면 원본의 한 자막이 두 자막이 됩니다.

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

cue 번호도 타임코드도 없이 자막의 각 줄이 텍스트 한 줄로 나옵니다. JSON의 cue 하나가 TXT의 줄 하나가 되고, 순서와 글자는 유지됩니다.

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

시간을 잃습니다. TXT에는 시작과 끝이 없어서 JSON으로 되돌리면 각 줄에 시간을 새로 배정해야 하고, 그 시간은 원본과 같을 수 없습니다. 이 방향에서 버린 시간 정보도 TXT에 기록이 없어 복원되지 않습니다.

관련 도구