媒体处理管线 - 将音视频转化为结构化知识。
- 媒体下载: 支持 YouTube、Bilibili 等平台视频下载 (yt-dlp)
- 本地文件处理: 支持直接处理本地音视频文件
- 平台字幕优先: 自动下载平台字幕,LLM 补充说话人标注和标点
- 人声分离: UVR5 (audio-separator) 分离人声和背景音乐
- 语音转录: sherpa-onnx 统一运行 Qwen3-ASR、SenseVoice、Paraformer、Whisper ONNX,并保留 SiliconFlow API 与 MOSS 本地链路
- 智能润色: LLM 滑动窗口润色,修正错字、添加标点
- 内容分析: 自动提取关键信息、生成摘要和思维导图(支持 map-reduce 长文本)
- 统一 Web/PWA/Android: 同一 React 界面服务本机 PC、服务器浏览器和 Capacitor Android
- 响应式体验: PC/Pad 使用顶部导航,手机使用底部导航与触控布局
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/ # sherpa-onnx 统一 ASR 与说话人分离
│ │ ├── analysis/ # LLM 润色/摘要/思维导图
│ │ └── archiving/ # 结果归档
│ └── run.py
├── web/ # Vite + React 19 + shadcn/ui
│ ├── src/ # PC、服务器与 Android 的唯一 UI 源码
│ └── android/ # Capacitor Android 轻量原生外壳
├── scripts/ # CLI 快捷脚本
│ ├── mpp.ps1 # PowerShell
│ ├── start-web.ps1 # Windows Web 一键启动
│ ├── start-web.sh # Linux Web 一键启动
│ ├── android.ps1 # Android 检查、构建与调试
│ └── mpp # bash
└── config.json # 运行时配置;
# 实际数据/任务输出/SQLite 走 settings.data_root
# (本机:D:/Video/MediaProcessPipeline/)
- Python 3.11 ~ 3.12
- uv (Python 包管理)
- Node.js 18+
- FFmpeg (必须在 PATH 中)
- CUDA (可选,用于 sherpa-onnx ASR / UVR / HF 本地推理)
git clone <repo-url>
cd MediaProcessPipeline
# Python 依赖(包含 sherpa-onnx CPU 运行时)
uv sync
# 可选:API ASR 使用 Silero ONNX VAD 切片
uv sync --extra asr-api-vad
# 可选:Pyannote 与本地 ASR 配套依赖;此命令保留 sherpa-onnx CPU wheel
uv sync --extra local-asr
# Windows + NVIDIA:安装 CUDA 12 / cuDNN 9 wheel
uv pip install "sherpa-onnx==1.13.4+cuda12.cudnn9" -f https://k2-fsa.github.io/sherpa/onnx/cuda.html
# 安装并校验默认的四套 ONNX ASR 模型与 Silero VAD
uv run python scripts/install_sherpa_models.py --model-root C:/Models/sherpa-onnx
# 可选:UVR 人声分离
uv sync --extra uvr
# 可选:HF Transformers 本地推理(torch + accelerate;transformers 在 base 中)
uv sync --extra hf-local-inference
# 可选:完整本地模型链路(sherpa-onnx、UVR、Pyannote、HF local LLM)
uv sync --extra local-models
# Windows 一次完成完整本地依赖、CUDA wheel 和四模型安装
./scripts/setup.ps1 -Extra local-models -InstallSherpaModels -SherpaModelRoot C:/Models/sherpa-onnx
# 前端依赖 + 构建
cd web && npm install && npm run build && cd ..2c4g VPS 建议使用 API ASR 和固定 ffmpeg 切片,跳过本地语音模型、UVR 和浏览器运行时:
uv sync
uv run python -m app.cli config asr_provider siliconflow
uv run python -m app.cli config siliconflow_asr_chunk_strategy ffmpeg
uv run python -m app.cli config enable_diarization false
uv run python -m app.cli config enable_voiceprint falsePlaywright Python 包随 base 安装。小红书、知乎等浏览器抓取需要额外安装浏览器运行时:
uv run playwright install chromium方式 1:本机 Web
.\start.bat也可以直接运行启动脚本:
.\scripts\start-web.ps1健康检查通过后打开 http://localhost:18000。
方式 2:Linux / 服务器 Web
./scripts/start-web.sh # 本机浏览器模式
./scripts/start-web.sh --server --no-browser服务器模式强制 API Token。systemd、Caddy/Nginx 和 HTTPS 配置见 Web/PWA 启动与部署。
手动启动后端:
cd backend
uv run python -m app.cli serve # 启动 daemon :18000浏览器打开 http://localhost:18000。
方式 3:Android App
Android 复用 web/src/,首次打开后填写 MPP 服务器地址和 API Token。构建环境需要 Node.js 22+、Android Studio 2025.2.1+ 和 Android SDK 36。
cd web
npm run android:apkRelease APK 输出到 web/android/app/build/outputs/apk/release/。Debug APK 使用 npm run android:debug,应用商店 AAB 使用 npm run android:aab。连接、离线同步、ADB 调试、Keystore 和签名说明见 Capacitor Android 构建与调试。
方式 4:CLI
# PowerShell
.\scripts\mpp.ps1 server start # 启动独立后台 daemon
.\scripts\mpp.ps1 run <url-or-file> # 提交并等待
.\scripts\mpp.ps1 submit .\media\ --recursive # 批量提交
.\scripts\mpp.ps1 status # 任务统计与活跃任务
# bash
./scripts/mpp server start
./scripts/mpp run <url>
# 远程 daemon、Bearer token 与 JSON 输出
./scripts/mpp --server https://mpp.example --token-env MPP_TOKEN --json task list
# 当前进程内的一次性 CLI / API 流程
./scripts/mpp config preset api-flow
./scripts/mpp run --direct --api-flow <url-or-file>CLI 已覆盖任务生命周期、归档与字幕、Provider/模型/flow、来源认证、知识库、声纹、日志、存储、服务端文件系统和移动端同步。完整命令见 CLI 使用参考。mpp serve 保留为前台调试入口。
# 后端 (热重载)
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/sync/changes- Android 增量同步归档变更GET /api/sync/archives/{id}/manifest- 获取离线文件清单GET /api/sync/archives/{id}/files/{path}- 下载清单内的离线文件
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。
在前端设置页面或根目录 config.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
- Android: Capacitor WebView、原生 SQLite/Keystore、Android Gradle Plugin
- AI: Qwen3-ASR, pyannote-audio, UVR5 (audio-separator), OpenAI SDK(Anthropic / OpenAI / DeepSeek v4 / OpenAI-compatible)
- 下载: yt-dlp, FFmpeg
- 导图节点聚焦交互未完全解决: 当前已实现“点击节点后按局部子树重新取景”的一版近似方案,但对于右侧长文本节点,镜头中心、缩放范围、以及“局部节点先布局再把其他节点拼接回来”的效果仍不稳定,和预期交互还有差距。
- LLM API 总结链路需要切换到本地模型: 目前总结/导图相关能力仍主要依赖远程 LLM API,后续需要支持使用本地模型完成总结与知识树生成。
- 知识树总结会误把多个章节并在一起: 典型案例是“翁家翌”相关内容,多个章节会在知识树摘要阶段被合并,导致章节边界和主题拆分不准确。
MIT