01 — 样例视频上传
1. 功能定义与核心意义
功能定义
样例视频上传是「爆款结构迁移引擎」工作流的第一步。用户将需要作为模板参考的爆款短视频上传至系统,后端自动完成视频基础信息的全面解析,为后续的结构分析和模板提取提供数据基础。
核心意义
- 全流程起点:没有样例视频,后续的结构拆解、缺口识别、SVT 生成均无法执行。本模块是整个平台的"燃料入口"
- 降低创作门槛:用户无需手动描述视频的帧率、时长、分段结构——上传视频后系统自动完成所有基础分析
- 桥接样例与目标:被分析的样例视频成为「成功标杆」,系统提取其结构特征后,可迁移到任意新主题上
解决的问题
| 痛点 | 本模块的解决方案 |
|---|---|
| 不知道爆款视频的成功因素 | 自动提取 fps / 时长 / 分辨率 / 镜头切分点,为 LLM 结构分析提供量化数据 |
| 人工描述视频太慢 | 拖拽上传即可,3 秒内完成全部基础信息提取 |
| 手动计算时间分段不准 | OpenCV 逐帧分析镜头变化,精确到帧级的镜头切换点检测 |
2. 详细操作步骤
前置条件
- 后端服务已启动(
python main.py,运行于http://localhost:8000) - 已通过浏览器打开
frontend/index.html - 准备一个 MP4 / MOV 格式的样例视频文件
操作步骤
Step 1:进入上传区域
在页面左侧「第一步:上传样例视频」区域,可以看到一个虚线框的上传区域。
Step 2:上传文件(两种方式任选其一)
- 方式 A — 拖拽上传:将视频文件从文件管理器拖入虚线框中
- 方式 B — 点击选择:点击虚线框区域,在弹出的文件选择对话框中选中视频文件
Step 3:等待分析完成
上传后,上传区域下方会出现「正在分析视频基础信息...」的加载提示。系统后端自动执行:
- 保存文件至
uploads/目录(以{UUID}_{原文件名}命名) - OpenCV 解析视频基础信息(fps、总帧数、时长、分辨率)
- 按时间轴均匀提取 10 张关键帧
- 逐帧进行直方图比对,检测镜头切换点
- 生成预估的脚本三段时间分配建议(Hook/Body/CTA)
Step 4:确认结果
分析完成后弹窗提示「视频基础信息分析完成!」,同时页面右侧的「第二步:爆款结构分析」和「素材缺口识别」区域会自动显示。
预期结果
| 操作 | 预期 |
|---|---|
| 上传成功 | 弹窗提示分析完成,currentTaskId和currentSampleData设置完成 |
| 结构分析区域显示 | structure-result和gap-section区域的hidden类被移除 |
| 上传失败 | 弹窗提示「上传失败:{错误详情}」 |
返回数据结构
{ "task_id": "uuid-string", "filename": "sample.mp4", "sample_data": { "basic_info": { "fps": 30.0, "duration": 15.5, "total_frames": 465, "resolution": "1920x1080", "width": 1920, "height": 1080 }, "key_frames": ["data:image/jpeg;base64,...", "..."], "shot_changes": [3.0, 6.2, 9.8, 12.1], "estimated_script": { "hook_suggestion": "0-3.0s", "body_suggestion": "3.0-12.4s", "cta_suggestion": "12.4-15.5s" } }, "status": "processed" }3. 使用场景说明
| 场景 | 描述 |
|---|---|
| 竞品分析 | 竞品发布热销视频 → 上传 → 提取结构 → 迁移到自有产品 |
| 多品类复用 | 一个「零食种草」爆款结构 → 上传 → 提取 → 复用至「化妆品」「数码产品」 |
| 内容团队标准化 | 团队将历史爆款集中上传分析,沉淀出一套标准化的视频结构模板库 |
| 新手上手 | 新手创作者不知道如何设计视频结构,找一个行业对标视频上传即可获得结构参考 |
适用条件
- 视频时长建议:5 秒 ~ 5 分钟(过长可能导致处理时间增加和 LLM token 超限)
- 支持格式:MP4、MOV、AVI 等 OpenCV 支持的视频格式
- 文件大小限制:最大 500MB(
MAX_FILE_SIZE配置项) - 需要 OpenCV 视频编解码器支持(通常 Windows/macOS/Linux 预装即可)
4. 参数配置说明
| 参数 | 位置 | 默认值 | 说明 |
|---|---|---|---|
MAX_FILE_SIZE | backend/config.py | 500MB | 最大上传文件大小 |
num_frames | video_processor.extract_key_frames() | 10 | 提取的关键帧数量 |
threshold | video_processor.detect_shot_changes() | 30.0 | 镜头检测的直方图差异阈值(越高越不敏感) |
UPLOAD_DIR | backend/config.py | uploads/ | 上传文件存储目录 |
5. 注意事项与限制
注意事项
- 文件保留:上传的视频文件会持久存储在服务器的
uploads/目录中,如长期运行需定期清理 - task_id 生命周期:每次上传生成唯一
task_id,前端在后续步骤中必须携带此 ID;刷新页面后task_id丢失,需重新上传 - 前后端分离部署:前端通过
const API_BASE = 'http://localhost:8000/api'连接后端;若后端部署在其他地址,需修改此项 - CORS 配置:后端已配置
allow_origins=["*"],允许任意来源的前端访问
功能限制
- 不支持实时流:仅支持上传完整的视频文件,不支持直播流或在线 URL
- 无视频转码:系统不转换视频编码,仅读取元数据和帧数据
- 基础分析为主:关键帧提取和镜头检测基于直方图差异,不涉及 AI 内容理解(AI 分析在第二步由 LLM 完成)
- 大文件风险:超大视频(>2GB)可能在关键帧提取阶段消耗大量内存,建议先剪辑压缩
6. 常见问题解答
Q1:上传后显示"处理失败",怎么办?
A:可能原因包括:
- 视频文件损坏或编码格式不兼容 → 尝试用视频转码工具转为标准 MP4(H.264 编码)
- 视频时长为 0(如单帧图片伪装视频)→ 检查文件完整性
- OpenCV 版本问题 → 确认
opencv-python版本 ≥ 4.8
Q2:上传后没有显示第二步区域?
A:检查浏览器控制台是否有 JavaScript 报错。确认后端服务正常运行(访问http://localhost:8000/是否能返回 JSON)。
Q3:能否不上传视频,直接手动输入视频信息?
A:当前版本不支持手动输入。视频信息解析依赖 OpenCV 库,无法从空数据中生成。未来可考虑增加纯文本描述入口。
Q4:上传的样例视频会被如何使用?
A:仅用于当前会话的结构分析,不会被分享或用于训练模型。上传的视频存储在本地服务器uploads/目录。