Skip to content

Repository files navigation

MediaProcessPipeline

媒体处理管线 - 将音视频转化为结构化知识。

功能特性

  • 媒体下载: 支持 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 ..

VPS / API-only 配置

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 false

Playwright 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:apk

Release 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              # :5173

API 端点

任务管理

  • POST /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 - 更新设置

处理流程

  1. 下载/导入 - 从 URL 下载或导入本地文件,自动尝试下载平台字幕
  2. 人声分离 - UVR5 分离人声(有平台字幕时跳过)
  3. 语音转录 - Qwen3-ASR 转录(有平台字幕时由 LLM 处理)
  4. 内容分析 - LLM 提取元数据、关键词、主题
  5. 文本润色 - LLM 滑动窗口修正转录错误、生成摘要和思维导图
  6. 归档输出 - 保存结构化文件到 data/{title}/

输出文件

每个任务在 data/{title}/ 下生成:

  • source/ - 原始媒体文件
  • metadata.json - 媒体元数据
  • analysis.json - LLM 分析结果
  • transcript.srt - 原始转录 SRT
  • transcript_polished.srt - 润色后 SRT
  • transcript_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,后续需要支持使用本地模型完成总结与知识树生成。
  • 知识树总结会误把多个章节并在一起: 典型案例是“翁家翌”相关内容,多个章节会在知识树摘要阶段被合并,导致章节边界和主题拆分不准确。

License

MIT

About

Automatic video/audio parser and summarizer.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages