{"id":"geek-skills-podcast-generator","name":"podcast-generator","summary":"Volcano Engine Podcast AIモデルを使って中国語の2人会話ポッドキャストを生成できます。","body":"# 播客生成器（火山引擎双人对话）\n\n把中文文本变成双人对话播客音频，接口封装在 `scripts/generate_podcast.py`。\n\n## 验收标准（每次生成完成前自查）\n\n- [ ] 音频文件已落盘，把**实际路径与文件大小**回报用户\n- [ ] 输入文本 ≤25,000 字符（超长必须先与用户确认拆分方案，不能让模型静默截断）\n- [ ] 生成中断时使用了 retry_info 续传而不是从头重来\n- [ ] 参数选择有依据：分发用 mp3，后期加工用 pcm；教学内容语速 -20 左右\n- [ ] 凭证缺失时未硬试：告知用户去火山引擎控制台（speech/service/10028）获取\n\n## 不做什么\n\n- 不写播客文稿——输入文本的质量是上游任务（文稿创作找写作类 skill）\n- 不做单人朗读、配音、音效制作\n- 不在输出里回显用户的 ACCESS_KEY\n\n## 工作流程\n\n### 1. 准备输入\n必需：中文文本（≤25k 字符）+ APP_ID + ACCESS_KEY（无则告知获取方式后停止）。\n可选：格式（默认 mp3）/ 采样率（默认 24000）/ 语速（-50~100，0=正常，100=2 倍速）/ 音色 / 开场音乐（默认关）。\n\n**最佳文本长度 500-3000 字**——播客时长与听感的最优区间；一篇长文建议先摘要再生成。\n\n### 2. 生成\n\n```bash\npython scripts/generate_podcast.py \\\n  --text \"播客话题或内容文本\" \\\n  --output \"/path/to/output.mp3\" \\\n  --app-id \"$VOLC_APP_ID\" --access-key \"$VOLC_ACCESS_KEY\" \\\n  --format mp3 --sample-rate 24000 --speech-rate 0\n```\n\n脚本会流式接收音频、按轮次显示进度、落盘后返回统计（大小/轮次数）。\nPython 模块调用、自定义音色 ID、断点续传 retry_info 的写法见脚本内 docstring 与 `references/api_reference.md`。\n\n### 3. 交付\n回报文件路径、大小、时长预估;失败时给出具体错误与下一步(见陷阱表)。\n\n## 已知陷阱\n\n| 陷阱 | 具体表现 | 应对 |\n|------|---------|------|\n| 超长静默截断 | >25k 字符时模型直接截断，播客缺尾 | 生成前校验长度，超长先与用户确认拆分或摘要 |\n| WebSocket 连不上 | 连接错误/超时 | 依次排查：凭证是否正确 → 网络 → 防火墙是否放行 WebSocket |\n| 中断后从头重试 | 长文本生成到一半断了，重跑烧双倍额度 | 从日志取 task_id 和 last_finished_round_id，用 retry_info 续传 |\n| 输出路径不可写 | 生成完成但保存失败 | 生成前检查目录存在且可写、磁盘空间充足 |\n| 文本结构差出烂稿 | 口水文本生成的对话生硬 | 输入用结构清晰的中文文本；效果差时先改文本再调参数 |\n\n## 依赖与凭证\n\n```bash\npip install websockets\n```\n凭证从火山引擎控制台获取（console.volcengine.com/speech/service/10028）。建议走环境变量,不要写进代码。\n\n## 参考文档（按需加载）\n\n- `references/api_reference.md` — 完整参数规格、WebSocket 协议细节、事件类型、错误码;协议级调试时读\n- `scripts/generate_podcast.py` — CLI 与模块双接口,含自动重试与流式接收实现","author":"@staruhub","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/staruhub/ClaudeSkills/tree/main/lab/Geek-skills-podcast-generator","license":"MIT","category":"writing","lang":"multi","tokens":898,"stars":0,"calls30d":2,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"references/api_reference.md","size":4918,"sha256":"346093297d65b35db4078a389142d4122402329580b84796df2a111d0f2406a0"},{"path":"scripts/generate_podcast.py","size":13614,"sha256":"c41faa9bfdf18a622ceef51b0e8e09ad4cda180c6d31b5be4c25ba7e16a4412f"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[{"code":"net.endpoints","kind":"exfiltration","excerpt":"console.volcengine.com","message":"bundled scripts reach 1 external host(s)","severity":"warn"}],"scannedAt":"2026-08-22","hasScripts":true,"networkEndpoints":["console.volcengine.com"]}}