$npx -y skills add aliang2052/aliang-skills --skill aliang-picturebook-audiobook用阿里云百炼 bl CLI 把一个故事主题做成「儿童有声绘本」——AI 写故事→多音色配音(TTS)→统一画风文生图→合成网页版翻页有声书(可选导出 mp4 视频版、纯音频 mp3)。当用户想做有声书 / 有声绘本 / 儿童绘本 / 故事配音配图 / 睡前故事,或说"把故事做成有声书""做个绘本""故事变成声音再配图"时使用。
| 1 | # 儿童有声绘本制作 |
| 2 | |
| 3 | 把一个主题做成有声绘本:**AI 写故事 → 分段 → 多音色配音 → 统一画风配图 → 合成网页版(+可选视频/音频)**。全程用百炼 `bl` CLI,最后用本 skill 的脚本组装。 |
| 4 | |
| 5 | ## 前置 |
| 6 | |
| 7 | - `bl` (百炼 CLI) 必须可用,已登录(`bl auth status` 可查)。 |
| 8 | - 导出 mp4 / 合并音频需要 `ffmpeg`(网页版不需要)。 |
| 9 | |
| 10 | ## 工作流(4 步) |
| 11 | |
| 12 | 开工前先和用户确认 2 件事(其余用默认):**① 故事主题**(必问);**② 要哪些产物**(网页版默认必出;是否再加 mp4 视频 / 纯音频 mp3)。段数默认 6、年龄默认 4-8 岁、画风默认水彩绘本,用户没特别要求就别追问。 |
| 13 | |
| 14 | ### 1. 生成故事 → story.json |
| 15 | |
| 16 | 读 `references/story_prompt.md`,填好主题/段数,用 `bl text chat --message "<prompt>" --output json` 生成,按该文件的解析片段提取成 `story.json`。 |
| 17 | - 若 `json.loads` 报错(多为对白用了英文引号),强调 prompt 第 7 条重新生成,**不要手工修补**。 |
| 18 | - 生成后把 story.json 的角色/分段简要念给用户看一眼。 |
| 19 | |
| 20 | ### 2. 选画风(按故事内容推荐,用户确认) |
| 21 | |
| 22 | 读 `references/styles.md`,按故事题材匹配出**推荐画风**,再用 AskUserQuestion 把 7 种预设给用户挑(推荐项放第一个标「(推荐)」)。例如中国神话题材推荐「国潮插画」。用户选定后作为下一步的 `--style` 值。 |
| 23 | |
| 24 | ### 3. 配音 + 配图(脚本一把梭) |
| 25 | |
| 26 | 画风定了后,直接跑构建脚本,它会逐段 TTS + 文生图并组装产物: |
| 27 | |
| 28 | ```bash |
| 29 | python3 scripts/build_audiobook.py --story story.json --outdir <项目目录> --style <画风名> [--web] [--video] [--merge-audio] [--all] |
| 30 | ``` |
| 31 | - `--style` 传预设名(见 styles.md)即可;不传默认「水彩绘本」;也可传自定义画风描述文字。 |
| 32 | - 不带产物标志默认只出网页版;`--all` = 网页+音频+视频。 |
| 33 | - 音色自动分配(旁白固定 + 角色轮流),情绪用 rate/pitch 表达。**细节与坑见 `references/voices.md`,动手前务必读它**(最关键:系统音色加 `--instruction` 会报 428,所以禁止用 instruction)。多音色生效的前提是故事 segments 的 speaker 分给了不同角色(见 story_prompt.md 第 6 条)。 |
| 34 | - 改了文字/换画风后只重跑:换 `--style` 重跑即可;只重建网页(不重出媒体)加 `--skip-media`。 |
| 35 | |
| 36 | ### 4. 交付 |
| 37 | |
| 38 | 产物在 `<项目目录>/`:`index.html`(网页版,双击或 `open` 即看)、`audio/seg_NN.wav`、`images/seg_NN.png`,以及可选 `<标题>.mp4`、`<标题>_audio.mp3`。最后用 `open index.html` 给用户预览。 |
| 39 | |
| 40 | ## 产物形态 |
| 41 | |
| 42 | - **网页版**(默认):单 HTML 翻页播放器,逐段大图+字幕+朗读,音频播完自动连播,支持上/下一段、进度条、圆点跳转、键盘 ←/→/空格。模板见 `assets/player_template.html`。 |
| 43 | - **mp4 视频版**:图片+音频用 ffmpeg 合成 720p 视频,发抖音/视频号用。 |
| 44 | - **纯音频 mp3**:各段合并成一个文件,喜马拉雅/睡前播放用。 |
| 45 | |
| 46 | ## story.json 结构 |
| 47 | |
| 48 | ```json |
| 49 | { |
| 50 | "title": "书名", |
| 51 | "characters": [{"name":"旁白","role":"narrator","trait":"温柔讲述者"}], |
| 52 | "segments": [{"id":1,"speaker":"旁白","text":"朗读文字(对白用中文全角引号)", |
| 53 | "emotion":"温柔讲述","image_prompt":"该段画面描述","voice":"<可选,覆盖音色>"}] |
| 54 | } |
| 55 | ``` |
| 56 | segments 数量任意;emotion 取值见 `references/voices.md` 的映射表。 |