더빙 — ElevenLabs & Typecast 선택하기
한국어 자연스러움은 Typecast, 다국어·감정 표현은 ElevenLabs
ElevenLabs와 Typecast 두 서비스의 특징을 비교하고, 내 쇼츠에 맞는 목소리를 선택해 컷별 음성을 자동 생성합니다. 길이가 안 맞는 컷을 손보는 호흡 맞추기까지 완료합니다.
예상 소요 시간 약 55분
두 서비스 비교
| Typecast | ElevenLabs | |
|---|---|---|
| 개발사 | 네오사피엔스 (한국) | ElevenLabs (미국) |
| 한국어 품질 | ⭐⭐⭐⭐⭐ 네이티브 수준 | ⭐⭐⭐ 다국어 모델 |
| 한국어 목소리 | 100+ (성별·나이·톤 다양) | 20개 내외 |
| 감정 표현 | 보통 | 매우 풍부 |
| 가격 | 무료 플랜 있음, 월정액 | 무료 1만 자/월, 이후 유료 |
| API | REST API 제공 | REST API 제공 |
| 적합한 쇼츠 | 한국어 지식·일상 쇼츠 | 영어 혼용·감정 강조 쇼츠 |
권장: 한국어 쇼츠 → Typecast 우선, 영어·다국어 → ElevenLabs
Typecast 설정
1. 가입 및 목소리 선택
- typecast.ai 가입
- 목소리 탐색 → 카테고리(전문가·청년·중년 등)로 필터
- 미리듣기 → 마음에 드는 목소리의 Actor ID 복사
.env에 추가:
TYPECAST_API_TOKEN=여기에
TYPECAST_ACTOR_ID=여기에
2. Typecast 더빙 스크립트
6-1은 "만들어서 한 번 돌려보기", 6-1b는 "편하게 다듬기"입니다. 먼저 6-1만 하고 실행해 mp3가 나오는지 확인한 뒤 6-1b로 넘어가세요. (폴링: 완료됐는지 일정 간격으로 계속 물어보는 방식.)
scripts/dub-typecast.py를 만들어줘.
- script.json을 읽어 각 컷의 ko 텍스트를 Typecast API로 음성 변환
- 출력: voice/cut-01.mp3, cut-02.mp3 …
- API 토큰·Actor ID는 .env의 TYPECAST_API_TOKEN, TYPECAST_ACTOR_ID에서
- 시작 전에 총 글자 수와 예상 크레딧 소모를 출력하고, y를 입력해야만 실행
scripts/dub-typecast.py에 기능을 추가해줘.
- 이미 있는 mp3는 건너뛰기,
--only 5,12옵션으로 특정 컷만 재생성 - Typecast API는 작업이 끝날 때까지 시간이 걸리므로, 작업 ID를 받아 3초마다 완료 여부를 확인(폴링)
- 각 파일 생성 후 ffprobe로 길이를 재서 voice/durations.json에 기록
- 실패한 컷 번호를 모아 마지막에 출력
실행은 클로드 데스크탑 Code 탭에서 이렇게 시키세요.
scripts/dub-typecast.py를 실행해서 더빙을 만들어줘. 끝나면 실패한 컷 번호가 있는지 알려줘.
권한 요청에 뜬 명령을 읽고 수락하면 클로드가 돌리고 결과를 알려줍니다. (python3이 없다는 에러 같은 것도 클로드에게 그대로 맡기면 됩니다.)
터미널로도 할 수 있어요
python3 scripts/dub-typecast.py
python3이 없다는 에러가 나면 python scripts/dub-typecast.py로. 그래도 없으면 Microsoft Store에서 Python 3 설치.
macOS에는 python3이 기본으로 있습니다. ModuleNotFoundError가 나면 Claude가 알려주는 pip3 install ...을 실행하세요.
🧪 실습
-
voice/cut-01.mp3를 직접 재생해 목소리와 한국어 발음이 들을 만한지 확인했다 - 실행 전에 "총 글자 수·예상 크레딧"이 화면에 나왔고, 내가 y를 입력해서 시작했다
-
voice/폴더에 mp3가 컷 수만큼 있다 (개수를 셌다)
길이 점검 및 호흡 맞추기
두 서비스 모두 동일한 방법으로 확인합니다.
길이 확인
voice/durations.json을 표로 보여주고, 4.0초를 넘거나 3.0초에 못 미치는 컷을 표시해줘.
| 컷 | 글자 | 길이 | 판정 |
|---|---|---|---|
| 1 | 16 | 3.6s | ✓ |
| 5 | 19 | 4.4s | 김 |
| 9 | 11 | 2.4s | 짧음 |
호흡 맞추기 — 우선순위
1순위: 대본 다듬기 (가장 자연스러움)
5번 컷 "위에는 무려 600만 톤의 돌이 얹혀 있는데"를 "위엔 돌 600만 톤이 얹혀 있는데"로 script.json에서 고치고, 5번만 다시 더빙해줘.
2순위: 무음 패딩 (짧은 컷)
9번 컷은 2.4초라 짧아. 앞뒤에 0.5초씩 무음을 붙여 3.4초로 만들어줘.
3순위: 클립 길이를 음성에 맞추기 (7강에서 처리)
전체 길이가 60~90초를 벗어나지 않는지만 확인합니다.
🧪 실습
-
voice/durations.json을 열었거나 표로 받아, 3.0초 미만·4.2초 초과 컷 번호를 적었다 - 긴 컷 하나는 대본을 줄여, 짧은 컷 하나는 무음 패딩으로 고쳤다
- 고친 컷만 다시 들어 길이가 바뀐 것을 확인했다
이어 듣기 확인
voice/의 mp3를 번호순으로 이어 붙여 voice/preview.mp3를 만들어줘. 컷 사이에 0.3초 무음.
눈 감고 끝까지 들어보세요. 발음이 어색한 단어는:
12번 컷의 "쿠푸"를 "쿠푸 왕"으로, 3번 컷의 "2.3m"를 "2.3미터"로 고치고 그 두 컷만 다시 더빙해줘.
숫자·단위는 한글로 풀어 쓰면 두 서비스 모두 읽기가 안정됩니다.
🧪 실습
-
voice/preview.mp3를 눈 감고 끝까지 들었다 - 발음이 어색한 단어를 하나 이상 찾아 한글로 풀어 쓰고 그 컷만 다시 더빙했다
- 전체 길이가 60~100초 안인지 확인했다
더 해보기(선택): ElevenLabs로 더빙하기
한국어 품질이 Typecast보다 낮지만, 영어 혼용이나 특별한 감정 표현이 필요할 때 사용합니다.
.env에 추가:
ELEVENLABS_API_KEY=여기에
ELEVENLABS_VOICE_ID=여기에
scripts/dub-elevenlabs.py를 만들어줘.
- script.json의 ko 텍스트를 ElevenLabs API로 변환
- 모델: eleven_multilingual_v2 (한국어 품질 최적)
- 나머지 옵션은 dub-typecast.py와 동일하게
한국어 품질이 어색하면 voice_settings의 stability를 0.7 이상으로 올려보세요.
두 서비스를 컷별로 다르게 쓰기
script.json의 각 컷에 "tts" 필드를 추가해줘. 값: "typecast" 또는 "elevenlabs". dub.py를 만들어서 컷마다 지정된 서비스를 자동으로 골라 실행해줘.
예: 일반 나레이션은 Typecast, 숫자 강조 컷은 ElevenLabs.
오늘의 체크리스트
- Typecast(기본) 또는 ElevenLabs 중 하나를 선택하고 .env를 설정했다
-
voice/cut-01.mp3~cut-NN.mp3가 생성됐다 - durations.json에서 모든 컷이 3.0~4.2초 안에 있다
- preview.mp3를 끝까지 듣고 발음 문제를 수정했다
- 커밋했다 (
voice/는.gitignore에 추가)
다음 강의
7강, 드디어 합성. 클립 + 음성 + BGM + 자막을 9:16 한 편으로.