4대 생성기술의 두 번째, '오디오 생성'입니다. 6교시 클라우드 TTS를 완전 오프라인으로 대체합니다. 우리는 한국어 발음·억양이 자연스러운 Qwen 0.6B TTS(약 4GB)를 권장 기준 모델로 삼고, 더 가볍고 빠른 Kokoro-82M(약 2~3GB) 등과 비교하며 '가벼움·속도 vs 한국어 음질 vs 기능(음성복제)'의 트레이드오프를 판단합니다.
오디오 생성: 로컬 TTS(Qwen 0.6B TTS)와 음성 모델 비교
📚1단계: 주요 개념 설명
로컬 Qwen 0.6B TTS로 대사를 자연스러운 한국어 음성 파일(.wav)로 만들고, Kokoro·Piper·Chatterbox와 크기·속도·음질·기능을 비교해 한국어 쇼츠 나레이션에 Qwen 0.6B TTS가 왜 적합한지 근거로 고른다.
오디오 생성 — 대본에 목소리를 입히다
- 4대 생성기술의 두 번째는 '오디오'입니다. 대본의 나레이션을 음성 파일로 만듭니다.
- 6교시에서 쓴 클라우드 TTS를 이번엔 완전 오프라인·무료 로컬 모델로 대체합니다.
- 여기서 만든 음성의 '길이'가 나중에 각 장면 이미지의 노출 시간을 결정합니다.
🛠️2단계: 따라하기 실습
로컬 Qwen 0.6B TTS로 음성을 만든 뒤, OpenAI 호환 API(/v1/audio/speech)로 감싸 웹앱의 음성 기능을 '주소만' 로컬로 바꿔 실제로 들어봅니다. 강사 시연을 Kiro로 따라 하고, 막히면 완성 코드를 붙여넣으세요.
음성 저장 + 로컬 API 서버 도구를 준비합니다.
- Qwen 0.6B TTS는 한국어 음질이 좋은 가벼운 로컬 모델이고, soundfile은 음성 파형(숫자 배열)을 .wav로 저장해 줍니다.
- 모델이 가벼워 설치·실행이 수월하고, 한국어 발음·억양이 자연스럽습니다.
대사 한 줄을 음성 파일로 바꿉니다.
파이썬으로 Qwen 0.6B TTS(qwen_tts의 Qwen3TTS, language=Korean)로 텍스트를 받아 음성을 만들고, soundfile로 scene_번호.wav에 저장하는 함수를 만들어줘. 모델이 반환한 샘플레이트를 함께 넘겨 정상 속도로 저장되게 해줘.
- 모델이 만든 파형과 샘플레이트를 soundfile.write에 함께 넘겨야 정상 속도로 저장됩니다.
- 샘플레이트가 어긋나면 배속·잡음이 생기니 생성값을 그대로 넘기는 습관이 중요합니다.
비교 모델 Kokoro를 직접 돌려 Qwen 0.6B TTS와 한국어 음질을 나란히 들어봅니다.
파이썬으로 Kokoro TTS(kokoro의 KPipeline)를 써서 같은 한국어 문장을 음성으로 만들어 kokoro_1.wav로 저장하는 함수를 만들어줘. lang_code와 voice를 지정하고 샘플레이트 24000으로 soundfile 저장해줘.
- Kokoro-82M(~2~3GB)은 더 가볍고 빠릅니다. 같은 한국어 문장을 Qwen 0.6B TTS와 Kokoro로 각각 만들어 번갈아 들어보세요.
- 판단 기준: 한국어 발음·억양의 자연스러움 vs 생성 속도. 우리 쇼츠는 '한국어 음질'을 기준으로 Qwen 0.6B TTS를 권장합니다.
- 두 모델을 실제로 돌려 보고 '왜 이 모델을 골랐는지'를 근거로 말할 수 있으면 성공입니다.
웹앱이 클라우드처럼 호출할 수 있도록 로컬 음성 서버를 만듭니다.
FastAPI로 POST /v1/audio/speech 엔드포인트를 만들어줘. OpenAI TTS와 같은 형식으로 input·voice를 JSON으로 받아 위 make_audio로 음성을 만들고 mp3(또는 wav) 오디오를 그대로 반환하게 해줘. CORS는 모두 허용하고, uvicorn으로 8000포트에서 실행되게 해줘.
- 요청·응답 형식을 OpenAI 규격(/v1/audio/speech)에 맞추는 게 핵심 — 그래야 웹앱 코드를 안 고치고 주소만 바꿉니다.
- uvicorn server:app --port 8000 으로 띄우면 http://localhost:8000/v1/audio/speech 가 열립니다.
웹앱 음성 기능을 클라우드 → 로컬 서버로 갈아끼워 로컬 목소리를 재생합니다.
- 이 강의의 '음성 생성 체험'에서 상단 토글을 ☁️클라우드 → 💻온프렘(로컬)으로 바꾸고 주소에 http://localhost:8000 을 넣어 생성해 보세요.
- 키 없이도 로컬 서버로 요청이 가고, 내 컴퓨터가 만든 목소리가 그대로 재생됩니다.
- 코드는 그대로 두고 '연결 대상 주소만' 바꿨다는 점 — 이것이 온프렘 전환의 핵심입니다.
우측 로컬 TTS 낭독기에서 대사를 적고 음성을 바꿔 가며 생성해 보세요. 같은 한국어 문장을 Qwen 0.6B TTS와 Kokoro로 들어 보고, 왜 우리 한국어 쇼츠엔 Qwen 0.6B TTS를 권장하는지(음질) 비교 판단합니다.
import soundfile as sf
# 소리 가중치 파형 매트릭스를 디스크에 WAV 컨테이너로 쓰기
def save_audio(wav_data, sample_rate, output_name):
sf.write(output_name, wav_data, sample_rate)
return f"{output_name} 저장 완료"💡 코딩 중 막히나요? 모범 솔루션 코드
🧩3단계: 개념 검증 퀴즈
생성 완료 후 한국어 음성이 재생되는지, 그리고 Qwen 0.6B TTS와 Kokoro를 비교해 '왜 한국어 나레이션엔 Qwen 0.6B TTS를 권장하는지'를 근거로 설명할 수 있는지 확인합니다.
Q1. 한국어 쇼츠 나레이션에 Qwen 0.6B TTS를 권장하는 근거로 옳은 것은?
Q2. '내 목소리로 더빙'처럼 음성 복제가 필요하다면 대안으로 가장 알맞은 모델은?
오프라인 한글 음성 모델(Qwen 0.6B TTS)의 WAV 파일 생성을 직접 작동해 보세요.