支持 YouTube、Bilibili、抖音、TikTok 等 1800+ 视频平台,不仅能下载,更能让 AI 帮你「读懂」每一个视频。
VidSumAI 围绕「下载 → 理解 → 互动」三大环节设计,提供端到端的视频处理体验。
| 能力 | 说明 | 技术实现 |
|---|---|---|
| 🎬 万能解析下载 | 粘贴链接即可解析视频标题、封面、时长及多种清晰度格式,选择后一键下载 | 基于 yt-dlp,支持 1800+ 平台 |
| 📱 抖音专用引擎 | 针对抖音分享链接自研解析模块,无水印提取视频与文案 | 独立 DouyinParser,逆向抖音接口 |
| 🤖 AI 视频总结 | 自动提取字幕,调用大模型流式生成结构化总结 | 智谱 GLM-5.2 + SSE 流式输出 |
| 🧠 智能思维导图 | 将视频内容提炼为层次化思维导图,一键可视化要点 | GLM 生成 Markdown + markmap 渲染 |
| 💬 视频互动问答 | 基于视频字幕上下文,向 AI 提问任意问题 | 字幕检索 + 大模型对话 |
| 🔐 用户认证体系 | 邮箱注册登录,JWT 鉴权,VIP 权限分级 | JWT + bcrypt 加密 |
| 🎁 免费额度 + VIP | 免费用户每日 3 次 AI 总结,VIP 无限制使用 | SQLite 计数 + 权限中间件 |
💡 ffmpeg 友好降级:未安装 ffmpeg 时项目仍可运行,仅部分高清画质(需音视频流合并)会自动降级为单格式。
| 框架 / 库 | 版本 | 用途 |
|---|---|---|
| FastAPI | ≥ 0.135 | 高性能异步 Web 框架,提供自动 API 文档 |
| yt-dlp | ≥ 2026.1 | 万能视频解析与下载引擎 |
| openai SDK | ≥ 1.0 | 调用智谱 GLM(OpenAI 兼容接口) |
| uvicorn | ≥ 0.34 | ASGI 服务器 |
| bcrypt | ≥ 4.0 | 密码哈希加密 |
| PyJWT | ≥ 2.8 | JWT Token 签发与校验 |
| httpx | ≥ 0.28 | 异步 HTTP 客户端(缩略图代理) |
| SQLite | 内置 | 轻量级数据库,零配置 |
| 框架 / 库 | 版本 | 用途 |
|---|---|---|
| Vue 3 | ^ 3.5 | 渐进式前端框架(Composition API) |
| Vite | ^ 7.3 | 极速构建与热更新 |
| Tailwind CSS | ^ 4.2 | 原子化 CSS 框架 |
| Axios | ^ 1.13 | HTTP 请求库 |
| marked | ^ 17.0 | Markdown 解析渲染 |
| markmap-lib / view | ^ 0.18 | 思维导图可视化 |
VidSumAI 采用前后端分离架构,前端通过 Vite 代理与后端通信,后端聚合多个外部服务完成视频处理与 AI 能力调用。
graph TB
subgraph Frontend ["🖥️ 前端 — Vue 3 + Vite"]
UI[用户界面<br/>解析 · 下载 · 总结 · 问答]
end
subgraph Backend ["⚙️ 后端 — FastAPI"]
Router[API 路由层]
Parser[视频解析模块]
AI[AI 总结模块]
Auth[认证鉴权模块]
DB[(SQLite 数据库)]
end
subgraph External ["🌐 外部服务"]
YDL[yt-dlp<br/>1800+ 平台]
DY[抖音接口]
GLM[智谱 GLM-5.2<br/>大模型 API]
end
UI -->|HTTP / SSE| Router
Router --> Parser
Parser --> YDL
Parser --> DY
Router --> AI
AI --> GLM
Router --> Auth
Auth --> DB
style Frontend fill:#e0f2fe,stroke:#0284c7
style Backend fill:#fef3c7,stroke:#d97706
style External fill:#dcfce7,stroke:#16a34a
通信说明:
- 前端 → 后端:常规接口走
fetch/axios;AI 总结与问答走 SSE(Server-Sent Events)流式传输,实现打字机效果。 - 后端 → 外部:视频解析为同步阻塞调用(通过线程池
run_in_executor异步化);大模型调用为流式响应。
VidSumAI/
├── backend/ # 后端服务(Python FastAPI)
│ ├── main.py # 应用入口 & 核心路由(解析/下载/直链/缩略图代理)
│ ├── downloader.py # yt-dlp 封装(通用平台视频解析与下载)
│ ├── douyin.py # 抖音专用解析模块(逆向接口)
│ ├── summarizer.py # AI 能力层(字幕提取 + GLM 总结/思维导图/问答)
│ ├── api_summarize.py # AI 总结 & 问答路由(SSE 流式)
│ ├── api_auth.py # 用户注册/登录/信息路由
│ ├── api_payment.py # Stripe 支付路由(可选)
│ ├── auth.py # JWT 鉴权 + bcrypt 密码工具
│ ├── database.py # SQLite 数据层(用户/订单/配额)
│ ├── requirements.txt # Python 依赖清单
│ ├── .env.example # 环境变量模板
│ └── data/ # SQLite 数据库文件(自动生成)
│
├── frontend/ # 前端应用(Vue 3 + Vite)
│ ├── index.html # HTML 入口
│ ├── vite.config.js # Vite 配置(含 /api 代理)
│ ├── package.json # Node 依赖清单
│ ├── public/
│ │ └── favicon.svg # 站点 Logo
│ └── src/
│ ├── App.vue # 根组件
│ ├── main.js # 应用入口
│ ├── style.css # 全局样式(Tailwind)
│ ├── api/ # 前端 API 封装层
│ │ ├── video.js # 视频解析/下载
│ │ ├── summarize.js # AI 总结(SSE 客户端)
│ │ ├── auth.js # 认证接口
│ │ └── payment.js # 支付接口
│ └── components/ # Vue 组件
│ ├── AppHeader.vue # 顶部导航栏
│ ├── AppFooter.vue # 页脚
│ ├── HeroSection.vue # 首屏主视觉区
│ ├── FeatureSection.vue # 功能介绍区
│ ├── HowToSection.vue # 使用教程区
│ ├── ComparisonSection.vue # 对比区
│ ├── PricingSection.vue # 定价方案区
│ ├── PlatformSection.vue # 平台展示区
│ ├── AuthModal.vue # 登录注册弹窗
│ ├── VideoResult.vue # 视频解析结果展示
│ └── VideoSummary.vue # AI 总结与问答面板
│
├── docs/ # 项目文档
│ └── 保姆级本地运行指南.md
└── .gitignore
flowchart LR
A[用户粘贴链接] --> B{抖音链接?}
B -->|是| C[DouyinParser<br/>专用引擎]
B -->|否| D[yt-dlp<br/>通用引擎]
C --> E[返回视频信息<br/>标题/封面/格式列表]
D --> E
E --> F[用户选择清晰度]
F --> G[服务端下载]
G --> H[📦 文件下载到本地]
style C fill:#fff1eb,stroke:#e879f9
style D fill:#e0f2fe,stroke:#0284c7
style H fill:#dcfce7,stroke:#16a34a
项目对抖音做了专门的适配。由于抖音的链接格式特殊(如 https://v.douyin.com/xxx 短链或带 modal_id 的主页链接),且 yt-dlp 对抖音的支持不稳定,因此自研了 DouyinParser 模块直接调用抖音接口解析,保证无水印视频的稳定提取。其他所有平台则统一交给 yt-dlp 处理。
sequenceDiagram
participant U as 用户
participant F as 前端
participant B as 后端
participant E as 字幕提取
participant AI as 智谱 GLM-5.2
U->>F: 点击「AI 总结」
F->>B: POST /api/summarize (SSE)
B->>B: 校验登录 & 配额
B->>E: 提取字幕
E-->>B: 字幕文本
B-->>F: SSE: subtitle(字幕信息)
loop 流式输出
B->>AI: 发送总结请求
AI-->>B: token by token
B-->>F: SSE: summary(逐字输出)
end
B->>AI: 生成思维导图
AI-->>B: Markdown 思维导图
B-->>F: SSE: mindmap(思维导图)
B-->>F: SSE: done(完成)
U->>F: 输入问题提问
F->>B: POST /api/chat (SSE)
B->>AI: 基于字幕问答
AI-->>B: 流式回答
B-->>F: SSE: answer(逐字回答)
字幕提取策略(按平台优先级):
| 平台 | 提取方式 | 说明 |
|---|---|---|
| Bilibili | 调用官方字幕 API | 直接获取 JSON 字幕,准确率最高 |
| 抖音 | 视频描述文案(desc)替代 | 抖音无标准 CC 字幕,用作者文案供 AI 总结 |
| 其他平台 | yt-dlp 提取自动字幕 | 获取 YouTube 等平台的自动/手动字幕 |
| 工具 | 版本 | 检查命令 |
|---|---|---|
| Python | ≥ 3.10 | python --version |
| Node.js | ≥ 18 | node -v |
| npm | ≥ 9 | npm -v |
| Git | 任意 | git --version |
| ffmpeg | 可选 | ffmpeg -version |
git clone <your-repo-url>
cd VidSumAIcd backend
cp .env.example .env编辑 backend/.env,至少填写 ZHIPU_API_KEY(详见 环境变量配置)。
# 后端(推荐使用国内镜像加速)
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 前端
cd ../frontend
npm config set registry https://registry.npmmirror.com
npm install需要两个终端分别启动前后端:
# 终端 1 — 启动后端
cd backend
python main.py# 终端 2 — 启动前端
cd frontend
npm run dev打开浏览器访问 http://localhost:5173 即可使用。
| 服务 | 地址 |
|---|---|
| 🖥️ 前端页面 | http://localhost:5173 |
| ⚙️ 后端 API | http://localhost:8000 |
| 📖 API 文档(Swagger) | http://localhost:8000/docs |
| 📖 API 文档(ReDoc) | http://localhost:8000/redoc |
💡 项目使用 SQLite,无需安装任何数据库软件,后端首次启动时会自动建表。
所有配置通过 backend/.env 文件管理(已被 .gitignore 排除,不会提交)。
# ✅ 必填 — 智谱 GLM API Key(用于 AI 视频总结)
# 获取地址:https://open.bigmodel.cn/
ZHIPU_API_KEY=your-zhipu-api-key-here
# ✅ 必填 — JWT 密钥(用户登录认证,请使用强随机字符串)
JWT_SECRET=your-jwt-secret-change-in-production
# 🔧 可选 — 前端 URL
FRONTEND_URL=http://localhost:5173| 变量 | 必填 | 用途 |
|---|---|---|
ZHIPU_API_KEY |
✅ | 调用智谱 GLM-5.2 生成视频总结、思维导图、AI 问答 |
JWT_SECRET |
✅ | 用户登录 Token 的签名密钥 |
FRONTEND_URL |
🔧 | 支付回跳地址,默认 http://localhost:5173 |
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/api/health |
健康检查 |
POST |
/api/parse |
解析视频信息(标题/封面/格式列表) |
POST |
/api/download |
下载视频并返回文件流 |
POST |
/api/direct-url |
获取视频直链 |
GET |
/api/proxy/thumbnail |
代理获取缩略图(绕过防盗链) |
| 方法 | 路径 | 说明 | SSE 事件 |
|---|---|---|---|
POST |
/api/summarize |
AI 视频总结 | subtitle → summary → mindmap → quota → done |
POST |
/api/chat |
AI 视频问答 | answer → done |
| 方法 | 路径 | 说明 | 鉴权 |
|---|---|---|---|
POST |
/api/auth/register |
邮箱注册 | ❌ |
POST |
/api/auth/login |
邮箱登录 | ❌ |
GET |
/api/auth/me |
获取当前用户信息 | ✅ |
完整的交互式 API 文档可在启动后访问 http://localhost:8000/docs 体验。
项目使用 SQLite,包含两张核心表:
erDiagram
users ||--o{ orders : "拥有"
users {
INTEGER id PK "自增主键"
TEXT email UK "邮箱(唯一)"
TEXT password_hash "bcrypt 密码哈希"
INTEGER is_vip "是否 VIP(0/1)"
TEXT vip_expire_at "VIP 到期时间(UTC ISO)"
INTEGER daily_summary_count "当日总结次数"
TEXT last_summary_date "上次总结日期"
TEXT created_at "创建时间"
TEXT updated_at "更新时间"
}
orders {
INTEGER id PK "自增主键"
TEXT order_no UK "订单号(唯一)"
INTEGER user_id FK "用户 ID"
INTEGER amount "金额(分)"
TEXT currency "币种(默认 cny)"
TEXT status "状态(pending/paid)"
TEXT plan_type "套餐类型"
TEXT stripe_session_id UK "Stripe 会话 ID"
TEXT paid_at "支付时间"
TEXT created_at "创建时间"
}
VIP 权限判定逻辑:
flowchart TD
A[用户请求 AI 总结] --> B{已登录?}
B -->|否| C[❌ 拒绝:请先登录]
B -->|是| D{是 VIP 且未过期?}
D -->|是| E[✅ 允许:无限制使用]
D -->|否| F{今日次数 < 3?}
F -->|是| G[✅ 允许:次数 +1]
F -->|否| H[❌ 拒绝:今日额度已用完]
style E fill:#dcfce7,stroke:#16a34a
style C fill:#fee2e2,stroke:#dc2626
style H fill:#fee2e2,stroke:#dc2626
Q1:未安装 ffmpeg 会怎样?
项目仍可正常运行。高清视频(如 YouTube 1080p+)的画面和声音是分开的流,需要 ffmpeg 合并。未安装时会自动降级为无需合并的单格式(画质可能降低)。
Q2:抖音视频 AI 总结效果不好?
抖音平台没有标准的 CC 字幕,项目会使用视频的描述文案(作者写的标题/简介)作为 AI 总结的素材。因此总结质量取决于作者文案的丰富程度。如果文案过短,会提示"无可用字幕"。
Q3:yt-dlp 解析视频失败?
yt-dlp 需要保持最新版本以应对各平台的接口变更:
pip install --upgrade yt-dlpQ4:端口被占用怎么办?
# 查看占用进程
netstat -ano | findstr :8000 # Windows
# 终止进程
taskkill /PID <PID> /FQ5:如何重置数据库?
直接删除 backend/data/app.db 文件,重启后端即可自动重建空数据库。
Q6:如何给用户手动开通 VIP?
通过 SQLite 修改 users 表:
UPDATE users SET is_vip = 1, vip_expire_at = '2126-01-01T00:00:00+00:00' WHERE email = 'xxx@example.com';本项目(VidSumAI - 视频下载解析神器)由 chp 独立设计并开发,相关知识产权归作者所有。
- 本项目仅用于 学术交流 目的,不得用于任何商业用途。
- 未经作者书面许可,禁止将本项目代码、设计文档、论文内容等用于商业出版、售卖或二次分发。
- 引用本项目代码或设计思想时,请注明出处并保留原作者信息。
- 作者保留对本项目的最终解释权。