콘텐츠로 이동

참조음성 준비

제로샷 클로닝에서 결과가 좋고 나쁨을 가르는 건 모델보다 참조 클립입니다. 짧고 깨끗한 몇 초가 길고 지저분한 녹음보다 낫습니다. “내 목소리 녹음할래” 또는 “참조음성 만들어줘”라고 하면 voice-reference-prep이 진입점입니다.

  • 포맷은 WAV, 48kHz에 24-bit, 모노를 권합니다. 최소한 24kHz에 16-bit는 되어야 합니다.
  • 조용한 방에서 마이크와 15에서 20센티미터 거리를 두고 녹음합니다. 팝필터가 있으면 좋고, 에어컨이나 키보드 소리는 빼야 합니다.
  • 뉴스나 책 한 단락을 차분하고 일정한 톤과 속도로 3분에서 5분 낭독합니다. 감정 기복은 적을수록 안정적입니다.
  • 합성하려는 언어로 녹음합니다. 한국어 결과를 원하면 한국어로 읽습니다. 한국어와 영어를 자주 섞어 쓴다면 두 언어가 섞인 참조도 쓸모가 있습니다.

이 몇 분 중에서 가장 깨끗한 구간만 클립으로 뽑습니다. 전체를 다 쓰지 않습니다.

모델마다 원하는 참조 길이가 다릅니다. 너무 길면 오히려 불안정해지는 모델도 있어서, 요구에 맞춰 자릅니다.

모델권장 참조 길이
CosyVoice2, F5-TTS약 3초
GPT-SoVITS약 5초, 또는 1분 few-shot 파인튜닝
XTTS-v2약 6초, 10에서 30초면 더 안정
Chatterbox약 5에서 10초
Fish-Speech약 10에서 30초

무음과 노이즈 구간을 빼고 발화 구간에서 목표 길이를 잘라냅니다. 간단하게는 ffmpeg의 silencedetect로 무음 경계를 찾고 좋은 구간을 고릅니다.

Terminal window
# 무음 경계를 찾아 발화 구간을 파악
ffmpeg -i take.wav -af silencedetect=noise=-34dB:d=0.4 -f null - 2>&1 | grep silence_
# 좋은 구간을 잘라 24kHz 모노로 정규화
ffmpeg -i take.wav -ss 00:01:12 -t 8 -ac 1 -ar 24000 ref_00.wav

후보를 여럿 만들어 듣고 대표 하나를 고릅니다. 엔진에 따라 클립과 짝을 이루는 전사 텍스트를 같이 주면 품질이 올라갑니다.

클립에 배경음이나 에코, 클리핑이 없는지 파형과 귀로 확인합니다. 시작과 끝의 숨소리나 잡음은 트림하고, 24kHz 모노로 정규화됐는지 ffprobe로 확인합니다.

참조음성은 개인 생체정보입니다

섹션 제목: “참조음성은 개인 생체정보입니다”

이 부분은 지켜야 하는 원칙입니다. 목소리는 개인 생체정보라, 하네스는 다음을 강제하도록 설계돼 있습니다.

  • 클립 경로나 전사, 화자 식별자를 로그에 남기지 않습니다.
  • 참조음성은 프로젝트 로컬의 voice_refs/에만 두고 커밋하지 않습니다. .gitignore가 이 폴더와 오디오 파일을 막습니다.
  • 어떤 제3자 서비스에도 업로드하지 않습니다. 로컬과 오프라인 원칙과 같은 선입니다.

참조 클립이 준비됐으면 문서에서 음성까지로 갑니다. 문서를 추출하고 청킹해 당신의 목소리로 합성한 뒤 하나로 조립합니다.