SRT와 VTT 자막 파일, 뭐가 다르고 언제 뭘 써야 하나

자막 파일을 받아보면 확장자가 .srt이거나 .vtt입니다. 둘 다 텍스트 파일이고 메모장으로 열면 비슷하게 생겼는데, 플레이어에 따라 한쪽만 읽는 경우가 있습니다.

차이는 크지 않지만 알아두면 자막이 안 뜰 때 원인을 빨리 찾을 수 있습니다.

SRT의 구조

SubRip Text의 약자입니다. 가장 오래됐고 가장 널리 쓰입니다.

1
00:00:03,400 --> 00:00:06,177
첫 번째 자막 문장입니다.

2
00:00:06,177 --> 00:00:09,500
두 번째 문장입니다.

구성이 단순합니다. 순번, 시작·끝 시각, 자막 내용, 빈 줄. 이게 전부입니다. 밀리초 구분자로 쉼표를 씁니다.

VTT의 구조

WebVTT는 웹 표준으로 만들어진 포맷입니다. HTML5 track 요소가 읽는 형식이 이것입니다.

WEBVTT

00:00:03.400 --> 00:00:06.177
첫 번째 자막 문장입니다.

00:00:06.177 --> 00:00:09.500 line:90% align:center
두 번째 문장입니다.

세 가지가 다릅니다. 파일 첫 줄에 WEBVTT 표기가 반드시 있어야 합니다. 밀리초 구분자가 마침표입니다. 그리고 타임코드 뒤에 위치·정렬 지정을 붙일 수 있습니다.

핵심 차이 정리

SRTVTT
헤더없음WEBVTT 필수
밀리초 구분자쉼표마침표
순번있음선택
위치·정렬 지정불가가능
스타일(CSS)불가가능
주석불가NOTE 가능
웹 브라우저직접 지원 안 함표준 지원
데스크톱 플레이어대부분 지원대부분 지원

뭘 써야 하나

웹페이지에 자막을 붙일 때는 VTT입니다. 선택지가 없습니다. video 요소의 track은 VTT만 읽습니다.

데스크톱 플레이어나 모바일 앱에서 볼 때는 SRT가 무난합니다. 지원 범위가 가장 넓습니다.

자막 위치를 조정해야 할 때는 VTT입니다. 화면 아래쪽에 자막이 겹치는 콘텐츠가 있다면 위치 지정이 필요합니다.

변환은 사실 거의 필요 없습니다

두 포맷의 실질적 차이가 작기 때문에, 변환도 대부분 단순 치환으로 끝납니다.

SRT를 VTT로 바꾸려면 첫 줄에 WEBVTT와 빈 줄을 넣고, 타임코드의 쉼표를 마침표로 바꾸면 됩니다. 반대 방향은 헤더를 지우고 마침표를 쉼표로 되돌리면 됩니다. 순번은 있어도 없어도 대부분의 플레이어가 읽습니다.

온라인 변환 서비스도 많지만, 자막 내용이 외부에 올라간다는 점은 감안해야 합니다. 텍스트 편집기의 찾아 바꾸기로 30초면 끝나는 작업입니다.

자막이 안 뜰 때 원인별 확인

한글이 깨져 보입니다 → 인코딩 문제입니다. 자막 파일은 UTF-8로 저장돼야 합니다. 오래된 파일은 EUC-KR로 저장된 경우가 있어, 메모장에서 다른 이름으로 저장할 때 인코딩을 UTF-8로 바꿔주면 해결됩니다.

자막이 아예 안 나옵니다 → 파일 이름을 확인하세요. 대부분의 플레이어는 영상 파일과 자막 파일의 이름이 확장자만 빼고 같아야 자동으로 불러옵니다. lecture01.mp4lecture01.srt 식입니다.

웹에서만 안 나옵니다 → SRT를 쓰고 있을 가능성이 높습니다. VTT로 바꾸세요. WEBVTT 헤더가 빠져도 브라우저는 파일 전체를 무시합니다.

자막이 밀립니다 → 영상과 자막의 프레임 기준이 다른 경우입니다. 플레이어의 자막 싱크 조절 기능으로 전체를 밀거나, 자막 파일의 타임코드를 일괄 조정해야 합니다.

자막 파일을 쓰는 앱

자막 파일이 있으면 영상을 다루는 방식 자체가 달라집니다. 문장마다 시각이 찍혀 있으니, 문장을 눌러 그 시점으로 이동하거나 문장 단위로 구간을 자동 생성하는 것이 가능해집니다.

데스크톱에서는 VLC나 PotPlayer가 자막 로딩을 지원합니다. 모바일에서는 Loop Note처럼 로컬 영상과 SRT·VTT를 함께 불러오는 앱이 있습니다 (App Store · Google Play). 자막을 먼저 확보해야 한다면 유튜브 자막 추출 방법을 참고하세요.

정리

SRT와 VTT의 차이는 헤더 한 줄, 구분자 한 글자, 그리고 스타일 지원 여부입니다. 웹이면 VTT, 나머지는 SRT로 기억하면 대부분 맞습니다. 자막이 안 뜬다면 포맷보다 인코딩과 파일 이름을 먼저 확인하는 편이 빠릅니다.

ko