| 模块 | 功能 | 技术 |
|---|---|---|
| ASR | 语音转文字,句级时间戳 | 阿里云ASR / Faster-Whisper |
| LLM | 语义分段、重要性评分、视觉需求判定 | qwen3-vl-plus |
| VL | 动作识别、UI理解、场景分析 | qwen3-vl-plus |
| Fusion | 双模态对齐、冲突检测、语义增强 | 自研融合算法 |
针对高频视频分析场景的智能优化策略:
传统方式:下载完整视频 → 提取音频 → 分析 [5GB 视频]
优化方式:FFmpeg流式提取音频 → 直接分析 [500MB 音频流]
- ASR阶段只拉取音频流,不下载视频文件
- VL阶段按需下载片段,避免完整视频存储
- FFmpeg直接从URL读取,零本地存储
| 视频类型 | 时长 | 处理策略 |
|---|---|---|
| 短视频 | ≤30s | 全量分析(成本低) |
| 中等视频 | 30s-3min | ASR + LLM + Top 20% VL |
| 长视频 | ≥3min | 采样分析(开头+中间+结尾) |
# 计算视频指纹
video_hash = perceptual_hash(video_url)
# 已处理过?直接返回缓存结果
if cache.get(video_hash):
return cached_result- 相同视频不同URL自动识别
- 转发、搬运内容不重复分析
- 缓存结果秒级返回
针对短视频平台特点的特殊优化:
- 元数据利用:封面图、标题、热度预判价值
- 短视频友好:15-60秒视频低成本全量分析
- 快速筛选:基于热度指标智能降级处理
┌─────────────────────────────────────────────────────────────────┐
│ 视频URL输入 │
└─────────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 视频指纹去重 │
│ 已处理过?直接返回缓存结果 │
└─────────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 智能时长分类 │
│ 短视频(≤30s) / 中等(30s-3min) / 长视频(≥3min) │
└─────────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ 流式音频提取 (FFmpeg) │
│ 不下载视频,只拉取音频流 │
└─────────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ ASR 语音识别 │
│ 阿里云ASR / Faster-Whisper │
└─────────────────────────────┬───────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────────┐
│ LLM 语义理解 │
│ 分段 → 评分 → 视觉需求判定 → 摘要生成 │
└─────────────────────────────┬───────────────────────────────────┘
↓
┌─────────┴─────────┐
↓ ↓
importance > 0.7 importance ≤ 0.7
↓ ↓
┌───────────────────────┐ 只输出文本分析
│ 流式下载视频片段 │
│ (need_vision=true) │
└───────────┬───────────┘
↓
┌───────────────────────┐
│ VL 视觉理解 │
│ 动作识别 / UI理解 │
└───────────┬───────────┘
↓
┌───────────────────────┐
│ 多模态融合 │
│ 文本-视觉对齐 / 增强 │
└───────────┬───────────┘
↓
┌───────────────────────┐
│ 结构化输出 │
│ 高亮片段 / 摘要 / 标签 │
└───────────────────────┘
API层
↓
任务队列(Kafka / Redis)
↓
┌────────┬────────┬────────┬────────┐
↓ ↓ ↓ ↓ ↓
ASR LLM Clip VL Fusion
Worker Worker Worker Worker Worker
视频URL → 指纹去重 → 时长分类 → 流式音频 → ASR → LLM分析
↓
need_vision=true?
↓ ↓
Yes No
↓ ↓
流式下载片段 跳过
↓
VL分析
↓
融合输出
| 场景 | 视频数量 | 策略 |
|---|---|---|
| 实时分析 | 单个 | 完整流水线 |
| 批量处理 | 10-100 | 并行Worker + 去重 |
| 大规模 | 1000+ | 采样 + 热度筛选 + 缓存 |
- Python 3.10+
- Node.js 18+ (前端)
- PostgreSQL 15+
- Redis 7+
- FFmpeg 6.0+
# 克隆项目
git clone https://github.com/your-repo/asvl.git
cd asvl
# 安装Python依赖
pip install -e .
# 安装前端依赖
cd frontend && npm install && cd ..
# 配置环境变量
cp .env.example .env
# 编辑 .env 填入API密钥
# 启动服务 (Docker Compose)
docker compose up -d
# 或手动启动
uvicorn asvl.main:app --host 0.0.0.0 --port 8000 &
celery -A asvl.workers.celery_app worker --loglevel=info &
cd frontend && npm run dev &# 创建分析任务
curl -X POST http://localhost:8000/api/v1/tasks/ \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://example.com/video.mp4",
"options": {
"language": "zh",
"vl_enabled": true
}
}'
# 响应
{
"task_id": "task_xxx",
"status": "pending",
"created_at": "2024-01-01T00:00:00"
}
# 查询任务状态
curl http://localhost:8000/api/v1/tasks/task_xxx/
# 获取分析结果
curl http://localhost:8000/api/v1/tasks/task_xxx/result/# LLM/VL配置 (qwen3-vl-plus)
LLM_API_KEY=your_api_key
LLM_BASE_URL=https://apis.iflow.cn/v1
LLM_MODEL=qwen3-vl-plus
# 并发控制 (关键!)
LLM_MAX_CONCURRENT=1 # API同时只能1个请求
# 阿里云ASR
ALIYUN_ASR_APP_KEY=xxx
ALIYUN_ASR_ACCESS_KEY=xxx
ALIYUN_ASR_SECRET_KEY=xxx
# 成本控制
VL_TOP_K_PERCENT=0.2 # 只处理Top 20%高价值片段
MAX_CLIPS_PER_VIDEO=50
# 流式处理
STREAM_AUDIO_ENABLED=true
STREAM_CLIP_ENABLED=true
# 视频指纹去重
DEDUP_ENABLED=true
DEDUP_CACHE_TTL=86400 # 缓存24小时# configs/settings.py
VIDEO_DURATION_THRESHOLDS = {
"short": 30, # ≤30秒: 全量分析
"medium": 180, # 30s-3min: ASR+LLM+Top VL
"long": 180, # ≥3min: 采样分析
}
IMPORTANCE_THRESHOLD_FOR_VL = 0.7 # 高于0.7才做VL分析| 优化项 | 传统方式 | 优化后 | 节省 |
|---|---|---|---|
| 网络带宽 | 5GB/视频 | 500MB/视频 | 90% |
| 本地存储 | 5GB/视频 | 100MB/片段 | 98% |
| 重复处理 | 每次完整分析 | 缓存命中 | 100% |
| VL调用 | 全量 | Top 20% | 80% |
| 视频时长 | ASR | LLM | VL(可选) | 总计 |
|---|---|---|---|---|
| 30秒 | 5s | 3s | 2s | ~10s |
| 3分钟 | 15s | 10s | 5s | ~30s |
| 10分钟 | 45s | 20s | 10s | ~75s |
- 自动识别违规内容
- 关键片段提取审核
- 文本+视觉双重校验
- 教程视频结构化
- 操作步骤提取
- 关键知识点标注
- 精彩片段自动剪辑
- 视频摘要生成
- 热点内容发现
- 视频内容标签化
- 用户行为分析
- 内容趋势洞察
- 框架: FastAPI + Uvicorn
- 任务队列: Celery + Redis
- 数据库: PostgreSQL + SQLAlchemy
- ASR: 阿里云ASR / Faster-Whisper
- LLM/VL: qwen3-vl-plus (OpenAPI兼容)
- 框架: React 18 + TypeScript
- 构建: Vite
- 样式: Tailwind CSS
- 动画: Framer Motion
- 容器化: Docker + Docker Compose
- 视频处理: FFmpeg
- 存储: 阿里云OSS / 本地存储
asvl/
├── asvl/ # 后端代码
│ ├── core/ # 核心模块
│ │ ├── asr/ # ASR语音识别
│ │ ├── llm/ # LLM语义理解
│ │ ├── clipper/ # 视频裁剪
│ │ ├── vl/ # 视觉理解
│ │ └── fusion/ # 多模态融合
│ ├── workers/ # Celery任务
│ ├── api/ # API路由
│ ├── db/ # 数据库模型
│ └── utils/ # 工具函数
├── frontend/ # 前端代码
│ ├── src/
│ │ ├── pages/ # 页面组件
│ │ ├── components/ # UI组件
│ │ └── lib/ # 工具库
│ └── package.json
├── configs/ # 配置文件
│ ├── settings.py # 全局配置
│ └── prompts/ # Prompt模板
├── tests/ # 测试代码
├── docker-compose.yml # Docker配置
└── pyproject.toml # Python依赖
欢迎提交 Issue 和 Pull Request!
- Fork 项目
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
本项目采用 MIT 许可证 - 详见 LICENSE 文件
- 阿里云ASR - 语音识别服务
- qwen3-vl-plus - 多模态大模型
⭐ 如果这个项目对你有帮助,请给一个 Star!⭐
Made with ❤️ by ASVL Team