Book → Bilibili Video Pipeline
> Goal: 输入一本书,自动完成「书籍拆解 → PPT 大纲 → 配音生成 → 视频合成 → B 站发布素材」五步流水线,产出一支 8-15 分钟、亿文风格、适配 B 站投稿的 1080p 知识区视频及其全部配套素材。
When to Use
当用户想要把一本书(有源文件或仅书名)做成B 站知识区视频时触发,典型表述:
- "拆书做视频"、"把《xxx》做成视频"、"书转 PPT 视频"
- "B 站知识视频"、"亿文风格视频"、"做成亿文那种风格"
When NOT to Use
- 用户没有明确指向"书 → 视频",而是单独的 PPT、配音、或封面设计需求(应走对应专用流程)。
- 书籍本身受版权保护且用户要求逐字照搬原文(本流水线强制原创改写)。
触发与快速开始
用户给出书籍(三选一):
- PDF / epub 文件:
python3 scripts/pipeline.py '/path/to/book.pdf' - txt / md 文件:
python3 scripts/pipeline.py '/path/to/book.txt' - 仅书名+作者(无源文件):
python3 scripts/pipeline.py '原则@瑞·达利欧'
首次使用先安装依赖:
bash scripts/install.sh # 需要 root:ffmpeg + python 依赖 + 中文字体
全流程示例:
python3 scripts/pipeline.py 'path/to/book.pdf' -o ./output
输出目录结构
output/<书名>/
├── progress.log # 全流程进度日志(每一步追加)
├── 01_json/
│ └── book_structure.json # 书籍拆解结构(模块/时长/文案脚本)
├── 02_ppt/
│ ├── ppt_outline.md # Marp 可渲染的 PPT 大纲
│ └── ppt_outline.json # 结构化页面(含动画节奏/停留时长)
├── 03_audio/
│ ├── seg_01.mp3 ... seg_NN.mp3 # 每段配音
│ ├── voice_script.md # 带停顿标注的语音脚本
│ ├── timestamps.json # 每段时间戳(起止)
│ └── manifest.json # 供视频合成的段清单
├── 04_video/
│ └── <书名>_视频.mp4 # 1080p / 8Mbps 成片
└── 05_bilibili/
├── bilibili_materials.md # 标题/简介/标签/封面方案
└── bilibili_materials.json
五步流水线详解
Step 1 · 书籍拆解(book_parser.py + book_splitter.py)
作用:提取全书文本与目录,拆成 6-10 个模块,每个模块提炼标题、核心观点、支撑论据、金句,并为每段预估时长、生成原创配音文案。
python3 scripts/pipeline.py 'path/to/book.pdf' --step step1_book
产出:01_json/book_structure.json
{
"book_title": "书名", "book_author": "作者",
"total_duration": 600, "total_minutes": 10, "module_count": 8,
"modules": [
{
"index": 1, "title": "模块标题",
"core_point": "核心观点(1-3句)",
"arguments": ["支撑论据1", "支撑论据2"],
"quotes": ["金句1"],
"duration": 75, // 预计时长(秒),钳制在 50-120s
"script": "该段原创配音文案"
}
],
"table_of_contents": [ {"start_ts":"00:00","end_ts":"00:05","title":"..."} ]
}
配置项(通过 --config 传入 JSON):
| 参数 | 默认 | 说明 |
|---|---|---|
min_modules / max_modules |
6 / 10 | 模块数范围 |
total_seconds |
600 | 目标总时长(秒),8-15 分钟内 |
chunk_chars |
6000 | 文本分块字数 |
Step 2 · PPT 大纲生成(ppt_generator.py)
作用:基于每段文案生成 3-6 页 PPT,深色底 + 大字号白字/亮色强调 + 关键词高亮(亿文风格),标注动画节奏(逐行/淡入/强调)与停留时长。
python3 scripts/pipeline.py 'path/to/book.pdf' --step step2_ppt
产出:02_ppt/ppt_outline.md(可直接用 Marp 渲染 .pptx)+ ppt_outline.json
Marp 渲染命令:
npx @marp-team/marp-cli ppt_outline.md -o 视频PPT.pptx --theme default
或 python-pptx 渲染(脚本已给出页面结构,可按需扩展渲染器)。
配置项:min_pages_per_module(3) / max_pages_per_module(6)
Step 3 · 配音生成(tts_engine.py)
作用:把每段文案转为语音脚本,标注停顿点(逗号 0.3s、句号 0.6s、段落间 1s),调用 Edge-TTS 生成 .mp3。
python3 scripts/pipeline.py 'path/to/book.pdf' --step step3_audio
# 自定义音色/语速:
python3 scripts/pipeline.py 'path/to/book.pdf' --step step3_audio \
--config '{"tts_voice":"zh-CN-YunxiNeural","tts_rate":1.05}'
音色对照(Edge-TTS):
| voice | 音色 | 适合 |
|---|---|---|
zh-CN-YunxiNeural(默认) |
云希·沉稳男声 | 知识博主,推荐 |
zh-CN-XiaoxiaoNeural |
晓晓·标准女声 | 通用清晰 |
zh-CN-YunjianNeural |
云健·成熟男声 | 厚重叙事 |
en-US-GuyNeural |
英文男声 | 英文书 |
配置项:tts_voice(默认云希) / tts_rate(1.0-1.1,默认1.05) / tts_pitch(+0Hz) / tts_retry(6) / tts_retry_delay(2.0) / tts_seg_gap(0,段间冷却秒数,建议 15-20)
产出:03_audio/seg_*.mp3 + voice_script.md(含停顿标注)+ timestamps.json + manifest.json
Step 4 · 视频合成(video_composer.py)
作用:把 PPT 页面渲染为 1920×1080 高清图,按时间戳排列、叠加配音,加片头(5s)/片尾(订阅引导)/可选 BGM,输出 1080p / 8Mbps MP4。
python3 scripts/pipeline.py 'path/to/book.pdf' --step step4_video
# 加背景音乐:
python3 scripts/pipeline.py 'path/to/book.pdf' --step step4_video \
--config '{"bgm_path":"/path/to/music.mp3","bgm_volume":0.05}'
配置项:bgm_path(默认空) / bgm_volume(0.05) / intro_sec(5) / outro_sec(4) / video_bitrate(8M) / fps(30) / video_encoder(自动检测,优先 libx264,回退 libopenh264)
> ⚠️ 前置:需先运行 step3(视频时长以实际配音为准)。页面图片用 PIL 直接绘制,无需浏览器。
Step 5 · B 站发布素材(bilibili_materials.py)
作用:生成 3 个 SEO 标题、200 字简介(含时间戳目录)、10-15 个标签、封面文字方案。
python3 scripts/pipeline.py 'path/to/book.pdf' --step step5_bili
产出:05_bilibili/bilibili_materials.md + .json
断点续跑 & 进度日志
- 每个阶段完成后会写
.stepN_*.done标记;重复执行会自动跳过已完成阶段。 - 想看完整进度:
cat output/<书名>/progress.log - 想强制重跑某一步:加
--force:
bash python3 scripts/pipeline.py 'book.pdf' --step step3_audio --force
版权合规(强制)
- 所有文案(script/quote/论据)均为原创改写,禁止直接复制书籍原文超过 20 字。
book_splitter.py的脚本为可读模板,实际投用前建议由 AI/人工依据原文要点改写润色,并人工核验一遍。- 输出 JSON 中附有版权声明字段,投稿前请确认。
依赖与安装
详见 README.md。核心:
- Python 3.10+
- ffmpeg(系统级,
install.sh自动装) - edge-tts(免费 TTS)
- pdfplumber / pypdf(PDF 解析)
- Pillow(渲染高清页面图)
- python-pptx 或 Marp CLI(PPT 渲染,可选)
常见问题(FAQ)
| 问题 | 处理 |
|---|---|
| 扫描版 PDF 提不出文字 | 先 pip install ocrmypdf 做 OCR,或用清晰文本版 |
| 没有网络装 edge-tts | step3 会提示缺命令;也可改用本地 espeak-ng(质量一般) |
| 想改总时长 | --config '{"total_seconds":540}'(9 分钟) |
| 成片太长/太短 | 调整 total_seconds 或 min_modules/max_modules 后 --force 重跑 |
| 中文字体缺失 | install.sh 会自动装文泉驿/Noto CJK |