소개
강의 PPT를 만드는 프로젝트를 하고 있다. Claude Code + NotebookLM 로 콘텐츠→PPT 생성까지는 반 자동화했는데, 수강생 복습용 영상도 필요했다.
그래서 OpenClaw(나디아)에게 이렇게 시켜봤다: "내 목소리 30초 녹음해줄 테니까, 이걸로 슬라이드마다 나레이션 붙여서 강의 영상 만들어줘."
결론부터 말하면, 내가 한 건 30초 녹음과 지시뿐이다. 나머지는 나디아가 다 했다.
진행 방법
내가 한 것 vs 나디아(OpenClaw)가 한 것
나 (사용자)
나디아 (OpenClaw)
30초 음성 샘플 녹음
녹음 파일을 WAV로 변환
"슬라이드별 나레이션 만들어줘"
슬라이드 콘텐츠 → 구어체 나레이션 텍스트 자동 생성
"내 목소리로 음성 만들어줘"
MLX Audio + Qwen3-TTS 모델로 음성 클론 스크립트 작성 & 실행
"좀 빠르게, 자연스럽게 튜닝해줘"
속도·온도·반복 패널티 파라미터 조정해서 재생성
"이걸로 영상 만들어줘"
Google Slides → PDF → 이미지 추출 → ffmpeg로 영상 합성 스크립트 작성 & 실행
결과물 확인
피드백 반영해서 재생성
실제 대화 흐름
1단계: 음성 샘플 준비
나: "내 목소리 녹음 파일 여기 있어. 이걸로 TTS 해봐."
나디아가 한 일:
m4a → wav 변환
로컬에서 돌릴 수 있는 음성 클론 모델(MLX Audio, Qwen3-TTS) 탐색
테스트 음성 1개 먼저 생성해서 들려줌
2단계: 나레이션 텍스트 생성
나: "5회차 슬라이드 콘텐츠 보고 나레이션 텍스트 만들어줘."
나디아가 한 일:
이미 만들어둔 5회차 콘텐츠 마크다운(05_콘텐츠.md)을 읽음
슬라이드별 bullet point를 실제 수업에서 말하는 톤의 구어체로 변환
예시:
슬라이드 원본 (bullet):
- 5회차: 프롬프트 5단계 공식
- 좋은 답은 좋은 질문에서 나온다
나레이션 텍스트 (생성):
"5회차, 프롬프트 5단계 공식입니다. 좋은 답은 좋은 질문에서 나옵니다.
AI 첫걸음에서 나만의 홈페이지까지, 강사 000입니다."
3단계: 음성 클론 생성
나: "이 텍스트들로 내 목소리 음성 만들어줘."
나디아가 한 일:
Python 스크립트(tts_clone_slides.py) 작성
30초 참조 음성 + 나레이션 텍스트 → 슬라이드별 WAV 자동 생성
슬라이드 5장분 음성을 한 번에 배치 생성
사용된 핵심 코드 (나디아가 작성):
from mlx_audio.tts import load_model
model = load_model("Qwen/Qwen3-TTS-12Hz-1.7B-Base")
# 내 목소리 30초 샘플
ref_audio = "내음성.wav"
ref_text = "안녕하세요 프롬프트 5단계 공식 5회차 수업 진행하도록 하겠습니다..."
# 슬라이드별 나레이션 생성
results = list(model.generate(
text="5회차, 프롬프트 5단계 공식입니다...",
ref_audio=ref_audio,
ref_text=ref_text,
lang_code="Korean"
))
4단계: 음성 튜닝
나: "말 속도가 좀 느려. 빠르게 해주고, 좀 더 자연스럽게."
나디아가 한 일:
튜닝 스크립트(tts_clone_tuned.py) 새로 작성
speed=1.2, temperature=0.95 등 파라미터 조정
다시 생성해서 비교 청취
5단계: 영상 합성
나: "이제 슬라이드 이미지랑 음성 합쳐서 영상으로 만들어줘."
나디아가 한 일:
Google Drive API로 PPT를 PDF로 내보내기
pdf2image로 슬라이드별 PNG 이미지 추출
ffmpeg로 [PNG + WAV → MP4 세그먼트] 생성
세그먼트들을 concat해서 최종 강의 영상 완성
전체 파이프라인을 Python 스크립트(slides_to_video_v2.py)로 자동화
슬라이드 PNG + 클론 음성 WAV → ffmpeg → 세그먼트 MP4
세그먼트 1~N → ffmpeg concat → 최종 강의 영상
결과와 배운 점
결과물
강사 목소리 클론 음성 파일 (슬라이드별 WAV)
슬라이드 1~3 합본 시범 강의 영상 (MP4)
재사용 가능한 스크립트 3개 (TTS, 튜닝, 영상 합성)
배운 점
1. "시켜보는 것"이 가장 빠른 학습법이다
TTS 모델이 뭔지, ffmpeg 옵션이 뭔지 몰라도 된다. OpenClaw에게 "내 목소리로 영상 만들어줘"라고 말하면, 어떤 도구를 쓸지 알아서 판단하고 스크립트까지 짜서 실행한다. 안 되면 고치고, 느리면 튜닝하고, 이 과정이 전부 대화로 진행된다.
2. 30초 녹음이면 내 목소리를 복제할 수 있다
로컬 Mac mini(M4)에서 돌아가는 오픈소스 모델이라 클라우드 API 비용이 없다. 한번 세팅하면 무제한 생성 가능.
3. 한 번 만든 파이프라인은 계속 쓸 수 있다
5회차에서 만든 스크립트를 6회차, 7회차... 32회차까지 그대로 재사용할 수 있다. 콘텐츠만 바꾸면 음성+영상이 자동으로 따라온다.
4. 피드백 루프가 핵심이다
처음 나온 음성이 완벽하진 않았다. "좀 빠르게", "좀 자연스럽게" 같은 피드백을 주면 나디아가 파라미터를 조정해서 다시 만든다. 이 반복이 대화 안에서 바로바로 되니까, 결과물 품질을 빠르게 올릴 수 있었다.
꿀팁
음성 샘플은 평소 수업하는 톤으로 30초 녹음하면 충분하다
bullet을 그대로 읽히지 말고, "수업 톤으로 바꿔줘"라고 시켜서 구어체 나레이션을 먼저 만들어라
한 번에 전체를 만들지 말고, 슬라이드 1~2장으로 테스트 → 튜닝 → 전체 적용 순서가 좋다
도움 받은 글
MLX Audio GitHub — Apple Silicon에서 로컬 TTS 돌리기
Qwen3-TTS 모델 카드 (Hugging Face) — 음성 클론 모델
OpenClaw 문서 (docs.openclaw.ai) — 에이전트 설정 및 코딩 에이전트 연동