쇼츠·릴스에 단어 단위 카라오케 자막 넣는 방법
쇼츠, 릴스, 틱톡에 단어 단위 카라오케 자막을 넣는 법이에요: 단어 타이밍이 어디서 오는지, 하이라이트가 밀리는 이유, 그리고 Whisper+FFmpeg부터 Sablate 앱까지 세 가지 방법을 다뤄요.
단어 단위 자막에는 일반 자막 파일에는 없는 것 하나가 필요해요: 모든 단어마다 붙는 타임스탬프예요. 이건 Whisper 같은 음성 인식기에서 얻고, 말하는 단어를 어떻게 눈에 띄게 할지 — 색상 변화, 박스, 채우기, 한 단어씩 보여주기 중에서 — 고른 다음 자막을 영상에 구워 넣으세요.
여기서는 구워 넣기가 선택이 아니에요. 쇼츠, 릴스, 틱톡은 자막 파일을 아예 받지 않으니 하이라이트가 픽셀 안에 살아야 해요. 아래에서는 단어 타이밍이 어디서 오고 왜 밀리는지, 이 효과를 넣는 세 가지 방법 — 그중 하나는 무료예요 — 그리고 조용히 싱크를 깨뜨리는 수정들을 다뤄요.
단어 단위 자막에 단어 타임스탬프가 필요한 이유
일반 자막 큐에는 타임스탬프가 두 개예요: 줄이 나타나는 시점과 사라지는 시점이죠. 가만히 있는 줄이라면 그걸로 충분해요. 하지만 카라오케 하이라이트는 줄 안의 모든 단어마다 시작과 끝이 필요한데, 표준 .srt에는 그걸 담을 자리가 없어요.
Whisper는 단어 타이밍을 두 번째 단계에서 만들어요. 텍스트를 확정한 다음, 각 단어를 실제로 그 단어를 만들어냈을 가능성이 가장 높은 오디오 구간에 맞춰 정렬하는데, openai-whisper 명령줄 도구는 이 옵션을 여전히 실험적이라고 표시해요. 이 타이밍은 하이라이트를 움직이기에는 충분하지만 무조건 믿을 정도는 아니에요 — 그리고 하이라이트가 어떻게 동작할지를 좌우하는 특이한 습성도 하나 딸려 있어요.
인접한 단어들은 경계를 정확히 공유하는 경우가 많아요. Whisper 모델 비교를 위해 살펴본 클립에서는 단어 사이 간격 177개 중 172개가 정확히 0초였어요. 실제로 정지 구간이 있는 곳에서는, 도구가 그 사이에 하이라이트를 어떻게 처리할지 정해야 해요:
- 말하는 단어만 밝히기. 정지 구간마다 하이라이트가 꺼지고, "a"나 "it" 같은 짧은 단어는 한두 프레임만 반짝이다 사라져요. Whisper 자체 하이라이터가 이 방식이에요: 모든 간격에 강조 없는 평범한 줄을 그대로 써넣어요.
- 다음 단어가 시작할 때까지 각 단어를 계속 밝혀두기. 하이라이트가 절대 꺼지지 않고, 모든 단어가 눈에 들어올 만큼 충분히 화면에 남아 있어요. 대부분의 자막 앱이 이 방식으로 동작하고, 숏폼 영상 시청자에게 익숙한 방식이기도 해요.
두 번째 방식은 편집에도 더 잘 견뎌요. 단어 구간이 큐의 첫 단어부터 마지막 단어까지 빈틈없이 전부 덮기 때문이에요.
카라오케 자막 네 가지 스타일
"카라오케"는 서로 다른 네 가지 스타일을 아우르는 말이라서, 도구를 고르기 전에 원하는 게 어떤 건지 알아두면 도움이 돼요:
| 스타일 | 시청자가 보는 것 | 흔히 부르는 이름 |
|---|---|---|
| 색상 | 말하는 단어만 색이 바뀌고 나머지는 흰색 유지 | Hormozi 스타일 자막 |
| 박스 | 말하는 단어 뒤에 색 박스 표시 | 박스 또는 필 하이라이트 |
| 채우기 | 단어가 말해질 때마다 색이 바뀌고 유지 | 클래식 카라오케 스윕 |
| 한 단어 | 말하는 단어만 크고 중앙에 표시 | 한 단어 자막 |
색상과 박스는 인물이 말하는 영상에 가장 잘 어울려요. 채우기는 가사 영상 느낌이에요. 한 단어는 넷 중 가장 강렬한 방식이에요: 훅으로는 강력하지만 1분 내내 보면 피곤해져요.
단어 단위 자막을 넣는 세 가지 방법
- Whisper와 FFmpeg — 무료, 로컬, 명령줄. 단순한 하이라이트, 완전한 제어, 약간의 설정.
- 영상 편집기의 자막 템플릿 — CapCut이나 DaVinci Resolve Studio. 편집기 안에만 들어가면 클릭 한 번이면 되지만, 약관은 서로 달라요.
- 데스크톱 자막 앱 — Sablate. 프리셋, 세로 프레임, 구워 넣기까지 내 컴퓨터의 창 하나에서 전부.
방법 1: Whisper와 FFmpeg (무료, 완전 로컬)
Python과 FFmpeg가 설치돼 있고 PATH에 등록돼 있어야 해요. 모든 과정이 내 컴퓨터에서 실행되고, Whisper 모델은 처음 사용할 때 한 번만 다운로드돼요.
- Whisper를 설치하세요:
pip install -U openai-whisper
- 단어 타임스탬프와 하이라이트 옵션을 켜고, 큐당 세 단어로 전사하세요:
whisper clip.mp4 --model turbo --word_timestamps True --highlight_words True --max_words_per_line 3 --output_format srt
이러면 clip.srt가 만들어지는데, 여기서는 단어마다 자기만의 큐를 갖고, 말하는 단어는 <u> 태그로 감싸여요.
- 원한다면 밑줄을 색상으로 바꾸세요. FFmpeg는 SRT 파일 안의
<font color>태그를 인식하니, 찾아 바꾸기만 하면 돼요 (macOS와 Linux, 또는 Windows의 Git Bash에서):
sed -e 's/<u>/<font color="#FFE900">/g' -e 's#</u>#</font>#g' clip.srt > karaoke.srt
- 구워 넣으세요:
ffmpeg -i clip.mp4 -vf "subtitles=karaoke.srt:force_style='FontName=Arial,FontSize=16,Outline=2,MarginV=60'" -c:a copy clip-captioned.mp4
이 숫자들은 한 가지 이유로 설명돼요. FFmpeg가 SRT를 구워 넣을 때는 먼저 텍스트를 가상의 384×288 캔버스 위에 배치하기 때문에, FontSize와 MarginV는 내 영상의 픽셀이 아니라 이 288 단위를 기준으로 측정돼요. MarginV=60은 줄을 화면 아래에서 대략 5분의 1 높이만큼 올려서 쇼츠와 릴스 인터페이스를 피하게 해줘요. Windows에서 FFmpeg가 자막 파일을 찾을 수 없다고 하면 경로를 이스케이프해야 하는데, 구워 넣기 가이드에서 그 해결법을 다뤄요.
솔직한 한계도 있어요: 밑줄이나 단순한 색상 변화만 가능하고 박스나 팝 효과는 없고, 정지 구간에서는 하이라이트가 꺼져요. 편집도 까다로워요. 모든 단어가 줄 전체를 담은 자기만의 큐라서, 세 단어짜리 줄에서 이름 하나가 틀리면 그 오타가 최소 세 개의 큐에 그대로 남아요. SRT를 생성하기 전에 대본을 교정하세요, 생성한 다음이 아니라요.
방법 2: 영상 편집기의 자막 템플릿
이미 이 도구들 중 하나로 편집하고 있다면, 단어 하이라이트는 템플릿 하나만 적용하면 끝이에요.
CapCut. 데스크톱이든 휴대폰이든 자동 자막을 생성한 다음, 단어 하이라이트가 있는 자막 템플릿을 적용하세요. 다만 조건이 두 가지 따라와요. 오디오는 CapCut 쪽에서 처리되는데, 개인정보 처리방침에는 자막 생성 등을 위해 "생성, 가져오기 또는 업로드 시점의 사전 업로드를 통해" 콘텐츠를 수집할 수 있다고 나와 있어요. 그리고 CapCut 고객센터는 자동 자막을 Pro 전용 기능을 포함할 수 있는 기능으로 안내하는데, Pro 기능을 쓴 프로젝트는 내보내기에 구독이 필요해요.
DaVinci Resolve Studio. Timeline → AI Tools → Create Subtitles from Audio가 내 컴퓨터에서 바로 전사해줘요. Resolve 20부터는 Animated 타이틀에 Word Highlight 템플릿이 포함돼 있어요: 이걸 자막 트랙 헤더로 끌어다 놓고 Inspector에서 색상, 폰트, 속도를 정하면 돼요. 자동 자막은 Studio 전용 기능이에요 — $295 일회성 — 전사는 기본으로 14개 언어를 지원하고, 추가 다운로드로 더 늘릴 수 있어요. 이미 Studio를 갖고 있다면 이 방법이 이 글에서 가장 깔끔한 선택이에요.
방법 3: 데스크톱 자막 앱
데스크톱 자막 앱은 전사, 교정, 스타일 선택, 세로 프레임 맞추기, 렌더링까지 이 모든 작업을 내 컴퓨터의 창 하나에서 처리해요.
Sablate에는 Hormozi, Beast, Reels, One Word, Karaoke, Pop까지 여섯 가지 단어 하이라이트 프리셋이 있어서 위의 네 가지 스타일을 모두 다루고, Word-by-word highlight 스위치를 켜면 다른 어떤 스타일에도 이 효과를 더할 수 있는데 모드는 Color, Box, Fill, Word 중에서 골라요. 프리셋에 쓰인 자막 폰트(Montserrat ExtraBold, Anton, Bangers, Bebas Neue, Archivo Black)는 앱 안과 렌더러 안에 함께 들어 있어서, 구워 넣은 결과물이 미리보기와 똑같은 글꼴로 나와요. 폰트가 없는 것도 내보낸 자막이 편집기와 다르게 보이는 흔한 이유 중 하나예요.
타이밍은 이 글 맨 위에서 설명한 규칙을 그대로 따라요. 각 단어는 다음 단어가 시작할 때까지 계속 밝혀져 있어서, 정지 구간에서도 하이라이트가 꺼지지 않아요. 오타를 고쳐도 단어 수만 그대로면 기록된 타이밍이 유지되고, 단어를 추가하거나 빼면 그 줄만 추정 타이밍으로 되돌아가요. 구워 넣기는 평평한 오버레이로 찍히는 게 아니라 미디어 플레이어가 쓰는 자막 렌더러인 libass로 그려지고, 소스를 자르거나 블러 처리한 사본으로 채워서 9:16, 1:1, 16:9로 렌더링돼요.
다른 방법들보다 한 걸음 더 나아가는 지점은 언어예요. 각 번역 레이어가 자기만의 스타일과 자기만의 문자 폰트를 가지기 때문에, 다국어 작업 흐름에서 설명하듯 하나의 전사에서 같은 쇼츠를 영어, 스페인어, 한국어 카라오케 자막으로 그대로 내보낼 수 있어요. 번역 레이어의 타이밍은 실측이 아니라 추정값인데, 아무도 그 단어들을 실제로 말한 적이 없기 때문이고, 앱도 스위치 옆에 이 사실을 알려줘요.
단어 단위 스타일은 Pro 기능이에요, $29 한 번의 결제로요. 무료 요금제는 모든 프리셋을 미리 볼 수 있고, 다른 스타일은 작은 워터마크와 함께 구워 넣을 수 있어요.
어떤 방법을 써야 할까요?
| Whisper와 FFmpeg | CapCut | DaVinci Resolve Studio | Sablate | |
|---|---|---|---|---|
| 가격 | 무료 | 무료 등급, Pro 구독 | $295 일회성 | $29 일회성 |
| 오디오가 내 기기 밖으로 나감 | 아니요 | 네, 자동 자막에 한해 | 아니요 | 아니요 |
| 하이라이트 형태 | 밑줄 또는 색상 | 템플릿 라이브러리 | Word Highlight 템플릿 | 색상, 박스, 채우기, 한 단어 |
| 완전한 영상 편집기 | 아니요 | 네 | 네 | 아니요 |
| 휴대폰에서 실행 | 아니요 | 네 | 아니요 | 아니요 |
| 세로 9:16 출력 | 추가 필터로 | 네 | 네 | 네, 자르기 또는 블러 |
이 표에서 두 줄은 Sablate에 불리해요: 영상 편집기가 아니고, 휴대폰에서 실행되지도 않아요. 휴대폰으로 자르고 음악을 넣고 바로 게시한다면, 데스크톱 자막 앱은 지름길이 아니라 추가 단계가 돼요.
"클립 하나뿐이고, 터미널도 편해요." Whisper와 FFmpeg예요. 무료에 로컬이고, 색상 변화 하이라이트 정도면 충분히 좋아요.
"이미 CapCut으로 편집하고 매일 올려요." 그대로 쓰세요. 템플릿이 핵심이고, 어차피 Pro 요금을 낸다면 비용 논쟁은 의미가 없어져요.
"DaVinci Resolve Studio로 편집해요." Word Highlight를 쓰세요. 라이선스도 이미 있고 전사도 로컬에 남아요.
"영상이 제 컴퓨터 밖으로 나가면 안 돼요." CapCut만 빼고 뭐든 괜찮아요. 오프라인 자막 생성기에서 로컬 대안들을 더 깊이 비교해요.
"같은 쇼츠를 세 개 언어로 올려요." Sablate예요: 전사 하나에 언어별 카라오케 스타일을 입히고, 번역본에는 추정 타이밍이 붙어요.
"뮤직비디오라서 음절 단위 타이밍이 필요해요." 무료인 Aegisub예요. 카라오케 모드에서 ASS \k 태그를 음절 하나하나 수동으로 맞추는데 — 느리지만 가사에는 여전히 최고의 결과물이에요. 카라오케 타이밍을 담을 수 있는 일반적인 자막 형식은 ASS 형식이 유일해요.
단어 단위 자막의 싱크를 유지하는 방법
하이라이트의 품질은 그 밑에 깔린 단어 타이밍만큼만 좋을 수 있고, 몇 가지 습관이 그 타이밍을 온전하게 지켜줘요:
- 스타일을 입히기 전에 먼저 교정하기. 타이밍은 인식된 단어에 속해 있어요. "there"를 "their"로 바꾸는 것처럼 길이가 같은 수정은 타이밍을 유지하지만, 줄을 통째로 다시 쓰면 타이밍을 잃어요.
- Whisper에 이름을 미리 알려주기. Whisper는 전사에 편향을 주는 짧은 이름·용어 프롬프트를 받을 수 있어요:
--initial_prompt옵션이나 Sablate의 Defaults → Custom vocabulary예요. 처음부터 이름 철자가 맞으면 타이밍을 흔드는 수정이 아예 필요 없어져요. 이건 보장이 아니라 편향일 뿐이니, 그래도 이름은 다시 확인하세요. - 폰트를 줄이지 말고 긴 큐를 나누기. 세로 영상에서는 서너 단어짜리 한 줄은 하이라이트가 움직이는 동안 읽을 수 있지만, 두 줄 꽉 찬 텍스트는 못 읽어요.
- 타이밍을 다시 맞춘 뒤에는 재생해 보기. 큐의 가장자리를 드래그해도 보통 그 안의 단어 타이밍은 그대로 남아서, 새 가장자리에 가장 가까운 단어들이 압축돼요. 살짝 조정한 다음 큐를 한 번 재생해서 확인하세요.
- 미리보기뿐 아니라 렌더링 결과도 확인하기. 업로드하기 전에 첫 큐, 마지막 큐, 가장 빠른 구간을 재생해 보세요.
단어 단위 자막은 스타일을 입은 타이밍 문제예요. 깨끗한 단어 타임스탬프를 먼저 확보하고, 수정은 길이를 그대로 유지한 채로 하고, 스타일은 그다음에 고르세요. 프리셋과 세로 프레임, 여러 언어까지 한곳에서 원한다면 Windows나 Mac용 Sablate를 다운로드해서 쇼츠 하나를 직접 돌려보세요.