Friskription → 블로그 → SRT와 VTT
SRT와 VTT: 무엇을 쓸까
같은 문장을 같은 타이밍에 담고, 차이는 세 글자쯤입니다. 그래도 신경 쓸 이유는, 딱 한쪽만 받아주는 자리가 몇 군데 있기 때문입니다.
짧은 답
- SRT를 고르세요 — 영상 편집 프로그램, 데스크톱 플레이어, 유튜브 자막 업로드에는. 어디서나 통하는 형식입니다.
- VTT를 고르세요 — 자막이 웹 페이지에 올라갈 때는. HTML5의
<track>요소는 WebVTT만 읽기 때문입니다. - 모르겠으면 SRT. 지원 범위가 넓고, 나중에 VTT로 바꾸는 것도 헤더 한 줄과 찾아 바꾸기 한 번이면 끝입니다.
- 진짜 차이는 이렇습니다. VTT는
WEBVTT줄로 시작하고, 타임스탬프에서 밀리초 앞이 SRT의 쉼표 대신 마침표입니다. - VTT는 SRT에 없는 스타일과 위치 정보도 담을 수 있습니다. 대부분은 쓸 일이 없고, 아예 무시하는 플레이어도 있습니다.
같은 자막 세 줄, 양쪽 형식으로
SRT
1
00:00:01,200 --> 00:00:04,600
So today we are finally opening the
box everyone has been asking about.
2
00:00:04,600 --> 00:00:07,900
I have not looked inside. Not once,
I promise.
3
00:00:08,300 --> 00:00:11,400
Right — let us do this properly.
VTT
WEBVTT
1
00:00:01.200 --> 00:00:04.600
So today we are finally opening the
box everyone has been asking about.
2
00:00:04.600 --> 00:00:07.900
I have not looked inside. Not once,
I promise.
평범한 파일에서 차이는 정말 이게 전부입니다. 헤더 한 줄, 그리고 쉼표가 있던 자리의 마침표. 둘 다 평범한 UTF-8 텍스트이고, 둘 다 자막마다 번호를 붙이고, 둘 다 시작과 끝 시각 사이에 -->를 쓰고, 둘 다 본문을 그 아래 줄에 씁니다.
실제로 다른 점
| SRT (SubRip) | VTT (WebVTT) | |
|---|---|---|
| 파일 헤더 | 없음 | 첫 줄에 WEBVTT, 필수 |
| 밀리초 구분자 | 쉼표 — 00:00:01,200 |
마침표 — 00:00:01.200 |
| 자막 번호 | 필수 | 선택. 숫자 대신 이름이어도 됨 |
| 위치 지정 | 형식에 없음 | 자막마다 위치·정렬·크기 설정 |
| 스타일 | 기본적인 인라인 태그, 지원은 들쭉날쭉 | CSS를 닮은 STYLE 블록과 자막 클래스 |
| 주석과 메타데이터 | 없음 | NOTE 블록, 그리고 챕터·메타데이터 트랙 |
HTML5 <track> |
지원 안 함 | 이 요소가 읽는 유일한 형식 |
| 그 밖의 모든 곳 | 사실상 어디서나 받아줌 | 널리 받아주지만 가끔 아님 |
어디에 쓸지로 고르기
| 자막이 갈 곳 | 고를 것 | 이유 |
|---|---|---|
| 영상 편집 프로그램 — 프리미어, 다빈치 리졸브, 파이널 컷, 캡컷 | SRT | 어느 편집 프로그램이든 두말없이 불러오는 형식입니다. |
| 데스크톱 플레이어 — VLC, IINA, mpv | SRT | 영상과 같은 이름으로 옆에 두면 알아서 불러옵니다. |
| 유튜브에 자막 올리기 | SRT | 유튜브는 둘 다 받지만, SRT가 가장 걸리는 데가 없습니다. |
웹 페이지의 HTML5 <video> |
VTT | <track> 요소는 오직 WebVTT만 읽습니다. |
| HLS 또는 DASH 스트리밍 | VTT | 양쪽 규격 모두 자막 형식으로 WebVTT를 정해 두었습니다. |
| 소셜 영상 — 인스타그램, 틱톡, 링크드인 | SRT | 자막 업로드가 되는 곳이라면 거의 언제나 SRT입니다. |
| 아직 모르겠다면 | SRT | 지원이 넓고, 나중에 바꾸기도 간단합니다. |
서로 변환하기
SRT에서 VTT로는 두 군데만 고치면 됩니다. 맨 위에 WEBVTT와 빈 줄을 넣고, 모든 타임스탬프의 쉼표를 마침표로 바꾸는 것. 나머지는 건드릴 필요가 없습니다.
# SRT → VTT
{ echo -e "WEBVTT\n"; sed 's/,/./g' subtitles.srt; } > subtitles.vtt
sed는 일부러 무딥니다.
파일 안의 쉼표를 전부 바꾸기 때문에 대사 속 쉼표까지 바뀝니다. 타임스탬프에는 문제가 없지만 본문에는 잘못된 일이죠. 남에게 내보낼 파일이라면 타임스탬프 줄만 변환하세요. 아니면 애초에 필요한 형식으로 내보내면 됩니다. 그건 공짜니까요.
VTT에서 SRT로는 같은 일을 거꾸로 하고, SRT에 자리가 없는 것들을 걷어내면 됩니다. NOTE 블록, STYLE 블록, 타임스탬프 뒤의 자막 설정, 그리고 숫자 대신 이름을 쓴 자막입니다.
두 형식 중 무엇으로든 파일 얻기
형식 논쟁을 끝내려는 게 아니라 자막 자체가 필요해서 오셨다면: 미디어 스튜디오가 영상이나 음성 파일 — MP4, WebM, MP3, M4A, WAV — 을 브라우저에서 읽어 말을 받아쓰고 번역한 뒤, 마지막에 두 형식 중 원하는 쪽으로 내줍니다. 파일 자체는 컴퓨터를 떠나지 않습니다.
매주 30분이 무료이고, 말이 있는 구간만 차감되며, 어느 쪽으로 받아도 담긴 문장은 똑같습니다 — 그러니 마지막의 그 선택이 바로 이 글이 다루는 이야기입니다. 전체 사용법도 있습니다.
자주 묻는 질문
SRT와 VTT의 차이는 무엇인가요?
평범한 파일에서는 두 가지입니다. VTT 파일은 WEBVTT 줄로 시작하고, 타임스탬프에서 밀리초를 SRT의 쉼표 대신 마침표로 구분합니다. 여기에 더해 VTT는 자막 위치 지정, 스타일, 주석, 메타데이터를 지원하는데, SRT에는 그런 자리가 없습니다.
유튜브에는 무엇을 써야 하나요?
SRT입니다. 유튜브는 둘 다 받지만 업로드 흐름이 가장 편한 쪽이 SRT이고, 중간에 거치는 다른 도구들도 모두 받아주는 형식입니다.
웹사이트에는 무엇을 써야 하나요?
VTT이고, 고를 여지가 없습니다. HTML5의 <track> 요소는 WebVTT만 읽기 때문입니다. HLS와 DASH 스트리밍 역시 규격에서 WebVTT를 정하고 있습니다.
VLC로 VTT 파일을 재생할 수 있나요?
대체로 됩니다만, 데스크톱 플레이어라면 SRT가 더 안전합니다. 자막 파일 이름을 영상과 똑같이 짓고 같은 폴더에 두면 자동으로 불러옵니다.
둘 중 하나가 더 정확한가요?
아닙니다. 같은 문장을 같은 타이밍으로 담는 그릇일 뿐입니다. 정확도는 자막을 만들어 낸 것에서 나오지, 어느 형식으로 저장했는지에서 나오지 않습니다.
자막 파일 하나에 두 언어를 함께 담을 수 있나요?
별개의 트랙 두 개로는 안 되지만, 자막 한 줄에 두 문장을 함께 담을 수는 있습니다. 만들기 전에 번역 아래에 원문을 보여 주는 옵션을 켜 두면, 각 자막이 번역문 먼저, 그 아래 괄호 안에 원문 순서로 쓰입니다. 그러면 파일을 둘로 나누지 않아도 어떤 플레이어에서나 둘 다 보입니다.
ASS와 SSA는 어떤가요?
그건 다른 계열의 형식으로, 무거운 스타일과 위치 지정, 조판을 위해 만들어졌습니다. 팬자막이 하는 그런 작업이죠. 자막 자체가 디자인 일을 하고 있다면 그만한 값을 합니다. 타이밍이 붙은 번역 텍스트라면 SRT와 VTT가 딱 맞는 크기의 도구입니다.