# epub2podcast 一个**可独立运行**的本地项目:把 EPUB 内容转换成双人中文播客脚本、音频、Smart Slide,以及最终 MP4 视频。 > 当前版本:**v0.1.0** > > 发布定位:**可独立运行的早期 standalone 版本** 下载当前目录、安装依赖、配置 `.env` 后,就可以直接运行。 --- ## 你能用它做什么 `epub2podcast` 当前最稳的工作流是: - 读取 **EPUB** 文件 - 生成双人中文播客脚本 - 生成分段音频并合并为完整音频 - 生成 Smart Slide HTML 与 PNG - 合成最终 MP4 视频 - 按需压缩视频,便于上传或分享 如果你想把一本书快速整理成“可听、可看、可传播”的内容,这就是它最适合做的事。 --- ## 适合谁 这个项目特别适合: - 想把一本 EPUB 做成中文播客的人 - 想把文字内容进一步做成视频播客的人 - 想在本地掌控脚本、音频、页面和视频产出的人 - 想把“电子书 → 播客”做成可复用流程的人 --- ## 示例效果
epub2podcast 示例封面页

封面页风格
适合做视频开场、书籍介绍或主题引入。

epub2podcast 示例信息页

信息图风格
适合展示结构化信息、核心观点或分层关系。

epub2podcast 左右分栏版式示例

左右分栏讲述页
适合做“左侧引言 + 右侧要点展开”的内容页,版式更有杂志感。

epub2podcast 三卡片版式示例

三卡片信息页
适合把一个主题拆成 3 个并列重点,方便快速浏览与理解。

epub2podcast 条目列表版式示例

条目列表版式
适合做学术总结、历史回响、观点归纳这类要点式内容页。

epub2podcast 中心聚焦版式示例

中心聚焦版式
适合用一个核心概念带出四周支撑观点,展示主题与延展关系。

--- ## 工作流程 ```mermaid flowchart LR A[EPUB 文件] --> B[解析图书内容] B --> C[生成双人中文播客脚本] C --> D[生成分段音频] D --> E[合并完整播客音频] C --> F[生成 Smart Slide HTML] F --> G[渲染 Smart Slide PNG] E --> H[合成最终 MP4 视频] G --> H H --> I[按需压缩视频] ``` --- ## 安装前准备 ### 系统依赖 请先确认本机已安装: - Node.js 20+ - npm - `ffmpeg` - `ffprobe` - Chrome / Chromium ### 环境变量 你至少需要准备以下能力对应的密钥: - 文本/HTML 生成:通常使用 `OPENROUTER_API_KEY` - 中文 TTS:通常使用火山引擎(Volcengine)相关变量 项目里已经附带: - `.env.example` 你可以复制它来开始配置。 --- ## 快速开始 ### 1. 安装依赖 ```bash cd epub2podcast npm install ``` ### 2. 配置环境变量 ```bash cp .env.example .env ``` 然后按你的实际账号信息填写 `.env`。 ### 3. 构建项目 ```bash npm run build ``` ### 4. 运行主流程 ```bash node dist/cli/run.js --epub ./book.epub --output-dir ./deliveries ``` 或者使用脚本入口: ```bash bash scripts/epub2podcast_local_run.sh --epub ./book.epub --output-dir ./deliveries ``` --- ## 常用命令 ### 查看主命令帮助 ```bash node dist/cli/run.js --help ``` ### 从 EPUB 生成完整交付物 ```bash node dist/cli/run.js --epub ./book.epub --output-dir ./deliveries ``` ### 重生成某一页 slide ```bash node dist/cli/regenerate-slide.js \ --delivery-dir /path/to/delivery \ --slide-index 0 \ --recompose ``` ### 压缩最终视频 ```bash node dist/cli/compress-video.js \ --input /path/to/final_podcast.mp4 \ --output /path/to/final_podcast_compressed.mp4 ``` ### 环境检查 ```bash npm run smoke-test ``` --- ## 输出内容 一次成功运行后,输出目录中通常会包含: - `source/`:输入书文件副本 - `audio_segments/`:分段音频 - `smart_slides/`:Slide PNG - `smart_slides_html/`:Slide HTML - `full_podcast.mp3`:完整播客音频 - `final_podcast.mp4`:最终视频 --- ## 当前状态 ### 已验证 当前 standalone 版本已经完成过真实端到端验证,验证通过的链路包括: - 主流程:EPUB → 脚本 → 音频 → Slide → MP4 - 单页重生成:`regenerate-slide` - 视频压缩:`compress-video` - namespace 前缀 OPF 结构的 EPUB 解析兼容性(已用《太平天国革命运动史》样本验证) ### 当前最稳的输入类型 - **EPUB** ### 还会继续完善的方向 - 更完整的 PDF / MOBI / AZW3 支持 - 更少的历史依赖 - 更统一的 CLI 参数设计 - 更完善的错误提示和自动检查 --- ## 常见问题 ### 现在还需要原始 `epub2podcast-local` 项目吗? **不需要。** 当前这个目录已经具备独立安装、独立构建和独立运行能力。 ### 是不是下载后就能直接跑? 原则上是,但前提是: - 系统依赖已安装 - `.env` 已配置 - 你使用的是当前最稳的输入路径(推荐 EPUB) ### 如果最终 MP4 太大怎么办? 可以直接运行: ```bash node dist/cli/compress-video.js --input /path/to/final_podcast.mp4 ``` ### 如果只想重做某一页 slide,可以吗? 可以: ```bash node dist/cli/regenerate-slide.js --delivery-dir /path/to/delivery --slide-index 0 --recompose ``` --- ## 排查建议 ### 找不到 `ffmpeg` / `ffprobe` 先检查: ```bash ffmpeg -version ffprobe -version ``` ### `.env` 没配好 先重点检查: - `OPENROUTER_API_KEY` - `VOLCENGINE_ACCESS_TOKEN` - `VOLCENGINE_APP_ID` - `VOLCENGINE_VOICE_ID_MALE` - `VOLCENGINE_VOICE_ID_FEMALE` ### Smart Slide 生成失败 优先检查: - Chrome / Chromium 是否可用 - Puppeteer 是否安装正常 - 当前机器能否访问所需模型服务 --- ## 目录结构 ```text epub2podcast/ ├── README.md ├── SKILL.md ├── package.json ├── tsconfig.json ├── .env.example ├── assets/ ├── scripts/ └── src/ ``` 其中: - `src/`:独立运行所需源码 - `scripts/`:方便调用的 shell 入口 - `assets/`:README 示例图 - `examples/`:最小命令示例与环境配置示例 如果你想快速查看实际命令,可继续看: - `examples/sample-commands.md` - `examples/env-minimal-example.md`