Communitygithub.com

声音与音效生成器

文本转语音(TTS)、旁白放置和对齐、自定义音效生成。用于从文本生成语音、为现有视频添加/替换/对齐旁白、在视觉重定时编辑后保持旁白同步、试听并选择声音,或生成声音效果库中不存在的自定义音效。

声音与音效生成器 是什么?

该技能是一个集文本转语音(TTS)和自定义音效生成于一体的专业工具,适用于AI辅助视频编辑场景。它支持多种TTS提供商(如Doubao、ElevenLabs、MiniMax、OpenAI、Gemini等),并通过`submit_voice`函数生成音频资产。在生成旁白时,如果存在视觉目标(如视频时间线),必须先阅读`references/video-sync.md`以确保同步,即使只是调整视觉而保留原有旁白。语音试听功能将提供商分为两类:对于有精选目录的提供商(Doubao、ElevenLabs、MiniMax),通过读取`references/voices.md`推荐2-4个预设选项并附带真实样例;对于其他提供商,需要用户提供具体的voice ID。在音效方面,优先使用内置音效库(通过`browse_library`查找),只有库中无匹配项或用户明确要求自定义时才使用`submit_sound`生成。技能还提供了详细的参数控制,如Doubao支持情感、语速、音调等调整,ElevenLabs支持情感标签和语速标签。所有UI标签和选项名称使用用户交流语言,而TTS语言仅用于选择提供商和声音目录。

兼容平台~Claude Code✓Codex CLI~Cursor✓Gemini CLI
npx skills add https://github.com/0xsline/openchatcut/tree/HEAD/src/agent/skills/voice

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

声音与音效生成器 是做什么的?

生成旁白(TTS)和音效。对于TTS,在调用 submit_voice 之前,请选择具体的提供商和声音。

何时使用

  • 从文本生成旁白/叙述
  • 为视频创建文本转语音音频
  • 为现有视频、时间线、屏幕录制、幻灯片动画、产品演示、B-roll剪辑、MG解说或其他视觉序列添加、替换或重做旁白/叙述
  • 在修剪、加速、减速、移动、重新排序或替换其所描述的视觉内容后,保持现有旁白/叙述对齐
  • 当用户尚未选定具体声音时,提供并试听TTS声音选项
  • 只有在检查音效库之后,才从文本描述生成自定义音效

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 中没有捆绑预设或示例目录。需要用户或其提供商账户提供具体的 voice 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",
});

// Cartesia 形状在用户确认具体账户 voice ID 后。
// confirmedCartesiaVoiceId 代表该提供的值,而非预设。
submit_voice({
  provider: "cartesia",
  text: "A concise product introduction.",
  voiceId: confirmedCartesiaVoiceId,
  modelId: "sonic-3",
  speed: 1,
  languageCode: "en",
  outputFormat: "mp3",
});

生成前的声音试听

当用户需要TTS且尚未选择具体声音时,首先将拥有 OpenChatCut 精选选择的提供商与需要账户特定 voice ID 的提供商分开。

对于 Doubao、ElevenLabs 或 MiniMax,在推荐、呈现或提交选项之前,请阅读 references/voices.md。将其作为精选预设 ID、提供商选择、显示标签、标签和捆绑示例 URL 的唯一来源。不要根据记忆、翻译名称或宽泛的用户描述创建声音选项。

对于 Inworld、Fish Audio、Speechify、OpenAI、Gemini、Mistral 或 Cartesia,不要提供编造的试听列表或示例 URL。请用户提供该已配置提供商的具体 voice 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 精选目录的提供商,要求输入自由文本、具体的提供商 voice ID。不要添加 media 或合成 /voice-samples/... 路径。在调用 submit_voice 之前,等待用户提供/确认确切的 ID。

对于每个精选试听选项,将 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. 使用 category:"sound-effects" 和查询词(例如 "whoosh"、"camera shutter"、"notification"、"censor beep" 或 "record scratch")调用 browse_library。
  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: "远处有狗在叫" });

// 带自定义时长(0.5-22 秒)
submit_sound({
  prompt: "雷声和暴雨",
  durationSeconds: 15,
});

// 高提示遵循度
submit_sound({
  prompt: "科幻激光枪射击",
  promptInfluence: 0.8,
});

获得更好结果的技巧:

  • 具体描述:"A dog barking loudly" 而不是仅仅 "dog"。
  • 描述氛围和环境。
  • 指定时长以匹配编辑点。

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.

相关技能