블로그로 돌아가기

자막 싱크가 안 맞을 때 — 밀림과 드리프트를 잡는 프레임레이트·타이밍 가이드

Picute Team 작성··15 min read
자막싱크타이밍프레임레이트fpssrt

자막 파일을 받았거나 다른 도구에서 내보냈는데 음성과 안 맞습니다. 모든 줄이 몇 초씩 늦게 뜰 수도 있고, 첫 장면은 완벽한데 끝에 가면 자막이 한 문장 앞서 있을 수도 있습니다. 둘 다 같은 버그처럼 느껴지지만, 사실 원인이 두 가지고 해결책도 두 가지입니다 — 그리고 엉뚱한 쪽을 쓰면 문제가 더 나빠집니다.

이 글은 30초 만에 둘을 구분하는 법, 두 번째 유형의 숨은 범인인 프레임레이트의 정체, 그리고 각각을 고치는 무료 브라우저 도구를 정확히 짚어 줍니다.

30초 진단: 오프셋이냐 드리프트냐

설정을 만지기 전에 테스트부터 하세요. 영상 맨 앞에서 또렷이 들리는 대사를 골라 자막이 얼마나 어긋났는지 보고, 맨 뒤에서 같은 대사로 다시 확인합니다.

관찰 결과 원인 해결
시작과 끝에서 같은 양만큼 어긋남 일정한 오프셋 — 전체가 균일하게 빠르거나 늦음 타이밍 이동
시작은 맞는데 끝으로 갈수록 벌어짐(간격이 점점 커짐) 점진적 드리프트 — 프레임레이트 불일치 프레임레이트 변환
장면마다 어긋나는 방향이 다르고 일정한 패턴 없음 불규칙 비동기 — 편집·광고 제거·가변 프레임레이트 구간별 재타이밍 또는 새로 전사

이 한 가지 관찰 — 오차가 일정한가, 점점 커지는가? — 이 도구를 결정합니다. 나머지는 각 경로를 설명합니다.

경로 1 — 일정한 오프셋 (전체가 빠르거나 늦음)

이쪽이 더 단순합니다. 자막의 간격은 맞습니다 — 줄 사이 간격이 음성과 일치합니다 — 다만 트랙 전체가 잘못된 시점에서 시작합니다. 흔한 원인:

  • 인트로 길이가 다른 릴리스용으로 만든 자막(없는 스튜디오 로고나 요약본이 있거나, 그 반대)
  • 플레이어가 고정 지연을 더하거나 뺌
  • 잘리거나 덧붙은 영상 사본에 맞춰 만든 자막

고치는 법

  1. 특징적인 대사 한 줄을 골라 플레이어에서 실제 발화 시각을 적습니다.
  2. 같은 대사의 자막 타임스탬프를 적습니다.
  3. 그 차이가 오프셋입니다. 자막이 00:01:05에 뜨는데 대사는 00:01:02.5에 나온다면 자막이 2.5초 늦은 것 → −2500 ms 이동.
  4. 자막 시프터에 파일을 붙여넣고 오프셋을 입력한 뒤(양수는 뒤로, 음수는 앞으로) 수정된 SRT를 내려받습니다.

시프터는 모든 큐에 같은 밀리초 오프셋을 더하고 출력 번호를 다시 매깁니다. 큰 음수 이동으로 00:00:00 이전으로 밀리는 큐는 시작점에 고정되거나(끝나는 시각이 0 이하가 되면 제거) 처리되므로, 상식적인 오프셋이라면 파일이 망가지지 않습니다.

무료 자막 시프터 열기모든 큐에 고정 밀리초 오프셋 가감 · 번호 재정렬된 SRT 출력 · 브라우저에서 바로 처리

경로 2 — 점진적 드리프트 (간격이 시간이 갈수록 커짐)

이쪽이 사람들을 헷갈리게 합니다. 처음 재생할 땐 멀쩡해 보이기 때문입니다. 첫 1분은 맞고, 10분 지나면 살짝 어긋나고, 끝에 가면 한 문장씩 밀립니다. 그 점점 커지는 오차가 프레임레이트 불일치의 지문입니다.

왜 프레임레이트가 드리프트를 일으키나

자막 타임스탬프는 절대 시각입니다 — 00:42:17,500은 "42분 17.5초 지점"을 뜻합니다. 그런데 똑같은 영화의 러닝타임이 인코딩된 프레임레이트에 따라 달라집니다. 프레임레이트가 그 프레임들이 얼마나 빨리 재생되는지를 정하기 때문입니다.

24 fps로 마스터링한 영화를 봅시다. 흔히 두 가지 일이 벌어집니다.

  • PAL판 (25 fps): 25 fps 방송에 맞추려고 영화를 초당 1프레임 더 빠르게 재생합니다. 러닝타임이 약 4% 짧아지고, 음정이 약 3/4 반음 올라갑니다 — 고전적인 "PAL 스피드업".
  • NTSC판 (23.976 fps): NTSC의 컬러 시스템 타이밍에 맞추려고 NTSC 계수 1000/1001(약 0.1%)만큼 느리게 합니다.

25 fps PAL 사본에 맞춰 만든 자막은 더 짧은 러닝타임을 가정합니다. 이걸 23.976 fps 판에서 틀면 모든 큐가 너무 일찍 뜨고, 오차가 경과 시간의 비율이라 시작에선 미미하다가 끝에선 몇 초씩 벌어집니다. 그게 드리프트입니다.

해결은 곱셈이지 덧셈이 아니다

드리프트는 시프트로 없앨 수 없습니다. 시프트는 모든 큐를 같은 양만큼 옮기지만, 드리프트는 타임스탬프에 비례하는 양만큼 옮겨야 하기 때문입니다. 올바른 연산은 모든 타임스탬프를 재스케일하는 것입니다.

새 시간 = 기존 시간 × (source_fps ÷ target_fps)

프레임레이트 변환기가 정확히 이 일을 합니다. source fps에는 자막 파일의 타이밍 기준이 된 값을, target fps에는 실제로 보고 있는 영상의 값을 넣으세요.

  • PAL 타이밍 SRT(25)를 필름 레이트 블루레이(23.976)로: source 25 → target 23.976. 비율 25 ÷ 23.976 ≈ 1.0427 이 모든 타임스탬프에 곱해져, 더 길게 재생되는 필름에 맞도록 트랙을 약 4% 늘립니다.
  • 30 fps 내보내기 SRT를 29.97 fps NTSC 영상으로: source 30 → target 29.97. 0.1% 보정 — 작지만 끝에서 ~7초 밀리던 현상을 제거합니다.

도구에는 실제로 중요한 값들이 프리셋으로 들어 있습니다: 23.976, 24, 25, 29.97, 30, 50, 59.94, 60. 직접 값을 입력할 일은 드뭅니다 — 드리프트는 거의 항상 표준 PAL/NTSC/필름 조합 중 하나에서 오기 때문입니다.

무료 프레임레이트 변환기 열기모든 타임스탬프를 source ÷ target fps 비율로 재스케일 · PAL/NTSC/필름 프리셋 · 업로드 없이 SRT 출력

실제로 마주치는 프레임레이트들

프레임레이트 출처 비고
23.976 NTSC 필름 (24 × 1000/1001) 대부분의 블루레이·스트리밍 영화
24 진짜 영화관 / DCP 명목상 필름 표준, 23.976에서 반올림되는 경우가 많음
25 PAL (유럽·호주 방송·DVD) 필름 대비 4% 드리프트를 일으키는 "PAL 스피드업"의 원천
29.97 NTSC 방송·DVD (30 × 1000/1001) "30 fps" NTSC 라벨 뒤의 실제 값
30 일부 웹 영상·화면 녹화 명목값; 29.97과 0.1% 불일치
50 / 59.94 / 60 고프레임레이트·스포츠·게임 59.94와 60의 관계는 29.97과 30의 관계와 같음

골치 아픈 조합:

  • 23.976 ↔ 25 — PAL vs 필름. 약 4.3% 드리프트. 가장 크고 흔한 경우.
  • 23.976 ↔ 24, 29.97 ↔ 300.1% NTSC 계수. 분당은 작지만 영화 한 편이면 약 7초.
  • 50 ↔ 59.94/60 — 고프레임레이트에서의 같은 NTSC 트릭.

드롭프레임 타임코드에 대한 짧은 메모

방송이나 NLE를 다뤄 봤다면 드롭프레임 vs 논드롭 선택을 본 적이 있을 텐데, 같은 1000/1001 간극에서 비롯되므로 알아 둘 만합니다.

NTSC는 29.97 fps로 재생되지만 타임코드는 깔끔하게 초당 30프레임을 세고 싶어 합니다. 그대로 두면 그 타임코드 시계가 실제 시간보다 시간당 약 3.6초씩 뒤처집니다(논드롭 '1시간'은 실제로 약 3.6초 더 깁니다). 드롭프레임 타임코드는 매 분 첫머리에서 프레임 번호 두 개를 건너뛰어(매 10분째는 제외) 라벨이 실제 시간을 따라가게 합니다. 논드롭은 쭉 세다가 천천히 뒤처집니다.

핵심은, 드롭프레임이 바꾸는 건 프레임의 라벨링이지 재생 속도가 아니라는 점입니다. SRT에서는 대체로 간접적입니다 — SRT는 프레임 번호가 아니라 실제 밀리초를 저장하므로, SRT를 시프트할 때 드롭프레임을 고르지 않습니다. 하지만 "30 vs 29.97" 혼동이 드리프트 자막을 만들어 내는 이유가 바로 이것이고, 내보내기 파이프라인이 29.97 fps 영상에 SRT를 30 fps로 찍었다면 위의 30 → 29.97 변환이 해법입니다.

두 도구로도 안 될 때

전역 시프트나 재스케일 한 번은 흔한 균일 문제 두 가지를 고칩니다. 하지만 불규칙 비동기는 고치지 못합니다.

  • 영상이 재편집됨 — 광고 제거, 장면 컷 — 으로 이음매마다 오프셋이 달라지는 경우
  • 화면 녹화나 휴대폰 영상에 흔한 가변 프레임레이트(VFR) — 단일 비율이 통하지 않는 경우

이런 경우엔 구간별로 다시 타이밍을 잡거나, 훨씬 빠르게는 지금 가진 영상에서 자막 파일을 새로 만들어야 합니다.

문제 자체를 피하기: 내 파일에서 직접 전사

거의 모든 밀림·드리프트 골칫거리는 똑같이 시작됩니다 — 영상의 다른 릴리스에 맞춰진 자막 파일을 가져온 것이죠. 깔끔한 탈출구는 안 맞는 파일을 애초에 재사용하지 않는 것입니다.

지금 눈앞의 영상을 그대로 전사하면, 나오는 자막은 그 파일 자체의 음성에 타이밍이 맞춰집니다 — 다른 프레임레이트도, 다른 러닝타임도, 맞춰야 할 대상이 아무것도 없습니다. Picute는 업로드 한 번(또는 유튜브 URL 붙여넣기)으로 이걸 처리합니다. 내 파일에 타이밍이 맞춰진 깔끔한 SRT와 전체 플레인 텍스트 대본, 그리고 선택적으로 스타일이 입혀진 번인 영상을 70개 이상 언어로 생성합니다. 프레임레이트를 추측할 일도, 오프셋을 사냥할 일도 없습니다.

기존 파일을 구제할 땐 변환기와 시프터를, 애초에 문제가 없길 바랄 땐 새로 전사하세요.

관련 글

Picute에서 자막 생성하기내 파일에 맞춰진 SRT 생성 · 전체 대본 · 스타일 번인 · 70개 이상 언어

자주 묻는 질문

자막이 처음엔 맞는데 영상이 진행될수록 점점 더 어긋나요 — 뭐가 문제인가요?

이건 단순한 타이밍 오프셋이 아니라 프레임레이트 불일치의 전형적인 신호입니다. 자막 파일이 지금 보고 있는 영상과 다른 프레임레이트로 타이밍이 잡혀 있는 경우입니다. 오차가 경과 시간의 '비율'이기 때문에 첫 1분에는 거의 안 보이다가 한 시간쯤 지나면 확연해집니다. 해결책은 모든 타임스탬프에 두 프레임레이트의 비율 — source_fps ÷ target_fps — 을 곱해 재스케일하는 것입니다. 시프트는 도움이 안 됩니다. 시프트는 모든 큐를 같은 양만큼 옮기지만, 드리프트는 큐마다 시간에 비례해 점점 커지는 양만큼 옮겨야 하기 때문입니다. 시프터가 아니라 프레임레이트 변환기를 쓰세요.

23.976과 24(또는 29.97과 30)의 0.1% 차이가 정말 문제가 되나요?

짧은 클립이면 안 됩니다. 장편 영화라면 분명히 문제가 됩니다. NTSC 계수는 정확히 1000/1001, 약 0.1%입니다. 2시간(7,200초) 영화라면 끝까지 가면 약 7초의 드리프트가 쌓이는데, 대사 싱크를 깨뜨리기엔 충분하고도 남습니다. 그래서 '30 fps'로 표기된 자막 파일이 29.97 fps 영상에서 싱크를 유지하지 못하는 일이 흔합니다. 숫자는 거의 같아 보여도 실제 NTSC 값은 24×1000/1001, 30×1000/1001 인데, 딱 떨어지지 않아 흔히 23.976, 29.97로 반올림하며 '24'·'30'은 명목 라벨일 뿐입니다.

PAL 스피드업이 뭐고, 왜 유럽 DVD 자막이 안 맞나요?

24 fps 필름을 25 fps PAL 방송에 얹기 위해, 영화 전체를 초당 1프레임 더 빠르게 재생합니다 — '4% 스피드업'(25 ÷ 24 ≈ 1.0417)입니다. 러닝타임이 약 4% 짧아지고 음정이 약 3/4 반음 올라갑니다(PAL DVD가 극장판이나 NTSC판보다 살짝 높게 들리는 이유). 25 fps PAL판에 맞춰 만든 자막은 23.976 fps 블루레이에서 약 4% 빠르게 흐르고, 반대도 마찬가지입니다. PAL 타이밍 SRT를 필름 레이트 영상으로 옮기려면 25에서 23.976으로 변환합니다. 각 타임스탬프에 25 ÷ 23.976 ≈ 1.0427 을 곱해, 더 길게 재생되는 필름에 맞도록 트랙을 늘립니다.

드롭프레임 타임코드가 뭔가요? SRT 자막에도 설정해야 하나요?

드롭프레임은 재생 속도를 바꾸는 게 아니라 타임코드를 '라벨링'하는 규칙입니다. NTSC 영상은 29.97 fps로 재생되지만 타임코드는 깔끔하게 초당 30프레임을 셉니다. 그대로 두면 타임코드 시계가 실제 시간보다 시간당 약 3.6초씩 뒤처집니다. 드롭프레임 타임코드는 매 분 첫머리에서 프레임 '번호' 두 개를 건너뛰어(매 10분째는 제외) 라벨이 실제 시간을 따라가게 합니다. 논드롭은 그냥 쭉 세다가 점점 뒤처집니다. SRT에서는 대개 직접 설정할 일이 없습니다 — SRT는 프레임 번호가 아니라 실제 밀리초(HH:MM:SS,mmm)를 저장하기 때문입니다. 다만 드롭프레임이 존재하는 이유 자체가 자막 드리프트를 일으키는 그 1000/1001 간극입니다. 내보내기 도구가 29.97 fps 영상을 30 fps로 취급해 SRT를 찍어냈다면 0.1% 드리프트가 생기고, 위의 30 → 29.97 변환으로 고칠 수 있습니다.

자막을 시프트해야 하나요, 프레임레이트를 변환해야 하나요 — 어떻게 구분하죠?

2점 테스트를 하세요. 영상 맨 앞에서 또렷한 대사 한 줄을 골라 자막이 음성과 얼마나 떨어졌는지 확인하고, 맨 뒤에서도 똑같이 확인합니다. 양쪽 오차가 같으면(예: 전체적으로 약 2초 늦음) 일정한 오프셋 — 시프터를 쓰세요. 시작에선 작고 끝에선 크면(또는 반대면) 드리프트 — 프레임레이트 변환기를 쓰세요. 드물게 둘 다 있다면, 먼저 변환기로 드리프트를 잡고 남은 일정 오프셋을 시프터로 미세 조정합니다.