Communitygithub.com

memex-lab/product-launch-video-skill

Google Gemini TTS를 사용하여 텍스트에서 음성을 생성합니다. 음성 해설, 내레이션, 팟캐스트 또는 모든 텍스트 음성 변환 작업에 사용하세요. 70개 이상의 언어, 스타일/감정 제어(자연어 프롬프트), 30개의 사전 제작된 음성을 지원합니다.

product-launch-video-skill란 무엇인가요?

이 스킬은 Google의 Gemini TTS 모델을 활용하여 텍스트에서 자연스럽고 표현력 있는 음성을 생성하는 데 사용됩니다. 70개 이상의 언어와 30개의 사전 제작된 음성을 지원하며, `--director-notes` 플래그를 통해 스타일, 속도, 억양을 자연어로 제어할 수 있습니다. 특히 여러 개의 오디오 세그먼트를 생성할 때 음성 일관성을 유지하는 것이 핵심 기능입니다. Gemini TTS는 각 API 요청 간에 음성 일관성을 보장하지 않지만, 이 스크립트는 모든 세그먼트를 하나의 프롬프트에 결합하고, 단일 API 호출로 연속 오디오를 생성한 다음, ffmpeg의 silence detection을 사용하여 각 세그먼트로 분할함으로써 이 문제를 해결합니다. 또한 적응형 임계값을 사용하여 무음 감지 정확도를 높이고, 필요시 더 빠른 말하기 속도로 오디오를 재생성하여 세그먼트 간 구분을 명확히 합니다. Claude Code, Cursor 등의 AI 에이전트에서 사용할 수 있으며, Node.js 18+, ffmpeg 및 `@google/genai` npm 패키지가 필요합니다. 주요 사용 사례로는 제품 출시 비디오 음성 해설, 내레이션, 팟캐스트 제작 등이 있습니다.

지원 대상~Claude Code~Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/memex-lab/product-launch-video-skill/tree/main/skills/gemini-tts

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Gemini 텍스트 음성 변환

Google Gemini TTS를 사용하여 텍스트에서 자연스럽고 표현력 있는 음성을 생성합니다. 70개 이상의 언어, 30개의 사전 제작된 음성, 자연어 프롬프트 및 오디오 태그를 통한 스타일 제어를 지원합니다.

요구 사항: Node.js 18+, ffmpeg, @google/genai npm 패키지, GEMINI_API_KEY 환경 변수.

사용 가능한 스크립트

  • scripts/generate-tts.mjs — 단일 요청 일관성, 무음 기반 분할, 자동 트리밍을 지원하는 올인원 TTS 생성기입니다.

빠른 시작

단일 텍스트 음성 변환

npm install @google/genai
GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
  --text "안녕하세요, 저희 제품에 오신 것을 환영합니다!" \
  --output-dir public/vo \
  --voice Kore

여러 세그먼트 음성 해설 (일관된 음성)

segments.json 파일을 생성합니다:

[
  { "id": "intro", "text": "저희 제품 출시에 오신 것을 환영합니다." },
  { "id": "features", "text": "여러분이 좋아하실 세 가지 기능을 소개합니다." },
  { "id": "close", "text": "지금 저희 웹사이트에서 시작해보세요." }
]

실행:

GEMINI_API_KEY=your-key node scripts/generate-tts.mjs \
  --segments segments.json \
  --output-dir public/vo \
  --voice Kore \
  --director-notes "톤: 따뜻함, 자신감, 영감. 스타일: 보컬 미소를 머금은 전문 내레이터. 억양: 중립 미국 영어. 속도: 적당함."

출력 (JSON to stdout):

{
  "success": true,
  "segments": [
    { "id": "intro", "file": "public/vo/vo-intro.mp3", "duration": 3.25 },
    { "id": "features", "file": "public/vo/vo-features.mp3", "duration": 4.10 },
    { "id": "close", "file": "public/vo/vo-close.mp3", "duration": 2.80 }
  ],
  "totalDuration": 10.15,
  "fullAudioFile": "public/vo/vo-full.wav"
}

스크립트 옵션

플래그기본값설명
--segments FILE—[{id, text}] 세그먼트 정의가 포함된 JSON 파일
--text TEXT—생성할 단일 텍스트 (--segments 대안)
--output-dir DIR—오디오 파일 출력 디렉토리 (필수)
--voice NAMEKore사전 제작된 음성 이름 (Voices 표 참조)
--model NAMEgemini-3.1-flash-tts-previewGemini TTS 모델 ID
--director-notes TEXT—연기 가이드: 스타일, 속도, 억양, 호흡, 발음. 성별/연령은 제어하지 않습니다 (--voice 사용).
--retries N3API 오류 시 최대 재시도 횟수
--trim / --no-trim--trim세그먼트 경계에서 무음 제거
--format FORMATmp3출력 형식: mp3 또는 wav

종료 코드

코드의미
0성공
1필수 인수 또는 환경 변수 누락
2재시도 소진 후 API 오류
3ffmpeg 미설치 또는 처리 실패
4파일 I/O 오류

작동 방식 (다중 세그먼트)

Gemini TTS는 별도의 API 요청 간에 음성 일관성을 보장하지 않습니다. 스크립트는 다음 방법으로 이 문제를 해결합니다:

  1. 모든 세그먼트를 [3초 일시 정지] 마커가 포함된 하나의 프롬프트로 결합
  2. 단일 API 호출로 하나의 연속 오디오 파일 생성
  3. 적응형 임계값(시작: noise=-35dB, d=1.5s, 점진적으로 완화)을 사용하여 ffmpeg silencedetect로 무음 간격 감지. 정확히 일치하는 항목이 있으면 직접 사용합니다. 임계값 점프가 발생하면(너무 적음 → 너무 많음) 더 빠른 말하기 속도로 오디오를 재생성하여 세그먼트 간 무음을 더 뚜렷하게 만든 후 감지를 재시도합니다.
  4. 무음 중간 지점에서 분할하여 개별 세그먼트 파일 생성
  5. 각 세그먼트에서 잔여 무음 패딩(~1.5s/측면)을 제거하고 0.15s의 호흡 공간 유지

모델

모델최적 용도
gemini-3.1-flash-tts-preview최신, 가장 제어 가능, 200개 이상의 오디오 태그 (기본값)
gemini-2.5-flash-preview-tts빠름, 우수한 품질, 일반 용도
gemini-2.5-pro-preview-tts최고 품질, 복잡한 연기

음성

30개의 사전 제작된 음성:

음성성별특성음높이
Achernar여성부드러움높음
Achird남성친근함중저음
Algenib남성거친낮음
Algieba남성매끄러움낮음
Alnilam남성단호함중저음
Aoede여성경쾌함중간
Autonoe여성밝음중간
Callirrhoe여성편안함중간
Charon남성정보 전달낮음
Despina여성매끄러움중간
Enceladus남성숨 쉬는 듯한낮음
Erinome여성또렷함중간
Fenrir남성흥분됨중저음
Gacrux여성성숙함중간
Iapetus남성또렷함중저음
Kore여성단호함중간
Laomedeia여성경쾌함높음
Leda여성젊음높음
Orus남성단호함중저음
Puck남성경쾌함중간
Pulcherrima남성적극적중간
Rasalgethi남성정보 전달중간
Sadachbia남성활기참낮음
Sadaltager남성지식이 풍부함중간
Schedar남성고름중저음
Sulafat여성따뜻함중간
Umbriel남성편안함중저음
Vindemiatrix여성부드러움중간
Zephyr여성밝음높음
Zubenelgenubi남성캐주얼중저음

감독의 노트 (--director-notes)

선택한 음성에 대한 연기 가이드입니다. 중요한 것만 정의하세요. 과도한 지정은 모델의 창의성을 제한하고 결과를 악화시킬 수 있습니다.

가장 일반적인 세 가지 지시 사항은 스타일, 속도, 억양이지만, 연기와 관련된 모든 사용자 지정 지시 사항을 포함할 수 있습니다.

  • 스타일 — 감정적 특성과 전달 특성. 설명적으로 작성하세요: "전염성 있는 열정 — 듣는 사람이 신나는 일에 참여하고 있다고 느껴야 함"이 단순히 "energetic"보다 더 효과적입니다. 특성을 계층화하고 "보컬 미소"와 같은 음성 해설 업계 용어를 사용할 수 있습니다.
  • 속도 — 전반적인 속도와 리듬 변화. "가능한 한 빠르게 말하기"부터 "매우 느리고 유연하게, 단어가 서로 번지며, 긴급함이 전혀 없음"까지 다양할 수 있습니다.
  • 억양 — 구체적으로 지정하세요. "영국 크로이던에서 들을 수 있는 영국 영어"가 "영국 억양"보다 훨씬 효과적입니다.
--director-notes "스타일: 열정적이고 건방진 GenZ 뷰티 유튜버. 속도: 매우 빠름, 숏폼 비디오 인플루언서처럼 빠른 전달. 억양: 라구나 비치 출신의 사우스 캘리포니아 밸리 걸."

오디오 태그

세그먼트 텍스트에 인라인 [대괄호]를 사용하여 단어별 제어를 할 수 있습니다. 감독의 노트를 로컬에서 재정의합니다.

[whispers] [shouting] [excited] [serious] [short pause] [laughs] [very fast] [very slow] [sarcastic] [curious]

창의적인 태그도 작동합니다: [like dracula], [whispering conspiratorially]

예시: "[excited] 이것이 모든 것을 바꿉니다! [short pause] 어떻게 하는지 보여드리겠습니다."

참고 자료

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬