录视频没字幕?我用 Vibe Coding 一个周末造了一个免费字幕生成工具
录视频没字幕?我用 Vibe Coding 一个周末造了一个免费字幕生成工具
起因:一个真实的痛点
周末录制技术视频的时候,我遇到了一个看似简单但实际上相当恼人的问题——给视频配字幕。
这件事说起来不难,但做起来处处是坑。
录完一段屏幕操作演示,我心想,字幕嘛,2026 年了,AI 都能写代码了,加个字幕还不是分分钟的事?
事实证明,我太天真了。
踩坑之旅:那些"差一点就好用"的方案
第一站:飞书妙记
我最先想到的是飞书。飞书妙记支持语音转文字,而且它的中文识别效果确实不错——短句拆分自然、口语过滤到位、几乎可以直接拿来当字幕用。

但问题来了:
免费版只有 15 分钟。

我如果经常要做字幕生成功能的话。15 分钟根本不够用。
想要更多?升级 AI 会员,连续包月 ¥69/月,年付 ¥699。

一个字幕功能,要我每年花 700 块?我就偶尔录个视频,用不了那么多。
第二站:剪映
网上很多人推荐剪映——把视频导入,自动识别字幕,再导出 SRT 文件替换。
这个方案有几个问题:
也有时长限制——免费版对视频长度有门槛
操作链路长——导入、识别、导出、再合并,折腾半天
我的场景是技术视频,里面大量英文术语、代码片段、产品名,剪映的识别准确率并不理想
第三站:通义听悟
阿里的通义听悟倒是支持语音转文字,但我实际试了之后发现:
同样有时间限制
百分比显示不对——我说的"百分之十",它给我转成了一种非常规的格式,不是日常习惯的
10%

说白了,这些工具有一个共同特点:
免费版让你尝到甜头,但想真正用起来,得掏钱。
转折:为什么不自己造一个?
踩完一圈坑之后,我停下来想了想:
AI 现在这么强大,语音识别的 API 到处都是,Cloudflare 提供了几乎免费的基础设施——正好周末有时间,我为什么不用 Vibe Coding 的方式,自己造一个?
这不就是 Vibe Coding 最理想的场景吗?
✅ 痛点真实——我自己每周都要用
✅ 需求明确——上传视频 → 生成字幕 → 下载 SRT/ASS
✅ 技术路径清晰——语音识别 API + 文件存储 + 简单前端
✅ 部署成本接近零——Cloudflare 免费套餐基本够用
于是我决定:不是去找一个完美的工具,而是自己造一个刚好够用的工具。
这就是 Vibe Coding 的精神——与其等待,不如动手;与其凑合,不如精准解决自己的问题。
技术选型:为什么选 Cloudflare 全家桶?
在动手之前,我调研了一下常规的字幕生成实现方式:
方案一:本地跑 Whisper
OpenAI 的 Whisper 是目前最主流的开源语音识别模型。可以在本地跑,精度也不错。
但问题是:
需要 GPU,我的 Mac 跑起来巨慢
大文件(2-3 小时视频)内存开销惊人
部署成服务需要一台 GPU 服务器,成本不低
方案二:云端 API
各大云厂商都有语音识别 API——Google、Azure、AWS、阿里、腾讯,这些当然也是可以的。
我的选择:Soniox + Cloudflare
最终我选了一个相对小众但非常适合这个场景的组合:
组件 | 作用 | 选择理由 |
|---|---|---|
Soniox | 异步语音转写 | 专业 ASR,中英混合识别好,注册送 $200 额度,足够用很久 |
Cloudflare Pages | 前端托管 | 免费,全球 CDN,自动 HTTPS |
Cloudflare Workers | API 后端 | 免费 10 万次/天请求,Serverless |
Cloudflare R2 | 文件存储 | 免费 10GB,无出口流量费 |
Cloudflare D1 | 任务数据库 | 免费 SQLite,足够存 job 元数据 |
DeepSeek | 字幕文本润色(主力) | 手上已有 API key,便宜好用 |
Google Gemini | 字幕文本润色(备用) | 免费额度充足,作为兜底方案 |
整套方案的运行成本:几乎为零。
Cloudflare 的免费套餐完全覆盖我的用量。Soniox 注册送的 $200 额度,按我的使用频率够用很长时间。DeepSeek 的 API 本身我就有在用,单价极低。Gemini 作为备用,免费额度也够。
这就是 Vibe Coding 的另一个核心理念:不是花最多的钱买最贵的方案,而是用最巧的方式组合出最适合自己的方案。

架构设计:从上传到字幕的完整链路
整个系统的数据流是这样的:

具体步骤:
打开工具页面,用密码登录(私人工具,不开放注册)
上传视频文件,前端自动读取视频宽高
浏览器直传 R2——视频不经过 Worker,直接通过签名 URL 上传到对象存储,避免 Worker 体积限制
Worker 创建任务,在 D1 记录 job 元数据,调用 Soniox 异步转写
Soniox 后台处理,完成后通过 Webhook 回调 Worker
Worker 生成初步字幕,把 Soniox 返回的 token 按时间分段
LLM 润色字幕文本——这是最关键的一步
输出三种格式:SRT(通用字幕)、ASS(带样式字幕)、Transcript JSON(完整文稿)
一个 8分钟 的视频,从上传到字幕生成完成,大约 1-2 分钟。大部分时间花在 Soniox 的异步转写上,Worker 本身的处理几乎是瞬时的。实际效果非常 nice,Soniox 的中英文混合识别能力确实出色。
关键创新:LLM 字幕润色
这个项目最有意思的部分,不是语音识别本身,而是用 LLM 做字幕后处理。
为什么需要 LLM?
原始的 ASR(语音识别)输出有几个典型问题:
口语词太多——"呃"、"嗯"、"那个"、"就是说"满天飞
重复表达——"这个这个"、"然后然后"
英文断裂——
D em o被拆成三个词,A P I被拆成三个字母数字格式混乱——"百分之十"到底是写成"10%"还是"百分之十"还是"百分之百10"?
这些问题,传统的文本处理规则很难覆盖。但 LLM 天然擅长——它理解上下文,知道什么该删、什么该留、什么该合并。
设计原则
我给 LLM 定了几条硬规则:
LLM 只处理文本,不碰时间码——时间轴的准确性由 Worker 保证
LLM 输出必须引用原始片段 ID——不能凭空创造句子
可以合并相邻短句,不能删除信息
失败时自动回退原始字幕——宁可粗糙,不能丢内容
默认的润色风格对标飞书妙记:
短句优先,8-18 个字一条。删口语词,修断裂英文,数字按场景处理。每条字幕开头结尾不留标点。
# 润色前(原始 ASR 输出)
"呃然后这地方可以设置这个预算超过百分之百10的一个处理方法"
# 润色后(LLM 处理)
"这里可以设置预算超过110%的处理方法"
一行字幕,从 28 个字压缩到 16 个字。信息量不变,阅读体验天差地别。
双 LLM 策略
为了稳定性,我采用了双 LLM 策略:
主力:DeepSeek——我手上本来就有 API key,中文处理能力强,价格极低
备用:Google Gemini——免费额度充足,DeepSeek 挂了自动切换
兜底:如果两个都挂了,直接用原始字幕,任务照样完成
不会因为 LLM 的问题导致整个任务失败——这是工程思维,不是 demo 思维。

ASS 字幕样式:细节决定体验
很多字幕工具生成的 ASS 文件有一个常见 bug:不写入视频分辨率。
这会导致 ffmpeg 在烧录字幕时,把分辨率回退到默认的 384×288,字幕直接被拉大到占满半个屏幕。
我的方案在前端上传时就读取视频的真实宽高,写入 ASS 的 PlayResX / PlayResY:
样式项 | 设置 |
|---|---|
分辨率 | 真实视频宽高 |
字体 | PingFang SC |
字号(1080p) | 44 |
位置 | 底部居中 |
底部间距 | 视频高度 × 4.5% |
背景 | 半透明黑色底框 |
布局 | 单行优先 |
烧录出来的效果,和专业剪辑软件输出的字幕几乎无差别。

开发过程:一个周末,从 0 到上线
整个开发过程,从有想法到生产上线,就用了一个周末。周末正好有录视频的需求,痛点摆在面前,索性直接动手。
周六上午:骨架搭建 + 首次部署
初始化项目,搭建 Vite + React 前端
编写 Worker API:登录、上传签名、任务管理、Soniox 集成
配置 Cloudflare 全家桶:Pages、Worker、R2、D1
踩了一堆 Cloudflare 部署的坑(Pages 和 Worker 配置冲突、R2 凭证混淆、DNS 生效等待……)
首次部署成功,首页返回 200
周六下午 → 周日:LLM 润色 + 生产验证
集成 LLM 字幕后处理模块
接入我已有的 DeepSeek API 作为主力,Google Gemini 作为备用
迭代字幕提示词,对标飞书妙记效果
修复 ASS 样式问题(PlayResX/PlayResY、底部间距、字体)
前端增加自定义提示词功能
生产验证:7分钟 的视频,几分钟 完成,字幕质量达标
周日下午:开源发布
拆分私有仓库和公开仓库
脱敏处理:替换真实域名、Account ID、数据库 ID
编写 export 脚本,保证后续同步安全
配置 GitHub Actions CI、CodeQL、Dependabot
detect-secrets扫描 0 发现
一个周末。从痛点到产品,从代码到开源。
这就是 Vibe Coding 的速度。不是因为代码量少,而是因为——你知道你要什么,AI 帮你写,Cloudflare 帮你跑,你只需要做决策。

Cloudflare 免费套餐:Pages 无限站点、Workers 10 万次/天、R2 免费 10GB、D1 免费 5GB。Soniox 注册送 $200 额度。
对于个人使用,这些额度远远够用。
可扩展性:不只是字幕
这个项目的架构天然支持扩展:
多语言——Soniox 支持 40+ 语言,换个 model 参数就行
实时字幕——Soniox 也有 realtime API,可以扩展为直播字幕
批量处理——前端可以改为队列模式,一次上传多个视频
团队使用——加个用户系统就能变成团队工具
自定义 LLM——支持
LLM_BASE_URL配置,可以接任何 OpenAI 兼容的模型
这也是我选择开源的原因——这个工具解决的不只是我一个人的问题。
每一个录视频的人,都会遇到字幕的烦恼。不是所有人都需要 Adobe Premiere 那样的全功能方案,有时候,一个够用、免费、可控的工具,就是最好的工具。
写在最后
回过头看这个项目,最让我感触的不是技术本身,而是一种做事的方式:
当你遇到一个真实的痛点,不要在现有工具里反复横跳,不要等待某个完美方案出现。用你手边的技术,用 AI 的能力,用 Vibe Coding 的方式——直接造一个。
一个周末,0 成本运行,解决了一个每周都会遇到的问题。
这不是什么了不起的技术壮举。这只是 2026 年,一个普通开发者应该具备的能力——看到问题,分析问题,用 AI 解决问题。
工具的最高境界,是为你量身定做的。
🔗 开源地址:github.com/jason-create-cmd/video-caption-generator
🎬 操作演示:完整的操作视频和效果展示见评论区
如果这个项目对你有帮助,欢迎 Star ⭐ 和 Fork 🍴
继续阅读
基于全文检索与主题相似度
基于 Codex 30 天工作记录识别可封装 workflows
本文介绍如何让 Codex 回顾近 30 天工作记录、sessions、memories、Chronicle 与现有资产,识别高频且可复用的工作流,并按证据封装为 skill、subagent 或 automation,避免重复、过宽和 speculative 创建,适合团队定期盘点与效率优化。
Antigravity 2.0 账号地区不可用
# Antigravity 2.0 账号地区不可用 记录 Antigravity 2.0 登录时出现账号不可用提示的排查与处理。适用于错误: ```text Sorry, this account is ineligible to use Antigravity Authentication failed. ``` !
Codex 对话日志复盘提示词
整理 Codex 对话日志复盘提示词,说明如何检索历史 sessions、执行日志与配置,提炼用户偏好、经验规则并接入 .agent、AGENTS.md 等加载链路。