본문으로 바로 가기
SubtitleMatrix

LRC를 TTML로 변환

형식 변환가사 (LRC)
또는 자막 텍스트를 붙여넣으세요

옵션

원본에 종료 시간이 없을 때(일반 텍스트, LRC) 사용합니다. 결과물의 시간축은 변환되는 것이 아니라 여기서 새로 만들어지므로, 이 숫자가 그대로 결과가 됩니다.

이 변환에서 달라지는 것

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

  • 타이밍

    자막 블록 종료 시간 — 원본이 기록하지 않아 결과물의 종료 시간은 변환된 것이 아니라 새로 만들어집니다

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

LRC를 TTML로 바꾸는 페이지입니다. TTML의 `<p>` 요소는 시작과 끝을 모두 요구하지만 LRC에는 시작만 있습니다. 그래서 다음 줄의 시작을 앞 요소의 끝으로 삼고, 마지막 줄만 기본 길이로 끝을 만듭니다.

LRC는 `[00:04.12]`, TTML은 `begin="00:00:04.120"`과 `end` 속성을 씁니다. LRC의 100분의 1초 값은 밀리초로 그대로 옮겨지고 반올림이 없습니다. 문서 맨 위에는 XML 선언이 붙습니다.

같은 타임스탬프의 LRC 줄은 한 `<p>` 안에서 `<br/>`로 이어집니다. 타임스탬프만 있는 줄은 텍스트가 빈 `<p>`가 됩니다. `[ti:]`, `[ar:]`, `[length:]`, `[offset:+250]`은 TTML의 cue 모델에 들어가지 않고 offset도 적용하지 않습니다.

파일은 업로드되지 않고 브라우저 안에서 처리됩니다. 여러 파일을 순서대로 변환하고 결과를 ZIP 하나로 받을 수 있습니다. ZIP은 파일별 하위 폴더 없이 풀립니다.

예시

전형적인 LRC 파일을 TTML로 변환

입력

[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.

결과물

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:12.000" end="00:00:15.300">First line of the song.</p>
<p begin="00:00:15.300" end="00:00:18.000">Second line.<br/>Second line, translated.</p>
<p begin="00:00:18.000" end="00:00:21.500"></p>
<p begin="00:00:21.500" end="00:00:23.500">Final line.</p>  </body>
</tt>

이 출력에서 버려지는 것은 타이밍입니다. 각 p 요소의 begin은 원래 줄의 시작과 일치합니다.

지저분한 LRC를 TTML로 바꿀 때

입력

[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]

결과물

<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling">
  <body>
<p begin="00:00:03.000" end="00:00:05.500">Out of order.</p>
<p begin="00:00:05.500" end="00:00:07.000">Leading zero omitted, one decimal.</p>
<p begin="00:00:07.000" end="00:00:09.000">Second with no centiseconds.<br/>Repeated chorus line.</p>
<p begin="00:00:09.000" end="00:00:12.000">Repeated chorus line.</p>
<p begin="00:00:12.000" end="00:00:14.000"></p>  </body>
</tt>

실제 파일에 흔한 손상입니다. BOM, 윈도우 줄바꿈, 한 자리 소수, 순서가 뒤섞인 줄이 있어도 읽을 수 있는 가사는 모두 p 요소가 됩니다.

자주 묻는 질문

LRC를 TTML로 바꾸면 p 요소의 end는 어디서 오나요?

다음 LRC 줄의 시작 시각을 씁니다. 마지막 줄은 다음 시작이 없어 기본 2초를 받습니다. TTML의 p 요소는 두 시각을 요구하므로 이 계산이 필요합니다.

LRC를 TTML로 바꾸면 결과 파일은 어떤 모습인가요?

XML 선언 아래 `<body>` 안에 `begin`과 `end` 속성을 가진 `<p>` 요소들이 이어집니다. LRC의 줄 하나가 p 요소 하나가 되고, 텍스트는 요소 내용으로 들어갑니다.

같은 타임스탬프의 LRC 줄은 TTML에서 어떻게 이어지나요?

한 `<p>` 안에서 `<br/>`로 이어집니다. 같은 시각의 두 줄이 하나의 자막 요소에 속하고, 플레이어는 두 줄을 함께 표시합니다.

LRC의 빈 타임스탬프는 TTML에서 어떻게 되나요?

텍스트가 빈 `<p>` 요소가 됩니다. 시작과 끝은 정상적으로 계산되지만 표시할 글자가 없습니다. 빈 요소를 없애려면 변환 뒤 QC 도구로 걸러야 합니다.

LRC의 offset 머리말은 TTML 변환에 적용되나요?

적용되지 않습니다. offset은 읽어서 보관하지만 시작 시각을 밀지 않습니다. TTML에는 offset을 뜻하는 표준 속성이 없어 출력에도 남지 않습니다.

TTML을 다시 LRC로 바꾸면 무엇이 사라지나요?

TTML의 끝 시각, 스타일, 위치, 형식 고유 구성이 LRC에 자리가 없어 사라집니다. 지금 방향인 LRC→TTML에서는 타이밍만 잃습니다.

LRC를 TTML로 저장하면 인코딩은 무엇인가요?

출력은 UTF-8, 유닉스 줄바꿈, BOM 없음입니다. XML 선언에도 UTF-8이 적히므로 받은 파일을 어떤 도구로 열어도 인코딩을 잘못 짚지 않습니다.

관련 도구