Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

VidSumAI Logo

VidSumAI - 视频下载解析神器

粘贴链接,一键下载全网视频 · AI 智能总结 · 思维导图 · 互动问答


支持 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 时项目仍可运行,仅部分高清画质(需音视频流合并)会自动降级为单格式。


页面预览

image image image image image image image

技术栈

后端(Python)

框架 / 库 版本 用途
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 内置 轻量级数据库,零配置

前端(Node.js)

框架 / 库 版本 用途
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
Loading

通信说明

  • 前端 → 后端:常规接口走 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

核心工作流

1. 视频解析与下载

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
Loading

项目对抖音做了专门的适配。由于抖音的链接格式特殊(如 https://v.douyin.com/xxx 短链或带 modal_id 的主页链接),且 yt-dlp 对抖音的支持不稳定,因此自研了 DouyinParser 模块直接调用抖音接口解析,保证无水印视频的稳定提取。其他所有平台则统一交给 yt-dlp 处理。

2. AI 总结与问答

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(逐字回答)
Loading

字幕提取策略(按平台优先级):

平台 提取方式 说明
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

1️⃣ 克隆项目

git clone <your-repo-url>
cd VidSumAI

2️⃣ 配置环境变量

cd backend
cp .env.example .env

编辑 backend/.env,至少填写 ZHIPU_API_KEY(详见 环境变量配置)。

3️⃣ 安装依赖

# 后端(推荐使用国内镜像加速)
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

4️⃣ 启动服务

需要两个终端分别启动前后端:

# 终端 1 — 启动后端
cd backend
python main.py
# 终端 2 — 启动前端
cd frontend
npm run dev

5️⃣ 访问应用

打开浏览器访问 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

API 接口文档

视频处理

方法 路径 说明
GET /api/health 健康检查
POST /api/parse 解析视频信息(标题/封面/格式列表)
POST /api/download 下载视频并返回文件流
POST /api/direct-url 获取视频直链
GET /api/proxy/thumbnail 代理获取缩略图(绕过防盗链)

AI 能力(SSE 流式)

方法 路径 说明 SSE 事件
POST /api/summarize AI 视频总结 subtitlesummarymindmapquotadone
POST /api/chat AI 视频问答 answerdone

用户认证

方法 路径 说明 鉴权
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 "创建时间"
    }
Loading

VIP 权限判定逻辑

flowchart TD
    A[用户请求 AI 总结] --> B{已登录?}
    B -->|否| C[❌ 拒绝:请先登录]
    B -->|是| D{是 VIP 且未过期?}
    D -->|是| E[✅ 允许:无限制使用]
    D -->|否| F{今日次数 &lt; 3?}
    F -->|是| G[✅ 允许:次数 +1]
    F -->|否| H[❌ 拒绝:今日额度已用完]

    style E fill:#dcfce7,stroke:#16a34a
    style C fill:#fee2e2,stroke:#dc2626
    style H fill:#fee2e2,stroke:#dc2626
Loading

常见问题 FAQ

Q1:未安装 ffmpeg 会怎样?

项目仍可正常运行。高清视频(如 YouTube 1080p+)的画面和声音是分开的流,需要 ffmpeg 合并。未安装时会自动降级为无需合并的单格式(画质可能降低)。

Q2:抖音视频 AI 总结效果不好?

抖音平台没有标准的 CC 字幕,项目会使用视频的描述文案(作者写的标题/简介)作为 AI 总结的素材。因此总结质量取决于作者文案的丰富程度。如果文案过短,会提示"无可用字幕"。

Q3:yt-dlp 解析视频失败?

yt-dlp 需要保持最新版本以应对各平台的接口变更:

pip install --upgrade yt-dlp
Q4:端口被占用怎么办?
# 查看占用进程
netstat -ano | findstr :8000    # Windows
# 终止进程
taskkill /PID <PID> /F
Q5:如何重置数据库?

直接删除 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 独立设计并开发,相关知识产权归作者所有。

  • 本项目仅用于 学术交流 目的,不得用于任何商业用途。
  • 未经作者书面许可,禁止将本项目代码、设计文档、论文内容等用于商业出版、售卖或二次分发。
  • 引用本项目代码或设计思想时,请注明出处并保留原作者信息。
  • 作者保留对本项目的最终解释权。

About

1800+ 平台下载 · GLM 驱动的 AI 视频总结神器。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages