news 2026/6/20 4:54:30

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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提取项目内容完成,若有不对的地方还望海涵


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 4:49:37

2026科技驱动型EMBA实测:科学选型与优质项目解析

一、引言:科技驱动型EMBA选型核心痛点随着数字经济、AI技术与跨境贸易高速发展,传统纯商科EMBA已难以适配科技企业转型、传统产业升级、企业全球化布局的管理需求,科技驱动型EMBA成为高端管理者进修的核心选择。该类项目以“科技赋能商业、商…

作者头像 李华
网站建设 2026/6/20 4:45:57

【USB高速传输-课时2】:USB全版本规格迭代与参数差异详解

彻底终结 USB 版本命名混乱!一张表看懂 2.0 到 USB4 所有参数差异,避开 90% 的选购陷阱本文已同步收录至《USB 高速传输与 Type-C 系统开发实战》专栏,适合嵌入式工程师、硬件开发者、电子爱好者及所有 USB 设备用户阅读。一、前言&#xff1…

作者头像 李华
网站建设 2026/6/20 4:40:07

Spice Model 参数实战指南——以FET为例

1. Spice Model 参数入门:从迷茫到清晰 第一次打开PDK文件里的Spice Model时,我盯着密密麻麻的参数列表足足发呆了十分钟——KP、VTO、LAMBDA这些字母组合像天书一样,更糟的是明明在教科书里见过的符号,在这里却换了马甲出现。这种…

作者头像 李华
网站建设 2026/6/20 4:37:07

JavaSE基础总结(2)

逻辑控制1 if语句if(布尔表达式){// 语句 } 如果布尔表达式结果为true,执行if中的语句,否则不执行。if(布尔表达式){// 语句1 }else{// 语句2 } 如果布尔表达式结果为true,则执行if中语句,否则执行else中语句。if(布尔表达式1){//…

作者头像 李华
网站建设 2026/6/20 4:36:56

司马法“用众若寡”:从“人海战术”到“集群算法”的组织效能革命

写在前面 本文是“七境体系思想丛书”系列的第五篇。在上一篇《吴子“应变三叠”》中,我们拆解了从“计划崇拜”到“弹性叠加态”的认知重构。本文从“怎么应对变化”转向“怎么调度资源”,聚焦司马法“用众第五”的核心命题——为什么你的团队“人越多越乱”,而优秀的团队“…

作者头像 李华
网站建设 2026/6/20 4:30:48

骨传导到底是不是智商税?骨聆 W80 给你答案

近期,20 岁运动爱好者长期佩戴骨传导耳机引发噪声性听力损伤一事引发全网热议,让主打开放听音、不入耳佩戴的骨传导品类走入大众审视视野,不少人也开始发问:骨传导是不是智商税?骨传导耳机为何会损伤听力?很…

作者头像 李华