TTML을 LRC로 변환
또는 자막 텍스트를 붙여넣으세요
이 변환에서 달라지는 것
5가지가 버려지거나 결정이 필요합니다
- 타이밍
자막 블록 종료 시간(결과 형식은 자막 블록이 시작하는 시점만 기록합니다)
- 스타일
모든 스타일(굵게, 기울임, 색, 외곽선, 그림자)
- 위치
화면 위치 지정(모든 자막 블록이 기본 위치로 돌아갑니다)
- 정밀도
타이밍 정밀도 — 결과물의 시계가 더 거칠어 모든 타임스탬프가 가장 가까운 10 ms로 반올림됩니다
- 형식 고유 내용
원본 형식이 자막 블록 밖에 두는 내용(자막 블록이 아닌 구획, 머리말 텍스트, 자막 블록별 설정, 주석 처리된 이벤트) — 대상 형식에는 들어갈 자리가 없습니다
이 목록은 불러온 특정 파일이 아니라 두 형식의 기능 행렬에서 나옵니다. 어떤 파일은 형식이 허용하지만 행렬이 모델링하지 않는 기능을 쓰고 있다면 더 많이 잃을 수 있습니다.
TTML을 LRC로 바꾸면 각 줄이 가사처럼 한 줄씩 타임스탬프를 달고 나옵니다. 끝 시간이 사라지고, 스타일과 위치, 10ms보다 작은 정밀도도 함께 사라집니다. 노래방 자막이나 가사 파일로 쓰려는 경우가 아니라면 이 손실을 먼저 확인하세요.
TTML은 begin과 end를 모두 적고 00:00:04.126처럼 밀리초까지 씁니다. LRC는 [00:04.12]처럼 줄이 시작하는 순간만 적습니다. 시작 시각은 유지되지만 끝 시각은 버려지고, 값은 10ms 단위로 반올림되어 한 줄이 5ms 넘게 움직이지 않습니다.
스타일은 전부 사라집니다. <span>의 색이든 <styling> 표의 이름 있는 스타일이든 LRC에는 실을 곳이 없고, 화면 위치도 마찬가지입니다. XML 머리말과 <metadata> 역시 남지 않습니다. 두 줄짜리 자막은 같은 시각을 가진 두 줄로 나옵니다.
여러 파일을 넣으면 차례로 변환되어 ZIP 하나로 내려옵니다. LRC는 가사 재생기에서 주로 쓰이므로, 자막 재생기용 결과가 필요하다면 SRT나 VTT 쪽을 고르는 편이 맞습니다. 변환은 브라우저 안에서만 실행됩니다.
예시
일반적인 TTML 파일을 LRC로 변환
입력
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling" xml:lang="en">
<head>
<styling>
<style xml:id="s1" tts:color="#FFFF00" tts:fontWeight="bold"/>
</styling>
<layout>
<region xml:id="bottom" tts:origin="10% 80%" tts:extent="80% 20%"/>
</layout>
</head>
<body>
<div>
<p begin="00:00:01.000" end="00:00:03.500" region="bottom" style="s1">Hello <span tts:fontStyle="italic">there</span>.</p>
<p begin="00:00:03.500" end="00:00:06.000" region="bottom">How are you?<br/>Fine, thanks.</p>
</div>
</body>
</tt>
결과물
[00:01.00]Hello there.
[00:03.50]How are you?
[00:03.50]Fine, thanks.
이 결과에서 사라지는 것: 끝 시간, 스타일, 위치, 정밀도, 형식 고유 정보. 나머지는 줄 단위로 같습니다.
까다로운 입력에 같은 변환 적용
입력
<?xml version="1.0" encoding="UTF-8"?>
<tt xmlns="http://www.w3.org/ns/ttml" xmlns:tts="http://www.w3.org/ns/ttml#styling"
xmlns:ttp="http://www.w3.org/ns/ttml#parameter"
ttp:frameRate="25" xml:lang="en">
<body>
<div>
<p begin="1.5s" dur="2s">Loaded from an offset and a duration.</p>
<p begin="4s" end="00:00:06.50">A coarser clock spelling.</p>
<p begin="00:00:07:00" end="00:00:08:12">Frames, at 25fps.</p>
<p begin="9s"><span tts:color="#FF0000">Half-open</span> and Tom & Jerry.</p>
</div>
</body>
</tt>
결과물
[00:01.50]Loaded from an offset and a duration.
[00:04.00]A coarser clock spelling.
[00:07.00]Frames, at 25fps.
[00:09.00]Half-open and Tom & Jerry.
실제 파일에서 흔한 손상입니다. 줄 바꿈이 섞이고, 공백이 남고, 빈 필드가 있습니다. 위의 깔끔한 예시와 비교해 파서가 무엇을 넘겨주는지 보세요.
자주 묻는 질문
TTML 자막의 끝 시간은 LRC에서 어떻게 되나요?
버려집니다. LRC는 줄이 시작하는 순간만 기록하고, 가사 재생기는 다음 줄이 시작할 때까지 현재 줄을 화면에 유지합니다. 그래서 끝 시간이 없어도 재생에는 문제가 없지만, 자막의 표시 길이를 계산하려면 원본 TTML이 필요합니다.
TTML의 굵기·기울임·색은 LRC에서 남나요?
남지 않습니다. LRC는 어떤 종류의 스타일도 저장하지 않으므로 문단 안 span의 색과 <styling> 표가 가리키던 이름 있는 스타일이 모두 빠지고, 모든 줄이 평문으로 적힙니다. 글자 자체는 바뀌지 않습니다.
TTML의 화면 위치는 LRC로 넘어가나요?
넘어가지 않습니다. LRC에는 자막을 어디에 그릴지 적는 자리가 없어서 region과 style 참조가 버려지고, 재생기가 기본 위치에 그립니다. 대부분 화면 아래쪽 가운데입니다.
TTML을 LRC로 바꾸면 타임코드가 왜 0.01초 단위가 되나요?
LRC의 [00:04.12]는 0.01초까지 적고 TTML의 00:00:04.126은 0.001초까지 적기 때문입니다. 모든 값이 가장 가까운 10ms로 반올림되어 4.126초는 4.13초가 되며, 순서가 바뀌거나 줄이 5ms 넘게 움직이지는 않습니다.
TTML의 <styling>·<layout> 표는 LRC에서 어떻게 되나요?
모두 사라집니다. XML 선언, 네임스페이스, 이름 있는 스타일과 영역, <metadata>, <p>의 style·region 참조가 LRC에 대응하는 자리를 갖지 못합니다. 문단 안쪽 span의 강조도 LRC에서는 평문이 됩니다.
두 줄짜리 TTML 자막은 LRC에서 어떻게 되나요?
같은 시각을 가진 두 줄로 나옵니다. LRC에서 두 줄이 한 묶음이라는 사실을 나타내는 방법이 같은 타임스탬프를 반복하는 것이라, 결과도 그렇게 적힙니다.
LRC를 다시 TTML로 바꾸면 무엇을 잃나요?
시간 정보를 잃습니다. LRC에는 시작 시각만 있고 끝 시각이 없어서, TTML로 되돌리면 cue의 길이를 새로 정해야 합니다. 이 방향에서 버린 끝 시간 역시 LRC에 기록이 없으므로 복원되지 않습니다.