필요한 툴을, 바로 쓸 수 있게

SRT ↔ VTT 자막 변환기

SRT나 VTT 자막을 붙여 넣거나 파일을 열면 반대 형식으로 바로 바꿉니다. 바꾼 자막은 위 화면에서 시각대로 재생해 보고, 내 영상 파일을 열면 영상 위에 얹어 싱크를 확인할 수 있습니다. 서식 태그·색·위치 표기처럼 두 형식이 다르게 적는 부분은 자막마다 무엇이 바뀌었는지 함께 보여 줍니다.

최종 수정 2026-10-20계산은 브라우저 안에서만 처리
원본—
결과 형식
초
00:00:00.000

자막을 붙여 넣거나 파일을 열면 여기에서 재생해 볼 수 있습니다.

0:00 / 0:00

    최종 수정 2026-10-20입력값은 저장하지 않습니다

    ROBERIN 기준필요한 툴을,
    바로 쓸 수 있게.
    • 바로 보이는 화면입력 위치와 결과 위치를 또렷하게 둡니다.
    • 결과 먼저핵심 결과를 앞에 두고, 과정은 필요할 때만 보여줍니다.
    • 요구 줄이기가입이나 불필요한 정보 입력 없이 바로 쓰게 합니다.

    SRT 자막은 VTT로, VTT 자막은 SRT로 바꿉니다

    SRT와 VTT(WebVTT)는 영상 파일 밖에 따로 두는 글자 자막 형식입니다. 위 변환기에 자막을 붙여 넣거나 파일을 열면 어떤 형식인지 알아보고 반대 형식으로 바로 바꿉니다. 자막의 시작·끝 시각은 1000분의 1초까지 그대로 두고, 시각을 적는 쉼표와 점, 서식 태그, 위치 표기처럼 두 형식이 서로 다르게 적는 부분만 규칙에 맞춰 고칩니다.

    바꾼 결과는 위 화면에서 실제 재생처럼 시각대로 띄워 볼 수 있습니다. 내 영상 파일을 열면 그 영상 위에 결과 자막을 얹어 대사와 맞는지 확인하고, 어긋나 있으면 싱크 이동에 초를 넣어 모든 자막을 함께 옮깁니다. 붙여 넣은 자막과 연 영상은 서버로 보내지 않고 이 브라우저 안에서만 처리합니다.

    자막 형식을 바꿔야 하는 경우

    두 형식은 생김새가 비슷해서 확장자만 바꾸면 될 것 같지만, 받는 쪽이 정한 형식과 다르면 자막이 아예 뜨지 않거나 시각을 읽지 못합니다. 다음과 같은 때에 형식을 바꿉니다.

    • 웹 페이지 영상에 자막을 달 때: HTML 영상에 자막을 붙이는 <track> 요소는 WebVTT 파일을 씁니다(MDN). 편집 프로그램에서 받은 SRT를 웹 영상에 쓰려면 VTT로 바꿔야 합니다.
    • YouTube에 자막을 올릴 때: YouTube는 두 형식을 모두 받지만, SRT는 기본 형식만 지원하고 서식 표시를 읽지 않으며 UTF-8 파일이어야 한다고 안내합니다. VTT는 위치 지정과 굵게·기울임·밑줄(b·i·u)을 지원한다고 적혀 있습니다. 기울임이나 화면 위쪽 자막을 살리려면 VTT로 올리는 편이 낫습니다.
    • 웹에서 받은 VTT를 다른 프로그램에서 쓸 때: 온라인 강의나 회의 녹화에서 내려받은 VTT 자막을 SRT만 받는 플레이어나 편집 프로그램에서 쓰려면 SRT로 바꿉니다.
    • 형식은 그대로 두고 싱크만 맞출 때: 영상 앞부분을 잘라 냈거나 인트로를 붙여서 자막이 일정하게 빠르거나 늦으면, 결과 형식을 원본과 같게 고르고 싱크 이동만 넣어 저장합니다.

    변환기 쓰는 법

    1. 자막 넣기: 아래 글 칸에 붙여 넣거나 파일 열기를 누릅니다. 작업면에 파일을 끌어다 놓아도 됩니다. 처음 화면의 예시는 글 칸을 누르면 전체가 선택되어 붙여 넣는 즉시 바뀝니다.
    2. 형식 확인: 맨 위 원본 칸에 알아본 형식과 자막 개수가 나옵니다. 결과 형식은 반대 형식으로 정해지며, 싱크만 옮길 때는 원본과 같은 형식을 고릅니다.
    3. 화면에서 재생해 보기: 재생 단추나 화면을 누르면 결과 자막이 시각대로 나옵니다. 타임라인의 막대를 누르면 그 자막으로 가고, 타임라인을 고른 뒤 화살표 키로 이전·다음 자막을 오갑니다. 비교 창은 지금 자막의 원본 줄과 결과 줄을 함께 보여 줍니다.
    4. 내 영상으로 보기: 영상 파일을 열면 화면이 그 영상으로 바뀌고 결과 자막이 위에 얹힙니다. 영상은 이 브라우저에서만 재생합니다.
    5. 싱크 맞추기: 자막이 대사보다 늦게 나오면 싱크 이동에 음수(−0.5), 빨리 나오면 양수(+0.5)를 넣습니다. − + 단추는 0.1초씩 옮깁니다.
    6. 바뀐 것 확인하고 가져가기: 변환 내역의 칩을 누르면 그 종류에 해당하는 자막으로 차례로 이동합니다. 저장으로 .vtt·.srt 파일을 받거나 복사합니다. 가운데 ⇄ 단추는 결과를 원본으로 옮겨 반대 방향으로 다시 바꿔 봅니다.

    SRT와 VTT는 이렇게 다릅니다

    항목SRTVTT(WebVTT)
    첫 줄없음(바로 1번 자막)WEBVTT로 시작해야 하며, 없으면 읽지 않음
    자막 번호1부터 차례로 붙임적지 않아도 됨(식별자, 글자도 가능하나 파일 안에서 겹치면 안 됨)
    시각 표기00:01:02,500(쉼표)00:01:02.500(점), 0시면 01:02.500도 가능
    자막 순서정해진 규칙 없음시작 시각이 앞 자막보다 빠르면 안 됨, 겹치는 것은 허용
    서식HTML에서 온 굵게·기울임·밑줄·색 태그b·i·u·c(클래스)·v(화자)·ruby·lang, 단어별 시각
    글자색<font color>기본 색 클래스 8개(white·lime·cyan·red·yellow·magenta·blue·black), 그 밖은 STYLE 블록의 CSS
    위치정해진 방법 없음시각 줄 끝의 설정(line·position·align 등)
    메모·스타일없음NOTE·STYLE·REGION 블록
    특수 문자글자 그대로&·<는 &amp;·&lt;로, 자막 안에 --> 금지
    인코딩정해진 표준 없음UTF-8
    규격정식 규격 없음(미국 의회도서관 자료)W3C WebVTT

    바꿀 때 옮기는 것과 빼는 것

    한쪽 형식에만 있는 표기는 맞는 표기가 있으면 옮기고, 담을 자리가 없으면 글자는 남긴 채 표기만 뺍니다. 뺀 것은 몇 개인지 변환 내역에 나오고, 자막마다 무엇이 바뀌었는지는 비교 창에서 볼 수 있습니다.

    원본결과설명
    SRT → VTT
    <i>말</i><i>말</i>b·i·u는 두 형식에 모두 있어 그대로 둡니다.
    <font color="#ffff00">말</font><c.yellow>말</c>WebVTT 기본 8색과 같은 색은 색 클래스로 옮깁니다.
    <font color="#ff8800">말</font>말기본 8색이 아닌 색과 글꼴 태그는 태그만 뺍니다.
    {\an8}말말화면 위 표기({\an7}~{\an9})는 시각 줄 끝의 line:0으로, 그 밖의 {\…} 표기는 뺍니다.
    A & B < CA &amp; B &lt; CVTT에서 글자로 쓸 수 없는 기호는 문자 참조로 적습니다.
    VTT → SRT
    <v 민수>말말화자 표시는 뺍니다. 스위치를 켜면 민수: 말처럼 이름을 앞에 붙입니다.
    <c.yellow>말</c><font color="yellow">말</font>기본 8색 클래스는 font 색으로 옮깁니다.
    <c.note>말</c>말STYLE에 정의한 클래스는 SRT에서 뜻이 없어 뺍니다.
    <00:00:01.500>말말단어별 시각은 SRT에 없어 뺍니다.
    <ruby>漢字<rt>한자</rt></ruby>漢字(한자)루비(읽는 법)는 괄호에 넣습니다.
    &amp; &lt;& <문자 참조는 글자로 풉니다.
    00:00:01.000 --> 00:00:02.000 align:start00:00:01,000 --> 00:00:02,000위치·정렬 설정은 SRT에 담을 자리가 없어 뺍니다.
    NOTE·STYLE·REGION 블록(뺌)메모와 스타일 정의도 뺍니다. 파일 머리의 Kind:·Language: 줄도 같습니다.

    결과 형식을 원본과 같게 고르면 위 표의 변환은 하지 않고, 문구·설정·블록을 그대로 둔 채 시각만 옮깁니다. VTT에서 SRT로 바꿀 때 자막 번호는 1부터 다시 매기고, SRT에서 VTT로 바꿀 때는 번호를 적지 않습니다.

    한 자막이 바뀌는 모습

    예시 SRT의 4·5번 자막처럼 글자색과 화면 위 표기를 쓴 두 자막을 VTT로 바꾼 결과입니다.

    SRT 원본VTT 결과
    4
    00:00:09,700 --> 00:00:12,600
    <font color="#ffff00">노란 글씨</font>는 그대로
    
    5
    00:00:11,800 --> 00:00:14,000
    {\an8}[화면 위] A & B
    WEBVTT
    
    00:00:09.700 --> 00:00:12.600
    <c.yellow>노란 글씨</c>는 그대로
    
    00:00:11.800 --> 00:00:14.000 line:0
    [화면 위] A &amp; B

    4번은 노랑(#ffff00)이 WebVTT 기본 8색이라 c.yellow로 옮겼고, 5번은 화면 위 표기를 line:0으로, &를 &amp;로 적었습니다. 두 자막은 11.8초부터 12.6초까지 0.8초 겹치지만 그대로 둡니다. WebVTT는 자막끼리 겹쳐도 된다고 정하고 있고, 두 사람이 동시에 말하는 장면처럼 일부러 겹친 자막일 수 있기 때문입니다.

    싱크 이동은 이렇게 계산합니다

    싱크 이동에 넣은 값은 모든 자막의 시작·끝 시각에 똑같이 더합니다. 더한 결과가 0초보다 앞이면 시작은 0초로 맞추고, 끝까지 0초 앞이 된 자막은 결과에서 뺍니다.

    원본 시각+1.5초−2초
    00:00:01,000 --> 00:00:03,40000:00:02,500 --> 00:00:04,90000:00:00,000 --> 00:00:01,400(시작은 0초로)
    00:00:00,500 --> 00:00:01,80000:00:02,000 --> 00:00:03,300뺌(끝도 0초 앞)

    처음에는 맞다가 뒤로 갈수록 점점 더 어긋난다면 한 값으로는 맞출 수 없습니다. 자막을 만들 때 기준으로 삼은 영상과 지금 영상의 재생 속도가 다를 때 이런 일이 생기며, 이 변환기는 시각을 비율로 늘리거나 줄이지 않습니다.

    자주 틀리는 경우

    • 확장자만 바꾸기: .srt 파일의 이름만 .vtt로 바꾸면 첫 줄에 WEBVTT가 없어서 WebVTT 규격의 해석 방법대로라면 파일 전체를 읽지 않습니다. 시각의 쉼표도 그대로 남습니다.
    • 쉼표와 점 섞기: 손으로 고친 SRT에 00:00:01.500처럼 점이 섞이면 읽지 못하는 프로그램이 있습니다. 이 변환기는 읽을 때 둘 다 받아들이고 결과는 형식에 맞게 다시 적으며, 고친 곳은 내역의 '시각 구분 문자 고침'으로 셉니다.
    • 자막 사이 빈 줄 빠뜨리기: SRT는 빈 줄로 자막을 나눕니다. 빈 줄이 빠지면 다음 번호와 시각이 앞 자막의 문구로 읽힐 수 있습니다. 변환기는 번호·시각 줄을 보고 나눈 뒤 '붙어 있던 자막 나눔'으로 알려 줍니다.
    • 끝 시각이 시작보다 빠른 자막: 손으로 시각을 고치다 자주 생깁니다. 어느 값이 맞는지 짐작할 수 없어서 변환을 멈추고 몇 번째 줄인지 알려 주며, 원본에서 보기를 누르면 그 줄로 갑니다.
    • 옛 인코딩 자막을 그대로 올리기: 오래된 한국어 SRT 중에는 EUC-KR(CP949)로 저장된 파일이 있습니다. YouTube는 SRT가 UTF-8이어야 한다고 안내하므로, 파일 열기로 읽은 뒤 저장해 UTF-8 파일로 올립니다.
    • 겹친 자막을 오류로 보고 지우기: 타임라인에 빗금으로 표시되는 겹친 자막은 일부러 겹쳐 둔 것일 수 있습니다. 재생해 보고 실제로 잘못된 경우에만 원본에서 고칩니다.

    한계와 주의

    • SRT와 VTT 글자 파일을 10MB, 자막 20,000개까지 바꿉니다. SMI·ASS·SBV 같은 다른 자막 형식은 읽지 않습니다.
    • 미리 보기 화면은 결과 자막의 시각과 글자, 기본 서식과 색, 화면 위 표시를 보여 줍니다. 실제 플레이어의 글꼴·크기·위치는 다를 수 있고, STYLE 블록의 CSS는 미리 보기에 쓰지 않습니다.
    • 영상은 이 브라우저가 재생할 수 있는 형식만 열립니다. 영상과 자막은 모두 서버로 보내지 않습니다.
    • 끝 시각이 시작 시각보다 빠르거나 같은 자막, 읽을 수 없는 시각이 있으면 변환하지 않습니다. 문구가 없는 자막은 빼고 그 개수를 알려 줍니다.
    • 결과는 UTF-8(BOM 없음), 줄바꿈 LF로 저장합니다.

    기준일 형식 규칙과 플랫폼 안내는 2026-10-20에 원문으로 확인했습니다.

    출처

    자주 묻는 질문

    SRT와 VTT는 무엇이 다른가요?

    둘 다 영상 밖에 따로 두는 글자 자막입니다. VTT(WebVTT)는 첫 줄이 WEBVTT이고 시각의 밀리초 앞에 점을 쓰며, 위치·스타일·메모를 적을 수 있는 W3C 규격입니다. SRT는 번호·시각·문구를 빈 줄로 나누고 밀리초 앞에 쉼표를 쓰며, 정식 규격 없이 널리 쓰이는 형식입니다.

    SRT를 VTT로 바꾸면 싱크가 달라지나요?

    달라지지 않습니다. 시작·끝 시각은 1000분의 1초까지 그대로 두고 표기만 00:00:01,250에서 00:00:01.250으로 바꿉니다. 싱크 이동 칸에 값을 넣었을 때만 모든 시각이 그만큼 옮겨집니다.

    자막이 영상보다 늦게 나오면 어떻게 맞추나요?

    내 영상으로 보기로 영상을 열고 재생하며 어긋난 정도를 봅니다. 자막이 늦으면 싱크 이동에 음수(예: −0.8), 빠르면 양수를 넣습니다. 0초 앞으로 밀린 시작은 0초가 되고, 끝까지 0초 앞이 된 자막은 빠집니다. 뒤로 갈수록 어긋남이 커지는 경우는 한 값으로 맞출 수 없습니다.

    기울임·색 같은 서식은 그대로 남나요?

    b·i·u 태그는 두 형식 모두에서 그대로 둡니다. SRT의 font color 가운데 WebVTT 기본 8색(white·lime·cyan·red·yellow·magenta·blue·black)은 c.yellow 같은 색 클래스로, 반대로 바꿀 때는 font color로 옮깁니다. 그 밖의 색·글꼴 태그는 태그만 빼고 글자는 남깁니다.

    VTT의 위치 설정이나 NOTE·STYLE은 SRT로 바꾸면 어떻게 되나요?

    SRT에는 그런 정보를 적을 자리가 없어서 뺍니다. 몇 개를 뺐는지는 변환 내역에 나오고, 자막마다 무엇이 빠졌는지는 비교 창에서 볼 수 있습니다. VTT 그대로 싱크만 옮기려면 결과 형식을 VTT로 두면 설정과 블록이 모두 남습니다.

    한글 자막이 깨져 보이면 어떻게 하나요?

    파일 열기로 읽으면 BOM, UTF-8, EUC-KR 순서로 인코딩을 알아보고 어떤 인코딩으로 읽었는지 글 칸 위에 표시합니다. 결과는 늘 UTF-8로 저장되므로 옛 EUC-KR 자막도 열었다가 저장하면 UTF-8 파일이 됩니다. 이미 깨진 글자를 붙여 넣었다면 원본 파일을 다시 여세요.

    자막이나 영상 파일이 서버로 올라가나요?

    올라가지 않습니다. 자막 변환과 영상 재생은 모두 이 브라우저 안에서 처리하며, 붙여 넣은 내용과 연 파일을 서버로 보내거나 주소·저장소에 남기지 않습니다.

    어떤 파일까지 바꿀 수 있나요?

    SRT와 VTT 형식의 글자 파일을 10MB, 자막 20,000개까지 바꿉니다. SMI·ASS·SBV 같은 다른 자막 형식은 읽지 않습니다. 끝 시각이 시작 시각보다 빠르거나 읽을 수 없는 시각이 있으면 변환을 멈추고 몇 번째 줄인지 알려 줍니다.