视频字幕识别系统 — 项目说明
基于 Spring Boot + 阿里云视觉智能平台的视频字幕识别 Web 应用,上传视频后自动解析并下载中/英文字幕。(源代码密钥已移除方便提交仓库,这个网址已经打不开了)
一、项目简介
这是一个完整的 Web 应用,用户通过浏览器上传视频文件(或使用默认测试视频),系统调用阿里云视频识别(videorecog)API 提交异步识别任务,待任务完成后自动解析出中文字幕和英文字幕的下载链接,前端一键下载 SRT 字幕文件。
核心流程:
选择视频 → 上传至服务器 → 提交阿里云识别任务 → 轮询查询异步结果 → 解析字幕下载链接 → 下载字幕二、技术栈
| 层次 | 技术 |
|---|---|
| 后端框架 | Spring Boot 3.2.12 |
| JDK | Java 17 |
| 构建工具 | Maven |
| 云服务 | 阿里云视觉智能平台(videorecog + viapi) |
| 阿里云 SDK | videorecog20200320(视频识别)、viapi20230117(异步结果查询) |
| 前端 | 原生 HTML + CSS + JavaScript(单页应用) |
| 日志 | SLF4J + Logback |
三、项目结构
vidio-demo/ ├── pom.xml # Maven 依赖配置 ├── src/main/ │ ├── java/com/example/demo/ │ │ ├── DemoApplication.java # Spring Boot 启动类 │ │ ├── config/ │ │ │ ├── AliyunProperties.java # 阿里云 API 配置属性(映射配置文件) │ │ │ └── WebMvcConfig.java # CORS 跨域 & 静态资源映射 │ │ ├── constant/ │ │ │ └── AliyunApiConstant.java # API 常量(默认测试视频 URL 等) │ │ ├── controller/ │ │ │ ├── HelloController.java # 健康检查接口 /hello │ │ │ └── VideoCastCrewController.java # 核心 REST 接口(上传、提交识别、查询结果) │ │ ├── model/ │ │ │ ├── RecognizeRequest.java # 识别请求 DTO │ │ │ └── RecognizeResultResponse.java # 识别结果响应 DTO │ │ ├── service/ │ │ │ ├── VideoCastCrewService.java # 服务接口 │ │ │ └── impl/ │ │ │ └── VideoCastCrewServiceImpl.java # 服务实现(调用阿里云 SDK) │ │ └── test/ │ │ ├── RecognizeVideoCastCrewList.java # 视频识别测试 │ │ └── GetAsyncJobResult.java # 异步结果查询测试 │ └── resources/ │ ├── application.properties # 应用配置(端口、上传目录、阿里云密钥等) │ ├── logback-spring.xml # 日志配置 │ ├── static/ │ │ └── index.html # 前端页面(单文件 SPA) │ └── META-INF/ │ └── additional-spring-configuration-metadata.json四、REST API 接口
4.1 视频上传
POST /api/video/upload Content-Type: multipart/form-data 参数: file (视频文件)响应示例:
{"success":true,"message":"视频上传成功","fileName":"demo.mp4","storedFileName":"20260620001700_8e76571d_demo.mp4","fileSize":5242880,"fileUrl":"/uploads/videos/20260620001700_8e76571d_demo.mp4","uploadTime":"20260620001700"}4.2 提交视频识别任务
POST /api/video/cast-crew-recognition Content-Type: application/json 请求体: { "videoUrl": "https://example.com/video.mp4" } (videoUrl 可选,不传则使用默认测试视频)响应示例:
{"success":true,"jobId":"A1B2C3D4-5678-90EF-GHIJ-KLMNOPQRSTUV","message":"任务已提交成功,请使用 jobId 查询异步结果"}4.3 查询异步识别结果
GET /api/video/cast-crew-recognition/{jobId}/result响应示例:
{"success":true,"jobId":"A1B2C3D4-...","rawResult":"{ ... 阿里云 API 原始 JSON ... }","message":"查询成功"}前端收到后会自动解析rawResult中的中英文字幕下载 URL。
4.4 健康检查
GET /hello → "Hello, Spring Boot!"五、前端页面
前端是一个独立的单页应用(src/main/resources/static/index.html),暗色主题,支持:
- 拖拽 / 点击上传视频文件(支持 MP4 / MOV / AVI / MKV)
- 一键提交视频解析任务
- 自动轮询异步任务结果(每 3 秒一次,最多 60 次)
- 任务状态实时显示(处理中 / 已完成 / 失败)
- 中英文字幕解析与一键下载SRT 文件
- 后端 JSON 响应可视化 & 控制台日志实时输出
- 背景粒子动画
六、关键实现细节
6.1 阿里云 SDK 集成
- 提交识别:使用
com.aliyun:videorecog20200320SDK,调用RecognizeVideoCastCrewList接口,返回jobId。 - 查询结果:使用
com.aliyun:viapi20230117SDK,调用GetAsyncJobResult接口,传入jobId查询异步任务的执行结果。
两阶段分别在 VideoCastCrewServiceImpl 中实现,通过AliyunProperties注入 AccessKey 和 Endpoint 配置。
6.2 文件上传
视频文件上传后存储到本地uploads/videos/目录,以时间戳_UUID_原始文件名格式命名,确保文件名唯一且安全。通过WebMvcConfig将目录映射为静态资源,前端可直接访问。
6.3 跨域支持
在WebMvcConfig中配置了 CORS,允许任意域名访问/api/**接口,方便前后端分离部署或本地开发调试。
6.4 异步轮询
前端 JS 在提交识别任务后,自动每 3 秒轮询一次结果接口,直到任务状态变为PROCESS_SUCCESS(成功)或PROCESS_FAILED(失败),最多轮询 60 次(约 3 分钟)。
七、如何运行
前置条件
- JDK 17+
- Maven 3.6+
- 阿里云视觉智能平台账号(需开通视频识别服务)
配置
在src/main/resources/application.properties中配置:
server.port=8081 # 阿里云 AccessKey(必填,替换为你自己的密钥) aliyun.access-key-id=你的AccessKeyID aliyun.access-key-secret=你的AccessKeySecret aliyun.videorecog-endpoint=videorecog.cn-shanghai.aliyuncs.com aliyun.viapi-endpoint=viapi.cn-shanghai.aliyuncs.com启动
# 编译并运行mvn spring-boot:run -Dspring-boot.run.fork=false启动后访问 http://localhost:8081 即可打开前端页面。
八、注意事项
- 阿里云视频识别为异步服务,提交任务后通常需要等待一段时间(视视频长度而定),前端会自动轮询等待。
- 上传视频大小限制默认为
500MB,可在application.properties中调整。 - 本项目中的 AccessKey 等凭证信息请妥善保管,切勿提交到公开仓库。
- 默认测试视频来自阿里云官方示例,优先使用该链接验证接口连通性。
这是作者首次利用这个方式来完成这个项目,本篇说明也是使用AI提取项目内容完成,若有不对的地方还望海涵
完