一键导入
voice-clone
语音克隆 + 播客生成完整流程。 上传音频 → 转录 → 修正文稿 → 提取声音样本 → 克隆声音模型 → TTS 合成 → 合并成品音频。 全自动执行,无需用户逐步操作。 触发词:语音克隆、声音克隆、生成播客、克隆声音
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
语音克隆 + 播客生成完整流程。 上传音频 → 转录 → 修正文稿 → 提取声音样本 → 克隆声音模型 → TTS 合成 → 合并成品音频。 全自动执行,无需用户逐步操作。 触发词:语音克隆、声音克隆、生成播客、克隆声音
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
使用 browser-use CLI 对 PodcastCut webapp 做浏览器验收。始终使用 headed 模式,覆盖打开页面、登录、上传指定音频、触发生成审查稿、刷新审查稿、手动标记删除、确认剪辑、核对 workspace 产物。触发词:browser validation、浏览器验证、用 browser-use 跑流程、上传音频验收
生成播客审查画布数据。根据当前工作区中的音频、转录、QA 报告和剪辑结果, 产出固定格式的 review_data.json,供右侧审查画布直接读取。 触发词:审查画布、review data、审查稿、生成播客审查
音频剪辑。根据 delete_segments.json 删除指定片段,自适应淡入淡出,可选说话人音量对齐。触发词:剪辑、cut、编辑音频
将当前 webapp 发布到 Fly.io,并在发布前后做最小健康检查。 适用于前端或后端改动后的一键上线。触发词:deploy、发布、上线、推到 fly、fly.io
使用 browser-use CLI 对 webapp 做端到端验证。覆盖登录、上传音频、生成 review_data.json、刷新审查稿、手动标记删除、确认剪辑、验证 podcast_cut.mp3。触发词:browser e2e、端到端验证、验证网页剪辑、用浏览器跑流程
金句混音。将高亮片段叠加在连续背景音乐上,人声出现时音乐自动降低。触发词:混音、片头音乐、金句背景音乐
| name | voice-clone |
| description | 语音克隆 + 播客生成完整流程。 上传音频 → 转录 → 修正文稿 → 提取声音样本 → 克隆声音模型 → TTS 合成 → 合并成品音频。 全自动执行,无需用户逐步操作。 触发词:语音克隆、声音克隆、生成播客、克隆声音 |
| triggers | ["voice clone","语音克隆","声音克隆","克隆声音","生成播客"] |
从一段音频自动完成:转录 → 修正 → 提取样本 → 克隆声音 → TTS 合成 → 合并成品
OPENROUTER_API_KEY 环境变量(用于转录和文稿修正)FISH_API_KEY 环境变量(用于声音克隆和 TTS)ffmpeg 和 ffprobe 已安装用户只需提供音频文件和说话人信息,agent 自动按顺序执行以下步骤:
音频文件 + 说话人信息
↓
Step 1: 转录(Gemini 3 Flash via OpenRouter)
↓
Step 2: 修正文稿(LLM 清理语气词、口误、识别错误)
↓
Step 3: 提取声音样本(每个说话人 ~15s 最佳片段)
↓
Step 4: 创建声音克隆模型(Fish Audio,每个说话人一个模型)
↓
Step 5: TTS 批量合成(用克隆声音朗读修正后的文稿)
↓
Step 6: 合并音频片段 → 成品播客音频
所有 Python 脚本都必须通过 backend 项目的虚拟环境执行,不要使用系统 python / python3 / pip:
/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python <脚本路径> ...
例如:
/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/transcribe.py \
webapp-e2e-40s.m4a --speakers 2
完整编排入口在:
/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/scripts/pipeline.py
/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/transcribe.py \
<音频文件> [--speakers N]
transcript.json--speakers N:说话人数量(默认 2)输出格式:
{"sentences": [{"text": "内容", "start": 0.0, "end": 3.5, "spk": 0}, ...]}
/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/correct.py \
<transcript.json> --speakers '{"0":"Alice","1":"Bob"}'
corrected.json/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/extract.py \
<音频文件> <transcript.json> <输出目录> [--duration 15]
samples_manifest.json/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/create_model.py \
--name "说话人名" --samples "sample1.wav,sample2.wav"
/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/tts_batch.py \
<corrected.json> <voice_models.json> <输出目录>
voice_models.json 格式:{"Alice": "model_id_1", "Bob": "model_id_2"}segment_001.mp3, segment_002.mp3, ...单条合成:
/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/tts.py \
--text "要合成的文字" --model-id <模型ID> --output <输出.mp3>
/Users/lincolnwang/podcastcut-skills/webapp/backend/.venv/bin/python \
/Users/lincolnwang/podcastcut-skills/webapp/backend/skills/voice_clone/merge.py \
<片段目录> <输出.mp3> [--pattern "segment_*.mp3"]
每次执行会在 workspace 下创建:
workspaces/<session_id>/
├── upload.mp3 # 原始音频
├── transcript.json # Step 1 转录结果
├── corrected.json # Step 2 修正文稿
├── samples/ # Step 3 声音样本
│ ├── speaker_0_sample_0.wav
│ ├── speaker_1_sample_0.wav
│ └── samples_manifest.json
├── voice_models.json # Step 4 模型 ID 映射
├── tts_output/ # Step 5 TTS 片段
│ ├── segment_001.mp3
│ ├── segment_002.mp3
│ └── ...
└── output.mp3 # Step 6 最终成品
用户: 帮我克隆这段音频里的声音,重新生成播客
Agent: 收到,开始处理:
1. 转录中...(Gemini 3 Flash)
2. 修正文稿...(删除语气词、修正口误)
3. 提取声音样本...(Speaker 0: 3 段, Speaker 1: 2 段)
4. 创建克隆模型...(Speaker 0 → model_abc, Speaker 1 → model_def)
5. TTS 合成中...(32 段文稿 → 32 个音频片段)
6. 合并成品...
✅ 完成!最终音频:workspaces/xxx/output.mp3