媒体处理管线 - 将音视频转化为结构化知识。
- 媒体下载: 支持 YouTube、Bilibili 等平台视频下载 (yt-dlp)
- 本地文件处理: 支持直接处理本地音视频文件
- 平台字幕优先: 自动下载平台字幕,LLM 补充说话人标注和标点
- 人声分离: UVR5 (audio-separator) 分离人声和背景音乐
- 语音转录: Qwen3-ASR,支持说话人分离
- 智能润色: LLM 滑动窗口润色,修正错字、添加标点
- 内容分析: 自动提取关键信息、生成摘要和思维导图(支持 map-reduce 长文本)
- 桌面应用: Electron 打包,双击即用
MediaProcessPipeline/
├── backend/ # Python 后端 (FastAPI :18000)
│ ├── app/
│ │ ├── main.py # 入口,同时 serve 前端静态文件
│ │ ├── core/ # settings, database, events, queue, pipeline
│ │ ├── models/ # 数据模型
│ │ ├── api/routes/ # API 路由(薄 wrapper)
│ │ └── services/ # 业务逻辑
│ │ ├── ingestion/ # yt-dlp 下载
│ │ ├── preprocessing/ # UVR5 人声分离, VAD 切分
│ │ ├── recognition/ # Qwen3-ASR 转录
│ │ ├── analysis/ # LLM 润色/摘要/思维导图
│ │ └── archiving/ # 结果归档
│ └── run.py
├── web/ # Vite + React 19 + shadcn/ui
│ └── src/
├── electron/ # Electron 桌面壳
│ └── main.js
├── scripts/ # CLI 快捷脚本
│ ├── mpp.ps1 # PowerShell
│ └── mpp # bash
└── data/ # 配置目录(settings.json);
# 实际数据/任务输出/SQLite 走 settings.data_root
# (本机:D:/Video/MediaProcessPipeline/)
- Python 3.11 ~ 3.12
- uv (Python 包管理)
- Node.js 18+
- FFmpeg (必须在 PATH 中)
- CUDA (可选,GPU 加速 ASR/UVR)
git clone <repo-url>
cd MediaProcessPipeline
# Python 依赖(默认即包含下载 / UVR / ASR 运行链路)
uv sync
# 前端依赖 + 构建
cd web && npm install && npm run build && cd ..方式 1: Electron 桌面应用
cd electron && npm install && npm start或打包后双击 MPP.exe(放在项目根目录)。
方式 2: 后端 + 浏览器
start.bat # 启动后端并自动打开浏览器或手动运行:
cd backend
uv run python -m app.cli serve # 启动 daemon :18000浏览器打开 http://127.0.0.1:18000
方式 3: CLI
# PowerShell
.\scripts\mpp.ps1 serve # 启动 daemon
.\scripts\mpp.ps1 run <url> # 提交任务
.\scripts\mpp.ps1 list # 查看任务列表
.\scripts\mpp.ps1 status # daemon 状态
# bash
./scripts/mpp serve
./scripts/mpp run <url># 后端 (热重载)
cd backend && uv run python run.py --reload
# 前端 (Vite dev server, 代理 API 到 :18000)
cd web && npm run dev # :5173POST /api/tasks- 创建处理任务GET /api/tasks- 列出任务GET /api/tasks/{id}- 获取任务详情GET /api/tasks/{id}/events- SSE 实时进度GET /api/tasks/events- 全局 SSE 事件流POST /api/tasks/{id}/cancel- 取消任务
POST /api/pipeline/upload- 上传本地文件POST /api/pipeline/polish- 润色文本POST /api/pipeline/summarize- 生成摘要POST /api/pipeline/mindmap- 生成思维导图GET /api/pipeline/archives- 列出归档DELETE /api/pipeline/archives- 删除归档
GET /api/settings- 获取运行时设置PUT /api/settings- 更新设置
- 下载/导入 - 从 URL 下载或导入本地文件,自动尝试下载平台字幕
- 人声分离 - UVR5 分离人声(有平台字幕时跳过)
- 语音转录 - Qwen3-ASR 转录(有平台字幕时由 LLM 处理)
- 内容分析 - LLM 提取元数据、关键词、主题
- 文本润色 - LLM 滑动窗口修正转录错误、生成摘要和思维导图
- 归档输出 - 保存结构化文件到
data/{title}/
每个任务在 data/{title}/ 下生成:
source/- 原始媒体文件metadata.json- 媒体元数据analysis.json- LLM 分析结果transcript.srt- 原始转录 SRTtranscript_polished.srt- 润色后 SRTtranscript_polished.md- 干净的 Markdown 文稿summary.md- 摘要和思维导图
⚠️ 任务数据库实际位置:tasks.db不在仓库里的data/,而在settings.data_root指向的目录下,例如本机D:/Video/MediaProcessPipeline/tasks.db。仓库下的data/tasks.db是历史遗留的 0 字节文件,不要去查它。需要直连 SQLite 调试时,认准data_root。
在前端 Settings 页面或 data/settings.json 中配置:
- LLM: Provider (OpenAI / Anthropic / DeepSeek 等 OpenAI 兼容), 模型, API 密钥
- ASR: Qwen3-ASR 模型路径、对齐器路径、设备
- UVR: 模型选择, 模型目录
- 路径: 数据目录
- Backend: Python 3.11+, FastAPI, SQLite, uv
- Frontend: React 19, Vite, shadcn/ui, Tailwind CSS 4
- Desktop: Electron
- AI: Qwen3-ASR, pyannote-audio, UVR5 (audio-separator), OpenAI SDK(Anthropic / OpenAI / DeepSeek v4 / OpenAI-compatible)
- 下载: yt-dlp, FFmpeg
- 导图节点聚焦交互未完全解决: 当前已实现“点击节点后按局部子树重新取景”的一版近似方案,但对于右侧长文本节点,镜头中心、缩放范围、以及“局部节点先布局再把其他节点拼接回来”的效果仍不稳定,和预期交互还有差距。
- LLM API 总结链路需要切换到本地模型: 目前总结/导图相关能力仍主要依赖远程 LLM API,后续需要支持使用本地模型完成总结与知识树生成。
- 知识树总结会误把多个章节并在一起: 典型案例是“翁家翌”相关内容,多个章节会在知识树摘要阶段被合并,导致章节边界和主题拆分不准确。
MIT