SMI를 JSON으로 변환
또는 자막 텍스트를 붙여넣으세요
이 변환에서 달라지는 것
1가지가 버려지거나 결정이 필요합니다
- 형식 고유 내용
원본 형식이 자막 블록 밖에 두는 내용(자막 블록이 아닌 구획, 머리말 텍스트, 자막 블록별 설정, 주석 처리된 이벤트) — 대상 형식에는 들어갈 자리가 없습니다
이 목록은 불러온 특정 파일이 아니라 두 형식의 기능 행렬에서 나옵니다. 어떤 파일은 형식이 허용하지만 행렬이 모델링하지 않는 기능을 쓰고 있다면 더 많이 잃을 수 있습니다.
SMI를 JSON으로 바꾸는 페이지입니다. 자막 하나가 객체 하나가 되고 시작과 끝은 밀리초 정수로, 텍스트는 줄 배열로 들어갑니다. 프로그램에서 읽기 좋은 형태가 되지만, SAMI의 스타일 문서와 채널 설정은 JSON의 cue 모델에 들어가지 않아 사라집니다.
SMI는 `Start=4126`으로 시작을 적고 다음 SYNC가 앞 블록을 끝냅니다. JSON은 같은 순간을 `4126`이라는 정수로 적습니다. 문자열 시간을 다시 해석할 필요가 없고, 두 줄짜리 자막은 `lines` 배열의 두 원소가 됩니다.
사라지는 것은 형식 고유 구성입니다. `<STYLE>` 블록의 CSS, `<TITLE>`, `Class=ENCC` 같은 채널 표시가 해당됩니다. 출력 JSON에는 `version`과 `cues`만 들어가고 제목이나 스타일을 담는 필드는 생기지 않습니다.
파일은 업로드되지 않고 브라우저 안에서 처리됩니다. 여러 파일을 한 번에 넣으면 각각 변환되어 ZIP 하나로 내려옵니다. ZIP은 파일별 하위 폴더 없이 풀립니다.
예시
전형적인 SMI 파일을 JSON으로 변환
입력
<SAMI>
<HEAD>
<STYLE TYPE="text/css">
<!--
P { text-align: center; font-family: Arial; }
.ENCC { Name: English; lang: en-US; }
-->
</STYLE>
</HEAD>
<BODY>
<SYNC Start=1000>
<P Class=ENCC>Hello there.
<SYNC Start=3000>
<P Class=ENCC>
<SYNC Start=3500>
<P Class=ENCC>How are you?<br>Fine, thanks.
<SYNC Start=6000>
<P Class=ENCC>
</BODY>
</SAMI>
결과물
{
"version": 1,
"cues": [
{
"start": 1000,
"end": 3000,
"lines": [
"Hello there."
]
},
{
"start": 3500,
"end": 6000,
"lines": [
"How are you?",
"Fine, thanks."
]
}
]
}
이 출력에서 버려지는 것은 형식 고유 구성입니다. 시각과 줄 배열은 왼쪽과 정확히 대응합니다.
지저분한 SMI를 JSON으로 바꿀 때
입력
<SAMI>
<HEAD>
<TITLE>Episode 1</TITLE>
<STYLE TYPE="text/css">
<!--
.ENCC { Name: English; }
-->
</STYLE>
</HEAD>
<BODY>
<sync start="00:00:02,500">
<P Class=ENCC>Line one<br>Line two
<sync start=9000>
<P Class=ENCC>Tom & Jerry
<SYNC Start=12000>
<P Class=ENCC>
</BODY>
</SAMI>
결과물
{
"version": 1,
"cues": [
{
"start": 2500,
"end": 9000,
"lines": [
"Line one",
"Line two"
]
},
{
"start": 9000,
"end": 12000,
"lines": [
"Tom & Jerry"
]
}
]
}
실제 파일에 흔한 손상입니다. BOM, 윈도우 줄바꿈, 읽을 수 없는 SYNC가 섞여도 읽을 수 있는 자막은 모두 객체가 됩니다.
자주 묻는 질문
SAMI의 STYLE 블록과 TITLE, Class 표시는 JSON에서 어디로 가나요?
남지 않습니다. JSON 출력에는 `version`과 `cues`만 들어가고 제목이나 스타일을 담는 필드가 생기지 않습니다. `Class=ENCC` 같은 채널 표시도 cue 바깥 정보라 들어가지 않습니다.
SMI를 JSON으로 바꾸면 파일은 어떤 모습인가요?
`version`과 `cues` 배열을 가진 객체입니다. 각 cue에는 `start`와 `end`(밀리초 정수), `lines`(문자열 배열)가 들어가고 자막 순서가 배열 순서가 됩니다.
SMI의 Start 시각이 JSON에서 밀리초 정수로 남나요?
네. `Start=4126`은 `4126`이 되어 문자열 변환 없이 바로 계산에 쓸 수 있습니다. 끝 시각은 다음 SYNC의 시작에서 오며 역시 정수로 적힙니다.
SMI의 두 줄 자막은 JSON에서 어떻게 표현되나요?
`lines` 배열의 원소 두 개가 됩니다. 두 줄이 같은 cue에 속한다는 정보가 배열 구조로 유지되므로 다시 SMI로 만들면 한 자막의 두 줄로 돌아갑니다.
SMI를 JSON으로 바꾸면 cue의 순서는 어떻게 되나요?
시작 시각이 이른 순서로 배열에 들어갑니다. 원본이 뒤섞여 있었다면 정렬되어 나오고, JSON을 읽는 쪽도 이 순서를 전제로 다루면 됩니다.
JSON을 다시 SMI로 바꾸면 무엇이 사라지나요?
JSON에 스타일이나 위치, 가라오케 정보가 들어 있으면 SMI에 자리가 없어 사라집니다. 지금 방향인 SMI→JSON은 형식 고유 구성만 잃고, 그 정보는 원본 SMI 파일에만 남습니다.
SMI를 JSON으로 저장하면 인코딩은 무엇인가요?
출력은 UTF-8, 유닉스 줄바꿈, BOM 없음입니다. 원본 SMI가 어떤 인코딩이었든 읽을 때 해독하며, 그 사실을 결과 패널에 표시합니다.