当前位置: 首页 > news >正文

Vibe coding实现视频字幕识别系统 — 项目说明

视频字幕识别系统 — 项目说明

基于 Spring Boot + 阿里云视觉智能平台的视频字幕识别 Web 应用,上传视频后自动解析并下载中/英文字幕。(源代码密钥已移除方便提交仓库,这个网址已经打不开了)


一、项目简介

这是一个完整的 Web 应用,用户通过浏览器上传视频文件(或使用默认测试视频),系统调用阿里云视频识别(videorecog)API 提交异步识别任务,待任务完成后自动解析出中文字幕和英文字幕的下载链接,前端一键下载 SRT 字幕文件。

核心流程:

选择视频 → 上传至服务器 → 提交阿里云识别任务 → 轮询查询异步结果 → 解析字幕下载链接 → 下载字幕

二、技术栈

层次技术
后端框架Spring Boot 3.2.12
JDKJava 17
构建工具Maven
云服务阿里云视觉智能平台(videorecog + viapi)
阿里云 SDKvideorecog20200320(视频识别)、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提取项目内容完成,若有不对的地方还望海涵


http://www.jsqmd.com/news/1046479/

相关文章:

  • 革命性数据剖析工具:一行代码实现Pandas与Spark数据集的全面探索性分析
  • React-accessible-accordion样式定制完全教程:打造个性化手风琴UI
  • 免费解决BT下载慢的终极方案:trackerslist完整使用指南
  • 多模态视角下的一部当代东方创世史诗 ——《论三生原理》?(简版)
  • 终极跨平台流媒体下载指南:用N_m3u8DL-RE轻松获取DASH/HLS/MSS视频
  • PingFangSC字体包:跨平台中文字体渲染的技术架构与实施指南
  • 深入排查MySQL InnoDB临时文件创建失败:从errno 0到系统权限的完整解决路径
  • Recoil协程实战:5个常见异步场景代码示例解析
  • PHP 7 Migration Assistant Report (MAR)完全指南:快速将PHP 5代码迁移至PHP 7
  • 10分钟完成黑苹果配置:OpCore-Simplify终极自动化工具指南
  • 【USB高速传输-课时2】:USB全版本规格迭代与参数差异详解
  • 2026年6月市面上知名的云母绝缘直销厂家有哪些,石英管加热器/导热油加热器/便携式滤油机,云母绝缘直销厂家有哪些 - 品牌推荐师
  • Sub2API+Codex中转站实战:构建高可用大模型API网关
  • GLM-5.2 开源引爆全球,马斯克点赞、Hugging Face 免费支持,国产模型终于出圈了
  • Music-dl:5分钟掌握命令行音乐下载神器,一键聚合6大音乐平台
  • 华为OD机试真题 新系统 2026-05-27 PythonJS 实现【Skill执行链完整性检测】
  • Java自动化测试实战:从框架搭建到持续集成,以社交应用为例
  • Linux打印机兼容性深度解析:foo2zjs驱动套件技术实现与部署指南
  • 2026襄阳漏水检测维修精选优质服务商TOP5推荐!卫生间漏水/厨房漏水/屋顶天花板漏水/阳台漏水/地下室漏水防水补漏检测维修-正规防水补漏公司优选口碑榜测评推荐 - 即刻修防水
  • 高级Android工程师之路:Android工程师进阶手册中的架构思维培养
  • (2026新)滁州正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • 2026科技驱动型EMBA实测:科学选型与优质项目解析
  • OSEK网络管理
  • 2026襄阳本地人必选防水补漏检测维修公司靠谱服务商TOP5推荐:房屋渗漏水检测维修/卫生间/厨房/天花板/阳台/外墙渗漏水检测补漏维修-暗管漏水检测专业仪器精准定位漏水点 - 即刻修防水
  • 我的卡丁车我做主
  • C标准库内存管理与字符串转换:从原理到实战的深度解析
  • (2026新)湛江正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • DVWA集成TTS API安全案例:从命令注入到纵深防御实战
  • (2026新)清远正规防水补漏公司口碑榜TOP5权威推荐!卫生间/厨房/阳台/屋顶/天花板/地下室渗漏水检测维修攻略-靠谱漏水检测维修师傅推荐 - 安佳防水
  • 2026年如何降低AI率、AIGC率?10款实测降AI工具收藏指南(附免费心得)