원클릭으로
podcastcut-voiceclone
声音克隆播客剪辑。ASR转录 → AI修正文字 → 声音克隆TTS重新生成干净音频。触发词:声音克隆、voiceclone、重新生成
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
声音克隆播客剪辑。ASR转录 → AI修正文字 → 声音克隆TTS重新生成干净音频。触发词:声音克隆、voiceclone、重新生成
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
使用 browser-use CLI 对 PodcastCut webapp 做浏览器验收。始终使用 headed 模式,覆盖打开页面、登录、上传指定音频、触发生成审查稿、刷新审查稿、手动标记删除、确认剪辑、核对 workspace 产物。触发词:browser validation、浏览器验证、用 browser-use 跑流程、上传音频验收
生成播客审查画布数据。根据当前工作区中的音频、转录、QA 报告和剪辑结果, 产出固定格式的 review_data.json,供右侧审查画布直接读取。 触发词:审查画布、review data、审查稿、生成播客审查
语音克隆 + 播客生成完整流程。 上传音频 → 转录 → 修正文稿 → 提取声音样本 → 克隆声音模型 → TTS 合成 → 合并成品音频。 全自动执行,无需用户逐步操作。 触发词:语音克隆、声音克隆、生成播客、克隆声音
音频剪辑。根据 delete_segments.json 删除指定片段,自适应淡入淡出,可选说话人音量对齐。触发词:剪辑、cut、编辑音频
将当前 webapp 发布到 Fly.io,并在发布前后做最小健康检查。 适用于前端或后端改动后的一键上线。触发词:deploy、发布、上线、推到 fly、fly.io
使用 browser-use CLI 对 webapp 做端到端验证。覆盖登录、上传音频、生成 review_data.json、刷新审查稿、手动标记删除、确认剪辑、验证 podcast_cut.mp3。触发词:browser e2e、端到端验证、验证网页剪辑、用浏览器跑流程
| name | podcastcut-voiceclone |
| description | 声音克隆播客剪辑。ASR转录 → AI修正文字 → 声音克隆TTS重新生成干净音频。触发词:声音克隆、voiceclone、重新生成 |
原始音频 → ASR转录 → AI修正文字 → 提取说话人样本 → 声音克隆 → TTS重新生成
用户: 用声音克隆重新生成播客
用户: voiceclone
用户: 帮我用 TTS 重新生成这段播客音频
传统剪辑思路是"剪掉不要的"(删寒暄、口误、语气词),需要复杂的时间戳对齐和 FFmpeg 剪辑。
新思路是"重新生成":用 ASR 获取文字 → AI 修正文字 → 声音克隆 → TTS 重新生成干净音频。直接输出完美音频,无需处理时间戳对齐。
podcast_transcript.json(ASR 转录结果,已有则跳过转录)podcast_修正稿.json — 修正后的逐字稿speaker_*_sample.wav — 说话人音频样本voice_models.json — speaker→model_id 映射segment_*.mp3 — 各段 TTS 音频podcast_voiceclone.mp3 — 最终合并音频FISH_API_KEY in .env(Fish Audio API 密钥)requests、python-dotenv(pip install)原始音频
↓
1. ASR 转录(已有 podcast_transcript.json 则跳过)
↓
2. Claude 审阅逐字稿,修正:
- 语法错误、逻辑不通
- 语塞/口误/重复(直接删除或改写)
- 阿拉伯数字 → 汉字
- 去掉废话/寒暄
→ 输出 podcast_修正稿.json
↓
3. 提取每个说话人 ~20s 的独说片段(FFmpeg)
python scripts/extract_speaker_samples.py <transcript.json> <音频文件> <输出目录>
↓
4. 上传 Fish Audio 创建声音模型
python scripts/create_voice_model.py <样本目录> <speaker名字映射JSON>
↓
5. 逐段用 TTS 重新生成音频
python scripts/tts_generate.py <修正稿.json> <voice_models.json> <输出目录>
↓
6. 合并所有段落 → 最终音频
python scripts/merge_segments.py <segment目录> <输出文件>
如果已有 podcast_transcript.json,跳过此步。否则调用 /podcastcut-content 的转录脚本:
python ~/.claude/skills/podcastcut-content/scripts/transcribe.py <音频文件> <输出目录>
这是人工步骤。Claude 读取 podcast_逐字稿.md(或从 transcript JSON 生成),进行以下修正:
输出格式 podcast_修正稿.json:
{
"segments": [
{"speaker": "xujia", "text": "修正后的文字"},
{"speaker": "嘉宾女", "text": "修正后的文字"}
]
}
python scripts/extract_speaker_samples.py podcast_transcript.json 4-1.WAV ./samples
atrim 提取音频片段speaker_0_sample.wav, speaker_1_sample.wav 等python scripts/create_voice_model.py ./samples '{"0":"xujia","1":"嘉宾女","2":"嘉宾男"}'
.env 中的 FISH_API_KEYvoice_models.json:speaker名 → model_id 映射python scripts/tts_generate.py podcast_修正稿.json voice_models.json ./tts_output
segment_001.mp3, segment_002.mp3, ...python scripts/merge_segments.py ./tts_output podcast_voiceclone.mp3
podcast_voiceclone.mp3POST https://api.fish.audio/model
Content-Type: multipart/form-data
Authorization: Bearer {FISH_API_KEY}
Fields:
- voices: 音频文件(WAV)
- type: "tts"
- title: 说话人名字
- train_mode: "fast"
- visibility: "private"
Response: {"_id": "model_id", ...}
POST https://api.fish.audio/v1/tts
Authorization: Bearer {FISH_API_KEY}
Content-Type: application/json
Headers:
- model: "speech-1.6"
Body:
{
"text": "要生成的文字",
"reference_id": "model_id"
}
Response: 音频二进制数据(MP3)
{
"segments": [
{
"speaker": "xujia",
"text": "在我爸那边的感觉是,在这边大家很不习惯,吃的不好,也没有那么多朋友或者活动可以参加。"
},
{
"speaker": "嘉宾女",
"text": "你爸其实还年轻,到七十岁、八十岁的时候,想法可能就又不一样了。这个东西确实需要计划,跟你的计划有关系。"
}
]
}
启动时创建:
- [ ] 确认已有 podcast_transcript.json(或转录)
- [ ] Claude 审阅逐字稿,输出修正稿
- [ ] 提取说话人音频样本
- [ ] 上传 Fish Audio 创建声音模型
- [ ] TTS 逐段生成音频
- [ ] 合并所有段落为最终音频
- [ ] 验证输出质量