LRC를 JSON으로 변환
또는 자막 텍스트를 붙여넣으세요
옵션
원본에 종료 시간이 없을 때(일반 텍스트, LRC) 사용합니다. 결과물의 시간축은 변환되는 것이 아니라 여기서 새로 만들어지므로, 이 숫자가 그대로 결과가 됩니다.
이 변환에서 달라지는 것
1가지가 버려지거나 결정이 필요합니다
- 타이밍
자막 블록 종료 시간 — 원본이 기록하지 않아 결과물의 종료 시간은 변환된 것이 아니라 새로 만들어집니다
이 목록은 불러온 특정 파일이 아니라 두 형식의 기능 행렬에서 나옵니다. 어떤 파일은 형식이 허용하지만 행렬이 모델링하지 않는 기능을 쓰고 있다면 더 많이 잃을 수 있습니다.
LRC를 JSON으로 바꾸는 페이지입니다. 가사 한 줄이 cue 객체 하나가 되고 시작과 끝은 밀리초 정수로, 텍스트는 줄 배열로 들어갑니다. LRC에는 끝 시각이 없으므로 다음 줄의 시작을 채워 넣고, 마지막 줄만 기본 길이를 받습니다.
LRC는 `[00:04.12]`, JSON은 같은 순간을 `4120`이라는 정수로 적습니다. 문자열 시간을 다시 해석할 필요가 없고, 100분의 1초 값이 밀리초로 그대로 보존됩니다.
LRC의 `[ti:]` 제목은 JSON의 `title` 필드로 남습니다. 가수와 길이, offset은 대응하는 필드가 없어 남지 않고 offset도 적용하지 않습니다. 같은 타임스탬프의 LRC 줄은 `lines` 배열의 두 원소가 되고, 타임스탬프만 있는 줄은 빈 문자열 하나를 담은 `lines`를 가진 cue가 됩니다.
파일은 업로드되지 않고 브라우저 안에서 처리됩니다. 여러 파일을 한 번에 넣으면 각각 변환되어 ZIP 하나로 내려옵니다. ZIP은 파일별 하위 폴더 없이 풀립니다.
예시
전형적인 LRC 파일을 JSON으로 변환
입력
[ti:Sample Song]
[ar:Some Artist]
[length:00:41.00]
[offset:+250]
[00:12.00]First line of the song.
[00:15.30]Second line.
[00:15.30]Second line, translated.
[00:18.00]
[00:21.50]Final line.결과물
{
"version": 1,
"title": "Sample Song",
"cues": [
{
"start": 12000,
"end": 15300,
"lines": [
"First line of the song."
]
},
{
"start": 15300,
"end": 18000,
"lines": [
"Second line.",
"Second line, translated."
]
},
{
"start": 18000,
"end": 21500,
"lines": [
""
]
},
{
"start": 21500,
"end": 23500,
"lines": [
"Final line."
]
}
]
}
이 출력에서 버려지는 것은 타이밍입니다. 각 줄의 시작과 글자는 cue와 lines에 그대로 대응합니다.
지저분한 LRC를 JSON으로 바꿀 때
입력
[ar:Some Artist]
[0:05.5]Leading zero omitted, one decimal.
[00:07]Second with no centiseconds.
[00:03.00]Out of order.
[00:07.00][00:09.00]Repeated chorus line.
[00:12.00]결과물
{
"version": 1,
"cues": [
{
"start": 3000,
"end": 5500,
"lines": [
"Out of order."
]
},
{
"start": 5500,
"end": 7000,
"lines": [
"Leading zero omitted, one decimal."
]
},
{
"start": 7000,
"end": 9000,
"lines": [
"Second with no centiseconds.",
"Repeated chorus line."
]
},
{
"start": 9000,
"end": 12000,
"lines": [
"Repeated chorus line."
]
},
{
"start": 12000,
"end": 14000,
"lines": [
""
]
}
]
}
실제 파일에 흔한 손상입니다. BOM, 윈도우 줄바꿈, 한 자리 소수, 순서가 뒤섞인 줄이 있어도 읽을 수 있는 가사는 모두 cue가 됩니다.
자주 묻는 질문
LRC를 JSON으로 바꾸면 끝 시각은 어떻게 정해지나요?
다음 LRC 줄의 시작 시각이 앞 cue의 `end`가 됩니다. 마지막 cue는 다음 시작이 없어 기본 2초를 받습니다. LRC에 끝이 없기 때문에 생기는 계산입니다.
LRC의 제목은 JSON에서 어디에 남나요?
최상위 `title` 필드에 남습니다. `[ti:Sample Song]`이 있으면 그 값이 들어갑니다. 가수와 길이는 대응하는 필드가 없어 남지 않습니다.
같은 타임스탬프의 LRC 줄은 JSON에서 어떻게 표현되나요?
한 cue의 `lines` 배열에 두 원소로 들어갑니다. 같은 시각의 두 줄이 하나의 자막에 속한다는 정보가 배열 구조로 유지됩니다.
LRC의 빈 타임스탬프는 JSON에서 어떻게 되나요?
`lines`에 빈 문자열 하나만 든 cue가 됩니다. 시작과 끝은 정상적으로 계산되지만 표시할 글자가 없습니다. 빈 cue를 없애려면 변환 뒤 필터링하거나 QC 도구로 걸러야 합니다.
LRC의 offset 머리말은 JSON 변환에 적용되나요?
적용되지 않습니다. offset은 읽어서 보관하지만 시작 시각을 밀지 않습니다. JSON의 cue 시각은 LRC에 적힌 값 그대로입니다.
JSON을 다시 LRC로 바꾸면 무엇이 사라지나요?
JSON의 끝 시각과 밀리초 정밀도가 LRC에 자리가 없어 사라집니다. 지금 방향인 LRC→JSON에서는 타이밍만 잃고, 그 손실은 되돌린다고 복구되지 않습니다.
LRC를 JSON으로 저장하면 인코딩은 무엇인가요?
출력은 UTF-8, 유닉스 줄바꿈, BOM 없음입니다. 원본 LRC의 인코딩과 무관하며, UTF-16 입력은 읽는 단계에서 해독되어 결과 패널에 표시됩니다.