MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

자막 싱크 조절기 (SRT·WebVTT)

타임라인을 끌거나, 첫 대사가 나올 시각을 입력하거나, 100ms씩 밀면 대사는 그대로 두고 모든 자막 시각이 함께 움직입니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제
harbor.srt SRT

시간만 바뀝니다. CueShift는 영상과 맞는지 확인하지 않으므로 내려받은 파일을 한 번 재생해 보세요.

시간 이동

−2.400 s

영상에서 첫 대사가 들리는 시각을 00:01:23,400처럼 입력하세요.

저장 형식

큐 타임라인

큐6
길이00:00:58
이동−2.400 s
0:00으로 맞춘 큐0
0:000:100:200:300:400:501:00원본이동 후

아래 줄을 좌우로 끌거나(Shift = 0.1초 단위), 선택한 뒤 ← →를 누르세요(Shift = 1초). 막대 높이는 큐마다 담긴 글자 양입니다.

이동 전후

#이전이후대사
100:00:12,40000:00:10,000이 길을 따라가면 바다가 나와요.
200:00:16,00000:00:13,600Are you sure? It looks like rain.
300:00:20,10000:00:17,700Trust me. I've walked it a hundred times. ↵ <i>(thunder in the distance)</i>
400:00:31,50000:00:29,100-- Then lead the way.
500:00:42,25000:00:39,850The lighthouse has been dark since spring. ↵ No one has the key.
600:00:55,00000:00:52,600그래도 올라가 보고 싶어요.

출력 미리보기 · harbor.shifted.srt

1
00:00:10,000 --> 00:00:12,800
이 길을 따라가면 바다가 나와요.

2
00:00:13,600 --> 00:00:16,350
Are you sure? It looks like rain.

3
00:00:17,700 --> 00:00:20,900
Trust me. I've walked it a hundred times.
<i>(thunder in the distance)</i>

4

앞부분 14줄

이 자막 싱크 조절기는 .srt나 .vtt 파일의 모든 큐를 같은 양만큼 옮깁니다. 양수 오프셋은 자막을 늦게 나오게 해서 너무 일찍 나오는 자막을 고치고, 음수 오프셋은 더 일찍 나오게 합니다. 이동은 각 큐의 시작과 끝 모두에 적용되며, 불러온 형식과 상관없이 결과를 SRT나 WebVTT로 저장할 수 있습니다.

영상의 인트로가 다른 버전용으로 자막을 만들었거나 플레이어가 고정 지연을 더하는 경우처럼 파일 전체가 일정하게 어긋났을 때 알맞은 도구입니다. 오프셋은 네 가지로 정할 수 있습니다. ±30초 범위의 슬라이더, -1초·-100ms·0·+100ms·+1초 버튼, 큐 타임라인의 아래쪽 줄 끌기, 그리고 첫 대사가 나올 시각 직접 입력입니다. 시간이 조금씩 밀리는 자막에는 맞지 않습니다. 그런 자막은 이동이 아니라 배율 조정이 필요합니다.

파일은 이 탭에서 텍스트로 읽혀 다시 쓰이므로 내용이 서버로 전송되지 않습니다. 크기 한도는 10MB입니다. 바이트 순서 표시가 있는 UTF-16 파일은 UTF-16으로 읽고, 그 밖의 UTF-8이 아닌 파일은 대체 인코딩을 씁니다. 내려받는 파일은 항상 UTF-8이며 그 사실을 안내문으로 알려 줍니다.

사용 방법

  1. 파일이나 샘플 불러오기

    .srt나 .vtt 파일을 끌어다 놓거나 선택하고, 한국어와 영어가 섞인 SRT 샘플(6개 큐)이나 화자 태그가 있는 WebVTT 샘플(4개 큐)을 눌러도 됩니다. 페이지는 SRT 샘플을 -2.400초 이동한 상태로 열리므로 결과를 바로 볼 수 있습니다.

  2. 오프셋 정하기

    슬라이더를 움직이거나 -1초, -100ms, 0, +100ms, +1초 버튼을 누르거나 큐 타임라인의 아래쪽 줄을 끕니다. 그 줄에 초점을 두고 화살표 키를 눌러도 되며 Shift를 함께 누르면 1초씩 움직입니다. 영상에서 첫 대사가 나오는 시각을 안다면 hh:mm:ss,mmm 형식으로 입력하세요. 오프셋이 자동으로 계산됩니다.

  3. 타임라인과 표 확인

    타임라인은 원본 줄을 위에, 이동한 줄을 아래에 보여 주며 막대 높이는 초당 말하는 글자 양을 나타냅니다. 이동 전후 시각 표에는 모든 큐가 나오고 검색할 수 있습니다. 0:00으로 맞춘 큐 수치는 파일 맨 앞으로 밀려난 큐가 몇 개인지 알려 줍니다.

  4. 출력 형식 고르기

    SRT나 WebVTT를 고릅니다. 출력 미리보기에는 앞 14줄이 나오므로 저장 전에 구분자, 헤더, 번호를 확인할 수 있습니다.

  5. 내려받기 또는 복사

    내려받은 파일 이름은 원래 이름에 따라 movie.shifted.srt, movie.shifted.vtt처럼 정해집니다. 플레이어에서 영상과 함께 불러 시작 부근과 끝 부근의 큐를 확인하세요.

작동 원리

시간 표기 문법: SRT와 WebVTT

SubRip(.srt)는 공식 표준은 없지만 안정된 관례가 있습니다. 큐 번호, 밀리초 앞에 쉼표가 있는 HH:MM:SS,mmm --> HH:MM:SS,mmm 시간 줄, 텍스트 줄, 빈 줄입니다. HTML5 비디오가 쓰는 W3C 명세인 WebVTT(.vtt)는 파일을 WEBVTT로 시작하고, 밀리초를 마침표로 쓰며, 시간 부분을 생략할 수 있고, 큐 식별자, 시간 뒤의 큐 설정, NOTE·STYLE·REGION 블록을 허용합니다.

시간 줄은 시작 --> 끝에 선택적으로 큐 설정이 붙은 형태만 엄격하게 인식하므로, 대사 안에 -->가 들어 있어도 그저 텍스트로 취급되어 파일이 깨지지 않습니다. 타임스탬프는 소수 자리가 1~3자리여도 되고 시간 부분은 생략할 수 있어서 .5는 500ms, 01:02.5는 1분 2.5초입니다. .vtt로 불러오는 파일은 WEBVTT 헤더로 시작해야 합니다.

항목SRTWebVTT
헤더없음첫 줄의 WEBVTT
밀리초 구분자쉼표, 00:00:01,500마침표, 00:00:01.500
시간항상 표기생략 가능, 01:02.500도 유효
큐 번호필수선택적 식별자
시간 뒤의 설정형식에 없음align:start position:10%
주석·스타일없음NOTE, STYLE, REGION 블록

같은 형식이면 그대로, 다른 형식이면 재구성

출력 형식이 입력과 같으면 시간 줄의 타임스탬프만 다시 씁니다. 번호, WebVTT 헤더, NOTE·STYLE 블록, 큐 설정, 줄바꿈(CRLF 또는 LF), 그리고 -->가 들어 있는 대사를 포함한 모든 텍스트가 바이트 단위로 그대로 남습니다. 각 타임스탬프는 자기 구분자(쉼표 또는 마침표)를 유지합니다.

형식이 바뀌면 파일을 새로 만듭니다. SRT에서 WebVTT로 가면 WEBVTT 헤더를 쓰고 구분자를 마침표로 바꾸며 번호를 지웁니다. WebVTT에서 SRT로 가면 큐에 1번부터 번호를 매기고 구분자를 쉼표로 바꾸며 큐 설정, 식별자, NOTE 블록을 지웁니다. <v Mina> 같은 화자 태그는 Mina: 로 바뀌고, <c>·<lang>·<ruby> 태그는 제거되며, SRT 플레이어가 이해하는 <i>·<b>·<u>는 남습니다. 원본의 줄바꿈 방식도 유지됩니다.

각 타임스탬프가 이동하는 방식

각 타임스탬프를 밀리초로 바꿔 오프셋을 더하고 HH:MM:SS와 밀리초로 다시 씁니다. 시간 부분은 최소 두 자리입니다. 0:00보다 앞에서 시작하게 되는 큐는 버려지지 않고 시작이 00:00:00,000으로 고정되며, 끝은 정상적으로 이동합니다(끝도 음수면 함께 고정됩니다). 이런 큐는 0:00으로 맞춘 큐 통계와 경고에 집계됩니다. 여러 큐가 고정되면 파일 맨 앞에 몰립니다.

검사와 오류 메시지

결과를 만들기 전에 파일을 검사하고, 문제는 줄 번호와 함께 알려 줍니다. 분이나 초가 59를 넘거나 형식이 잘못된 타임스탬프, 시작보다 먼저 끝나는 큐, WEBVTT 헤더가 없는 .vtt 파일, 큐가 없는 파일, 10MB를 넘는 파일이 대상입니다. 문제를 고치기 전에는 아무것도 출력되지 않으므로 깨진 큐가 조용히 섞여 나가는 일이 없습니다.

UTF-8이 아닌 텍스트는 별도로 처리합니다. UTF-16 바이트 순서 표시가 있으면 UTF-16으로 읽습니다. 그 밖의 파일은 먼저 UTF-8로 읽어 보고, 아니면 화면 언어에 따라 정한 대체 인코딩을 씁니다. 한국어는 euc-kr, 일본어는 Shift_JIS, 중국어 간체는 GB18030, 번체는 Big5, 키릴 문자 언어는 windows-1251, 그 밖에는 windows-1252입니다. 내려받는 파일은 UTF-8로 저장됩니다.

실제 예시

SRT를 2.5초 늦추기, 대사에 화살표가 있는 경우
입력
1
00:00:01,500 --> 00:00:03,000
Hello

2
00:00:04,000 --> 00:00:05,250
A --> B is an arrow
출력
1
00:00:04,000 --> 00:00:05,500
Hello

2
00:00:06,500 --> 00:00:07,750
A --> B is an arrow

출력은 SRT, 오프셋 +2500ms입니다. 큐 번호와 텍스트는 그대로이고, 두 번째 큐 대사의 화살표는 시간 줄로 오인되지 않습니다.

2초 앞당기기, 0으로 고정
입력
1
00:00:01,500 --> 00:00:03,000
Hello

2
00:01:04,000 --> 00:01:05,250
Later
출력
1
00:00:00,000 --> 00:00:01,000
Hello

2
00:01:02,000 --> 00:01:03,250
Later

출력은 SRT, 오프셋 -2000ms입니다. 첫 큐의 시작은 -0.5초가 되므로 버려지지 않고 00:00:00,000으로 고정되며, 0:00으로 맞춘 큐에는 1이 표시됩니다.

짧은 시간 표기와 큐 설정이 있는 WebVTT를 WebVTT로 유지
입력
WEBVTT

NOTE shift me

intro
01:02.500 --> 01:04.000 align:start position:10%
Hi

00:00:10.000 --> 00:00:12.000
Bye
출력
WEBVTT

NOTE shift me

intro
00:01:03.500 --> 00:01:05.000 align:start position:10%
Hi

00:00:11.000 --> 00:00:13.000
Bye

출력은 WebVTT, 오프셋 +1000ms입니다. MM:SS.mmm 시간에 시간 부분이 생겼고, NOTE 블록, 식별자, 시간 뒤의 설정은 그대로 남았습니다.

SRT를 WebVTT로 저장
입력
1
00:00:01,500 --> 00:00:03,000
Hello

2
00:00:04,000 --> 00:00:05,250
<i>Second</i> line
출력
WEBVTT

00:00:02.500 --> 00:00:04.000
Hello

00:00:05.000 --> 00:00:06.250
<i>Second</i> line

출력은 WebVTT, 오프셋 +1000ms입니다. 헤더가 추가되고 구분자가 마침표로 바뀌었으며 번호는 사라졌습니다.

화자 태그가 있는 WebVTT를 SRT로 저장
입력
WEBVTT

NOTE shift me

intro
00:00:05.000 --> 00:00:08.200 align:start
<v Mina>We should leave.</v>

00:00:09.400 --> 00:00:12.000
<v Joon><c.loud>Five</c> more minutes.</v>
출력
1
00:00:03,500 --> 00:00:06,700
Mina: We should leave.

2
00:00:07,900 --> 00:00:10,500
Joon: Five more minutes.

출력은 SRT, 오프셋 -1500ms입니다. 큐에 번호가 붙고 NOTE 블록, 식별자, 설정은 사라지며, 화자 태그는 이름: 으로 바뀌고 c 태그는 제거되었습니다.

자주 하는 실수

  • 밀리는 자막은 이동이 아니라 배율 조정이 필요

    일정한 오프셋은 어디서나 같은 양만큼 틀린 파일을 고칩니다. 시작은 맞는데 끝으로 갈수록 점점 늦어진다면 프레임레이트가 달라서(예: 23.976과 25fps) 모든 시간에 배율을 곱해야 합니다. 이 도구는 프레임레이트에 맞춰 늘리지 않으며 자막을 영상과 대조해 주지도 않으므로 오프셋은 직접 판단해서 정해야 합니다.

  • 앞쪽 큐는 0에 고정되어 몰림

    0:00보다 앞에서 시작하게 되는 큐는 00:00:00,000에 놓이므로 여러 대사가 한꺼번에 나올 수 있습니다. 첫 큐의 시작 시각보다 더 많이 앞당길 때는 0:00으로 맞춘 큐 수치와 표의 첫 행을 확인하세요.

  • .vtt 파일은 WEBVTT로 시작해야 함

    확장자는 .vtt인데 WEBVTT 헤더가 없는 파일은 오류로 거부됩니다. 첫 줄에 헤더를 넣거나, 실제로 SRT 내용이라면 SRT로 불러오세요.

  • SRT로 바꾸면 WebVTT 기능이 사라짐

    WebVTT를 SRT로 저장하면 위치 설정, 큐 식별자, NOTE·STYLE 블록, HLS용 X-TIMESTAMP-MAP 헤더가 제거되고 화자 태그는 이름: 텍스트로 풀립니다. 이런 기능이 필요하면 출력을 WebVTT로 저장하세요.

  • 오래된 파일에서 글자가 깨짐

    바이트 순서 표시가 있는 UTF-16 파일은 UTF-16으로 인식합니다. 그 밖의 오래된 자막 파일은 UTF-8이 아니라 euc-kr, Shift_JIS, windows-1252인 경우가 많습니다. 대체 인코딩은 화면 언어를 기준으로 고르므로 글자가 깨져 보이면 파일에 맞는 언어로 바꿔 다시 불러오세요. 내려받는 사본은 언제나 UTF-8입니다.

자주 묻는 질문

자막이 더 일찍 나오게 하려면?

음수 오프셋을 쓰세요. 슬라이더를 왼쪽으로 끌거나 -1초, -100ms 버튼을 누르거나, 첫 대사가 나와야 할 더 이른 시각을 입력하면 됩니다. 양수는 자막을 늦추고 음수는 앞당깁니다.

밀리초 단위로 이동할 수 있나요?

됩니다. 오프셋은 밀리초 단위이고 -100ms, +100ms 버튼이 한 단계씩 움직입니다. 타임라인 줄을 끌거나 화살표 키를 눌러도 되며 Shift와 함께 누르면 1초씩 움직입니다.

첫 대사 시각으로 싱크를 맞추려면?

영상에서 첫 대사가 나오는 시각을 확인해 hh:mm:ss,mmm 형식으로 첫 대사 입력란에 넣으세요. 첫 큐의 원래 시작 시각을 빼서 오프셋을 자동으로 정해 줍니다.

텍스트, 번호, 스타일이 바뀌나요?

출력 형식이 입력과 같으면 바뀌지 않습니다. 시간 줄의 타임스탬프만 다시 쓰고 번호, 텍스트, 줄바꿈, WebVTT 설정, 주석 블록은 그대로입니다. 형식을 바꾸면 위에서 설명한 대로 파일을 재구성합니다.

SRT를 VTT로, VTT를 SRT로 변환할 수 있나요?

됩니다. 출력 형식은 입력과 별개로 고릅니다. SRT에서 VTT로 가면 WEBVTT 헤더와 마침표 구분자가 붙고, VTT에서 SRT로 가면 큐에 번호가 붙고 화자 태그가 이름: 으로 바뀌며 큐 설정이 제거됩니다.

0보다 앞에서 시작하게 되는 큐는 어떻게 되나요?

삭제되지 않고 00:00:00,000으로 고정되며, 0:00으로 맞춘 큐 통계와 경고에 집계됩니다. 음수 오프셋을 줄이면 되돌릴 수 있습니다.

자막 파일이 업로드되나요?

아니요. 자막 텍스트와 오프셋은 브라우저에서 처리되며 서버로 전송되지 않습니다. 이동된 파일은 그곳에서 만들어지고 movie.shifted.srt처럼 원래 이름을 따라 저장됩니다.

마지막 업데이트: