Communitygithub.com

음성 및 음향 효과 생성기

텍스트를 음성으로 변환(TTS)하고, 나레이션/음성 해설을 추가/교체/동기화하며, 맞춤 음향 효과(SFX)를 생성합니다.

음성 및 음향 효과 생성기란 무엇인가요?

이 스킬은 개발자나 AI 에이전트가 비디오 편집 워크플로우에서 음성 해설(TTS) 및 맞춤 음향 효과를 생성할 수 있도록 설계되었습니다. 주로 Claude Code, Cursor, Codex와 같은 AI 코딩 에이전트에서 사용되며, `submit_voice`와 `submit_sound` 같은 도구를 통해 텍스트를 오디오 에셋으로 변환하고 타임라인에 배치합니다. TTS의 경우 Doubao, ElevenLabs, MiniMax와 같은 사전 구성된 제공업체를 활용하며, 각 제공업체별로 지원하는 음성 제어 옵션(예: 감정, 속도, 강세)이 다릅니다. 중요한 점은 사용자가 기존 비디오 타임라인에 나레이션을 추가하거나 시각적 편집 후에도 기존 나레이션을 동기화해야 할 때 `references/video-sync.md` 문서를 참조하여 음성의 타이밍과 의미가 영상과 일치하도록 보장합니다. 음향 효과의 경우 먼저 내장 라이브러리를 확인하고, 적절한 효과가 없을 때만 `submit_sound`로 생성합니다. 이 스킬은 사용자 대화 언어와 합성 대상 언어를 분리하여 다국어를 지원하며, 음성 오디션 위젯을 통해 사용자가 원하는 음성을 미리 듣고 선택할 수 있습니다.

지원 대상~Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/0xsline/openchatcut/tree/HEAD/src/agent/skills/voice

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

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

문서

음성 및 음향 효과 생성기은(는) 무엇을 하나요?

음성 해설(TTS) 및 음향 효과를 생성합니다. TTS의 경우 구체적인 제공업체와 음성을 선택한 후 submit_voice를 호출하세요.

사용 시기

  • 텍스트로 음성 해설/나레이션 생성
  • 비디오를 위한 텍스트-음성(TTS) 오디오 생성
  • 기존 비디오, 타임라인, 화면 녹화, 슬라이드 애니메이션, 제품 데모, B-roll 편집, MG 설명 영상 또는 기타 시각적 시퀀스에 나레이션/음성 해설 추가, 교체 또는 재작업
  • 시각적 요소를 트리밍, 속도 변경, 이동, 재정렬 또는 교체한 후에도 기존 나레이션/음성 해설이 정렬된 상태 유지
  • 사용자가 구체적인 음성을 선택하지 않은 경우 TTS 음성 선택 항목을 제공하고 미리 듣기
  • 먼저 음향 효과(SFX) 라이브러리를 확인한 후 텍스트 설명으로 맞춤 음향 효과 생성

TTS (텍스트-음성 변환)

현재 요청에 기존 시각적 대상이 있고 사용자가 그 대상에 대해 나레이션, 음성 해설, 더빙 또는 대체 음성을 원하는 경우, 새 나레이션을 작성하거나 기존 나레이션 텍스트로 TTS를 생성하거나 오디오를 배치하기 전에 references/video-sync.md를 읽으십시오. 사용자가 명시적으로 "동기화" 또는 "영상에 맞춰"라고 말하지 않았더라도 이 작업을 수행하십시오. 시각적 대상이 존재한다는 것은 나레이션 타이밍과 의미가 화면 콘텐츠를 따라야 할 수 있음을 의미합니다. 시각적 대상이 없거나 사용자가 텍스트로부터 오디오 에셋만 원하는 경우에만 일반적인 독립형 TTS 경로를 사용하십시오.

또한 타임라인에 이미 나레이션/음성 해설이 있고 사용자가 해당 음성 해설을 유지하면서 시각적 요소를 변경하도록 요청하는 경우 references/video-sync.md를 읽으십시오. 이는 새 TTS가 필요하지 않더라도 동기화 유지 작업입니다.

submit_voice를 사용하여 TTS 오디오 에셋을 생성하세요. 현재 MCP 도구 계약은 다음과 같습니다:

  • provider는 필수입니다. 구성 가능한 선택 항목은 doubao, elevenlabs, minimax, inworld, fishaudio, speechify, openai, gemini, mistral 또는 cartesia입니다. 모든 제공업체는 옵트인 방식입니다. 기능 프롬프트에 구성된 것으로 표시된 제공업체만 사용하십시오.
  • voiceId는 필수이며 구체적이고 제공업체별로 다릅니다. 유일한 예외는 의도적인 MiniMax timbreWeights 혼합이며, 이 경우 voiceId는 비어 있어야 합니다. 카탈로그를 혼합하지 마십시오.
  • references/voices.md의 큐레이팅된 카탈로그는 Doubao, ElevenLabs 및 MiniMax만 다룹니다. 다른 제공업체는 OpenChatCut에 번들 프리셋이나 샘플 카탈로그가 없습니다. 사용자 또는 해당 제공업체 계정에서 구체적인 음성 ID를 요청하십시오. 프리셋이나 /voice-samples/... URL을 절대 임의로 만들지 마십시오.
  • AI SDK 기반 필드는 제공업체별로 다릅니다: OpenAI는 modelId, speed, outputFormat 및 instructions를 지원합니다. Gemini는 modelId, outputFormat 및 instructions를 지원합니다. Mistral은 modelId 및 outputFormat을 지원합니다. Cartesia는 modelId, speed, languageCode 및 outputFormat을 지원합니다. 지원되지 않거나 요청되지 않은 필드는 생략하십시오.
  • Inworld, Fish Audio 및 Speechify는 voiceId와 선택적 modelId만 허용합니다. 이러한 제공업체에 표현, 속도, 언어 또는 출력 제어를 전달하지 마십시오.
  • submit_voice는 오디오 에셋만 생성합니다. 타임라인 배치, 교체, 트리밍 및 정렬은 나중에 타임라인 도구로 수행됩니다.
  • 긴 나레이션의 경우 여러 번의 submit_voice 호출이 유용할 수 있습니다. 워크플로우가 별도로 시간이 지정되거나 배치된 음성 클립의 이점을 얻을 수 있는 경우 자연스러운 멈춤, 문장 그룹 또는 스크립트 비트 경계에서 분할하십시오.
  • Doubao는 speedRatio, loudnessRatio, pitch, emotion, emotionScale, performancePrompt 및 explicitDialect를 지원하지만 모든 음성이 모든 표현 제어를 지원하는 것은 아닙니다. 사용하기 전에 references/voices.md를 확인하십시오.
  • ElevenLabs는 공식 음성 설정, 언어, 시드, 출력, 정규화, 발음 사전, 연속성, 로깅 및 지연 시간 제어를 유지합니다. MiniMax는 references/minimax-tts.md에 문서화된 전용 제어를 유지합니다.

현재 큐레이팅된 음성에 대한 Doubao 제어 지원:

  • vivi, xiaohe, yunzhou, xiaotian, naiqimengwa, yingtaowanzi, wenroumama, zhixingnv, dayi, jitangnv, liuchang, ruyayichen, morgan, qingcang, huiben, popo, yuanboxiaoshu, baqiqingshu 및 tangseng는 명시적 emotion/emotionScale, performancePrompt 및 ASMR 스타일 프롬프트 방향을 지원합니다.
  • shuanglangshaonian는 performancePrompt와 COT/QA 스타일 지시 따르기를 지원하지만 명시적 emotion/emotionScale 또는 ASMR 스타일 제어는 지원하지 않습니다.
  • explicitDialect는 vivi에서만 지원되며 dongbei, shaanxi 또는 sichuan이 될 수 있습니다.

현재 큐레이팅된 음성에 대한 ElevenLabs 제어 지원:

  • amelia, brittney, hope, jessica, arabella, jane, maria, mark, frederick, peter, james, jon, sully, david 및 alex는 모두 동일한 요청 수준 제어를 지원합니다. 모델별 지원은 여전히 ElevenLabs에서 검증합니다.
  • 이러한 제어는 특정 연기 스타일에 대한 음성별 보장이 아닙니다. 프리셋 태그/샘플을 사용하여 자연스럽게 적합한 음성을 선택한 다음, 제어를 사용하여 적당한 전달 변경을 수행하십시오.
  • ElevenLabs eleven_v3의 경우 사용자가 감정, 톤, 비언어적 신호, 억양 힌트 또는 로컬 페이싱과 같은 표현력 있는 전달을 요청할 때 인라인 오디오 태그를 사용할 수 있습니다. 공식 예제는 다음 유용한 TTS 카테고리에 적합합니다: 감정/톤 태그(예: [happy], [sad], [angry], [excited], [curious], [sarcastic], [crying], [annoyed], [appalled], [thoughtful], [surprised] 및 [mischievously]); 음성 전달 및 비언어적 신호 태그(예: [whispers], [laughs], [sighs], [exhales], [inhales deeply], [clears throat], [snorts], [swallows], [wheezing] 및 [coughs]); 페이싱/일시 정지/로컬 속도 태그(예: [slowly], [pause], [short pause], [long pause], [rushed] 및 [drawn out]); 억양/특수 연기 태그(예: [strong X accent], 예를 들어 [strong French accent], 그리고 [sings], [singing], [woo] 및 [pirate voice]). 공식 예제는 완전하지 않습니다. 사용자가 명시적으로 해당 전달을 요청하고 태그가 시각적 동작이 아닌 음성이 어떻게 들려야 하는지를 설명하는 경우 유사한 청각 태그를 시도할 수 있습니다. 영향을 주려는 짧은 구문 근처의 text에 직접 태그를 작성하십시오. 태그를 단락 전체 제어가 아닌 로컬 지침으로 취급하십시오.
  • eleven_v3의 일시 정지 및 페이싱의 경우 필요한 경우 구두점, 텍스트 구조, 더 짧은 생성 세그먼트 또는 [short pause] 및 [slowly]와 같은 로컬 오디오 태그를 사용하십시오.
// 영어 / ElevenLabs를 통한 다국어
submit_voice({
  provider: "elevenlabs",
  text: "Hello world",
  voiceId: "peter",
});

// Doubao를 통한 중국어
submit_voice({
  provider: "doubao",
  text: "你好世界",
  voiceId: "liuchang",
});

// 속도 조정 (Doubao만 해당)
submit_voice({
  provider: "doubao",
  text: "这是一段稍快的中文旁白。",
  voiceId: "liuchang",
  speedRatio: 1.5,
});

// 표현적인 Doubao 제어 사용
submit_voice({
  provider: "doubao",
  text: "这次事故提醒我们,安全永远不能侥幸。",
  voiceId: "liuchang",
  emotion: "sad",
  emotionScale: 3,
  performancePrompt: "痛心但克制,语速稍慢,像新闻专题旁白",
  pitch: -1,
  speedRatio: 0.92,
});

// ElevenLabs 전달 제어 사용
submit_voice({
  provider: "elevenlabs",
  text: "The launch changed how teams plan their daily work.",
  voiceId: "peter",
  speed: 0.95,
  stability: 0.4,
  similarityBoost: 0.8,
  outputFormat: "wav_44100",
});

// MiniMax TTS (구성된 경우) — references/minimax-tts.md 참조
submit_voice({
  provider: "minimax",
  text: "欢迎使用视频编辑助手。",
  voiceId: "female-yujie",
  speed: 1,
  name: "VO · welcome",
});

// 사용자가 정확한 계정 음성 ID를 확인한 후 Cartesia 모양.
// confirmedCartesiaVoiceId는 프리셋이 아닌 제공된 값을 나타냅니다.
submit_voice({
  provider: "cartesia",
  text: "A concise product introduction.",
  voiceId: confirmedCartesiaVoiceId,
  modelId: "sonic-3",
  speed: 1,
  languageCode: "en",
  outputFormat: "mp3",
});

생성 전 음성 오디션

사용자가 TTS가 필요하고 아직 구체적인 음성을 선택하지 않은 경우, 먼저 OpenChatCut에서 큐레이팅된 선택 항목이 있는 제공업체와 계정별 음성 ID가 필요한 제공업체를 분리하십시오.

Doubao, ElevenLabs 또는 MiniMax의 경우 옵션을 추천, 렌더링 또는 제출하기 전에 references/voices.md를 읽으십시오. 이를 큐레이팅된 프리셋 ID, 제공업체 선택, 표시 레이블, 태그 및 번들 샘플 URL의 유일한 소스로 사용하십시오. 기억, 번역된 이름 또는 광범위한 사용자 설명에서 음성 옵션을 생성하지 마십시오.

Inworld, Fish Audio, Speechify, OpenAI, Gemini, Mistral 또는 Cartesia의 경우 발명된 오디션 목록이나 샘플 URL을 제공하지 마십시오. 구성된 해당 제공업체의 구체적인 음성 ID를 사용자에게 요청하십시오. "따뜻한 여성"과 같은 광범위한 설명은 유효한 voiceId가 아닙니다.

먼저 두 가지 별도 언어를 결정하십시오:

  • 사용자 대화 언어: 사용자가 당신과 대화하는 데 사용한 언어입니다. 주변 응답, form-visual label, visual-option name 및 summary에 이 언어를 사용하십시오.
  • 대상 나레이션 언어: 합성되는 텍스트의 언어입니다. 제공업체 및 음성 카탈로그를 선택하는 데만 이 언어를 사용하십시오.

오디션 위젯의 제출 버튼은 이 빌드에서 기본 레이블로 고정되어 있습니다(submitLabel은 허용되지만 렌더링되지 않음). 질문 레이블과 옵션 레이블을 대상 나레이션 언어가 아닌 사용자 대화 언어로 유지하십시오. 예를 들어: 영어 사용자는 submit_label="Submit"을, 중국어 사용자는 submit_label="提交"을, 스페인어 사용자는 submit_label="Enviar"를 봅니다.

"help me generate ... voice over in Chinese"는 중국어 나레이션을 요청하는 영어 대화이므로 오디션 위젯 텍스트는 영어로 유지되고 음성 후보는 Doubao에서 제공됩니다.

큐레이팅된 제공업체의 경우:

  1. references/voices.md를 대상 나레이션 언어/제공업체 및 성별, 연령대, 톤, 사용 사례와 같은 명시적 요구 사항으로 필터링합니다.
  2. 모든 명시적 요구 사항과 일치하는 프리셋이 없으면 정확히 일치하는 항목이 없다고 말하고 명확한 주의 사항과 함께 가장 가까운 지원 프리셋을 제공합니다.
  3. 일치하는 큐레이팅된 프리셋 2-4개를 선택합니다.
  4. widget-forms를 로드한 다음 음성 옵션과 실제 번들 오디오 샘플과 함께 ask_followup_questions를 호출합니다.
  5. 사용자가 선택할 때까지 기다립니다.
  6. 선택한 프리셋 ID를 voiceId로 submit_voice를 호출합니다.

OpenChatCut 카탈로그가 없는 제공업체의 경우 자유 형식의 구체적인 제공업체 음성 ID를 대신 요청하십시오. media를 추가하거나 /voice-samples/... 경로를 합성하지 마십시오. 사용자가 정확한 ID를 제공/확인할 때까지 기다린 후 submit_voice를 호출하십시오.

각 큐레이팅된 오디션 옵션에 대해 value, 표시 레이블, media 및 summary를 references/voices.md의 동일한 프리셋 행에 연결하십시오. 거기에 기록된 샘플 URL만 사용하십시오. value를 프리셋 ID로, media를 일치하는 샘플 URL로 유지하십시오. name 및 summary를 사용자의 대화 언어로 작성하십시오. 대상 나레이션 언어는 제공업체/음성 카탈로그만 결정합니다. 제출 후 동일한 후보 목록에서 표시 이름을 프리셋 ID로 다시 매핑하십시오.

중국어 나레이션에 대한 영어 요청:

<widget submit_label="Submit">
  <form-visual
    id="voiceId"
    label="For Chinese voiceover, I recommend a few voices to try:"
    required="true"
  >
    <visual-option
      value="vivi"
      name="Vivi"
      media="/voice-samples/doubao-vivi.mp3"
      aspect-ratio="16:5"
      summary="Female / young / friendly, general"
    />
    <visual-option
      value="xiaohe"
      name="Xiaohe"
      media="/voice-samples/doubao-xiaohe.mp3"
      aspect-ratio="16:5"
      summary="Female / young / soft, clear"
    />
    <visual-option
      value="yunzhou"
      name="Yunzhou"
      media="/voice-samples/doubao-yunzhou.mp3"
      aspect-ratio="16:5"
      summary="Male / young / neutral, business"
    />
  </form-visual>
</widget>

중국어 나레이션에 대한 중국어 요청:

<widget submit_label="提交">
  <form-visual
    id="voiceId"
    label="我推荐这几个中文旁白音色,先试听一下:"
    required="true"
  >
    <visual-option
      value="morgan"
      name="Morgan"
      media="/voice-samples/doubao-morgan.mp3"
      aspect-ratio="16:5"
      summary="男 / 中年 / 低沉知识解说"
    />
    <visual-option
      value="zhixingnv"
      name="知性女声"
      media="/voice-samples/doubao-zhixingnv.mp3"
      aspect-ratio="16:5"
      summary="女 / 中年 / 冷静知识讲解"
    />
    <visual-option
      value="vivi"
      name="Vivi"
      media="/voice-samples/doubao-vivi.mp3"
      aspect-ratio="16:5"
      summary="女 / 年轻 / 亲切通用口播"
    />
  </form-visual>
</widget>

음향 효과

일반 편집 음향 효과(SFX)의 경우 먼저 생성하지 마십시오. 생성하기 전에 내장된 음향 효과 라이브러리를 사용하십시오:

  1. browse_library를 category:"sound-effects"와 "whoosh", "camera shutter", "notification", "censor beep" 또는 "record scratch"와 같은 쿼리로 호출합니다.
  2. 반환된 library:sound:<id>를 검사합니다.
  3. edit_item을 사용하여 fromFrame을 사운드의 앵커/편집적 순간 프레임으로 설정하여 배치합니다:
browse_library({
  category: "sound-effects",
  query: "short whoosh transition",
});

edit_item({
  adds: [
    {
      type: "audio",
      assetId: "library:sound:whoosh-short",
      fromFrame: 120,
      trackId: "A1",
    },
  ],
});

다음 경우에만 submit_sound를 사용하여 텍스트 설명으로 음향 효과를 생성하십시오:

  • 사용자가 생성된/독창적인/맞춤 사운드를 명시적으로 요청하는 경우.
  • 요청된 사운드가 기존 음향 효과 라이브러리에 비해 너무 구체적인 경우.
  • browse_library({ category:"sound-effects", query })가 적합한 일치 항목을 반환하지 않는 경우.
// 라이브러리에 적합한 일치 항목이 없는 경우 맞춤/생성된 음향 효과
submit_sound({ prompt: "A dog barking in the distance" });

// 사용자 지정 지속 시간 (0.5-22초)
submit_sound({
  prompt: "Thunder and heavy rain",
  durationSeconds: 15,
});

// 높은 프롬프트 일치율
submit_sound({
  prompt: "Sci-fi laser gun firing",
  promptInfluence: 0.8,
});

더 나은 결과를 위한 팁:

  • 구체적으로 작성하세요: "큰 소리로 짖는 개" "멍멍" 소리보다 더 나은 결과를 제공합니다.
  • 원하는 경우 지속 시간을 조정하세요.
  • 부자연스러운 아티팩트를 피하기 위해 프롬프트 영향력을 0.5-0.8 사이로 유지하는 경향이 있습니다.

수입(크레딧) 비용

submit_voice에 대한 예상 수입 비용:

  • Doubao TTS: 1,000자당 약 5,000 크레딧.
  • ElevenLabs: 1,000자당 약 10,000 크레딧.
  • MiniMax: 1,000자당 약 12,000 크레딧.
  • Cartesia, OpenAI, Gemini, Mistral, Inworld, Fish Audio 또는 Speechify: 각 제공업체의 가격 정책을 확인하세요.

submit_sound는 텍스트 설명당 약 6,000 크레딧이 소요됩니다.

미래 경고 및 할당량

수입 협상은 기본 할당량이나 예산을 초과하는 제안을 자동으로 수락하지 않습니다. submit_voice 또는 submit_sound가 할당량 또는 비용 오류를 반환하면 사용자에게 정확한 오류 메시지를 전달하고 계정 크레딧 또는 제공업체 API 할당량을 확인하도록 안내하십시오.

Individual skills in this repo

This repo contains 11 individual skills — each has its own dedicated page.

0xsline/openchatcut

Connect an MCP-capable coding agent to OpenChatCut and edit local video projects. Use when the user asks to install, connect, or set up OpenChatCut; inspect or edit an OpenChatCut project; work with its timeline, transcript, captions, media, generation, motion graphics, audio, color, or export tools; or recover from an OpenChatCut MCP error.

0xsline/openchatcut

Use when acquiring or importing media into a OpenChatCut project asset library for video editing or creation, including local/attached videos, user-provided paths, public media URLs, web video/audio/image assets, upload fallback decisions, and deciding between import_media, download_media, or manual user action.

0xsline/openchatcut

Use when a OpenChatCut video editing or creation workflow needs export, render, download, share, final delivery, subtitle-file export, render choice, local-only asset handling, or export fallback explanation.

0xsline/openchatcut

AI image generation via Fal.ai, gpt-image-2, nano-banana, MiniMax image-01, and xAI Grok Imagine. Use when the user wants to generate or create an image / picture / still.

0xsline/openchatcut

Use when a OpenChatCut tool call fails or returns an unexpected shape.

0xsline/openchatcut

Music generation via Mureka, MiniMax, Atlas Cloud, and Sonilo. Use for instrumentals, songs, soundtracks, track/stem generation, covers, or video-conditioned scoring of the finished cut through `submit_music`.

0xsline/openchatcut

OpenChatCut product knowledge — UI layout, editor features, and how generation providers are configured. Use when the user asks about the product interface, how to use a feature, where to find something, or needs GUI guidance for something the agent cannot do directly. Also use as fallback when a task fails and the user needs to complete it manually in the UI. NOT for live project-state queries ("where are my folders?", "what's on my timeline?", "where is clip X?") — those are answered by `read_project`, not by this skill.

0xsline/openchatcut

AI shader generator for WebGL video effects, transitions, masks, and color grading (LUT / 调色 / 电影感 / film look). Use when the user wants a video effect (滤镜 / 特效), a transition (转场 / crossfade / wipe / cube / 3d), a mask (蒙版 / 遮罩 / reveal), a zoom / push-in (推近 / 推镜头), or a color grade — try the built-in effects (zoom, builtin LUTs) before generating a new shader.

0xsline/openchatcut

Use when checking whether agent edits are reflected in the OpenChatCut project and editor.

0xsline/openchatcut

AI video generation via Fal.ai, Seedance 2.0, Kling, MiniMax Hailuo, xAI Grok Imagine, and OFox. Use when the user wants to generate a video clip — text-to-video, image-to-video, first/last-frame transitions, reference-guided generation, multi-shot, or generatively editing / extending an existing clip.

0xsline/openchatcut

Use when the agent should ask the user for structured input with an in-chat form, including single-select, multi-select, text fields, style pickers, or voice audition choices.

관련 스킬