给技术视频自动加字幕:蓝耘元生代 + Whisper 批处理实战,100 条视频成本不到 3 块钱
最近做了不少技术分享视频,每次最烦的就是加字幕——要么手动敲,要么用剪映一句句对,费时费力。今天分享一个自动化方案:本地 Whisper 转录 + 蓝耘元生代 LLM 智能优化,批量给视频加字幕,实测一条 2 分钟视频成本0.027 元。
一、为什么不用纯 Whisper?
先说结论:Whisper 转录够用,但不够好看。
直接上 Whisper 的输出效果:
开发者朋友们好科技圈今天热闹不减五分钟带你看重点 Mistral AI 发布旗舰模型 Mistral Large 2 法国 Mistral AI 正式发布旗舰模型 Mistral Large 2推理代码和多语言能力全面升级问题很明显:
- 没有标点,一口气读不完
- 分段生硬,一句话被切成两半(第 5、6 条)
- 术语不统一,“github” 和 “GitHub” 混着来
所以我的方案是:Whisper 负责听写,蓝耘 LLM 负责润色。
给技术视频自动加字幕:蓝耘元生代 + Whisper
二、整体架构
整个平台就三个模块,Python + FastAPI + Vue3:
为什么选蓝耘做 LLM 优化?
- 便宜:deepseek-v4-flash 约 ¥0.001/1K tokens,一条视频字幕优化用 2.7w tokens,成本 3 分钱
- 快:相比 GPT-4,响应速度更快,批量处理不卡顿
- OpenAI 兼容:直接改
base_url就能接入,代码零改动
三、核心代码实现
3.1 蓝耘 LLM 字幕优化(关键代码)
这是整个平台的核心——把 Whisper 的原始输出送给蓝耘优化:
asyncdef_optimize_with_lanyun(self,segments,options):"""用蓝耘 LLM 优化字幕"""# 构造 prompt:告诉 LLM 要做什么优化option_desc="\n".join([f"-{OPTIMIZE_OPTIONS[o]}"foroinoptions])# 把带时间轴的字幕喂给 LLMtext_with_time="\n".join([f"[{s['start']}-{s['end']}]{s['text']}"forsinsegments])system_prompt=f"""你是一个专业的视频字幕编辑师。请对以下视频字幕进行优化: 优化要求:{option_desc}原始字幕(格式:[开始时间 - 结束时间] 文本):{text_with_time}请以 JSON 格式返回优化后的字幕数组,每个元素包含:start、end、text 注意: 1. 保持时间轴基本不变,只做微调 2. 术语校正要准确(如 "github" → "GitHub") 3. 只返回 JSON,不要其他解释 """# 调用蓝耘 API(OpenAI 兼容格式)response=awaitself.lanyun.chat.completions.create(model="deepseek-v4-flash",# 蓝耘上的模型messages=[{"role":"system","content":"你是专业的视频字幕编辑师。"},{"role":"user","content":system_prompt},],temperature=0.3,# 低温度,保证稳定性)# 解析返回的 JSONoptimized=self._parse_llm_response(response.choices[0].message.content,segments)# 记录 token 消耗(成本统计用)total_tokens=response.usage.total_tokens cost=total_tokens*0.001/1000# deepseek-v4-flash 价格returnoptimized,total_tokens,cost关键点:
base_url指向蓝耘:https://maas-api.lanyun.net/v1response_format我没用,因为蓝耘某些模型不支持,改为 prompt 里强调「只返回 JSON」- 超时设了 120 秒,防止某条视频卡住整个队列
3.2 批量处理队列
FastAPI 的BackgroundTasks做异步队列,不阻塞上传接口:
@app.post("/api/process")asyncdefprocess_video(req:ProcessRequest,background_tasks:BackgroundTasks):"""开始处理视频"""# 更新状态awaitdb.update_task(req.task_id,status="processing",progress=0)# 后台执行,不阻塞响应background_tasks.add_task(processor.process,task_id=req.task_id,whisper_model=req.model,llm_optimize=req.llm_optimize,burn_subtitle=req.burn_subtitle,)return{"task_id":req.task_id,"status":"processing"}前端每 2 秒轮询/api/task/{task_id}拿进度,体验类似剪映的「导出进度条」。
四、实测效果
4.1 测试视频
用的是我之前做的「AI 日报」视频(daily-news-10月7日.mp4):
- 时长:2 分 07 秒
- 大小:12.64 MB
- 内容:科技新闻播报(Mistral、Reflection、Polars、DeepSeek、Claude Mem)
4.2 处理过程
| 阶段 | 耗时 | 说明 |
|---|---|---|
| FFmpeg 提取音频 | ~2s | 转成 16kHz 单声道 WAV |
| Whisper 转录 | ~12s | base 模型,CPU 运行 |
| 蓝耘 LLM 优化 | ~8s | 28 条字幕,2.7w tokens |
| 生成 SRT | <1s | 标准字幕格式 |
| FFmpeg 烧录 | ~15s | 硬字幕嵌入视频 |
| 总计 | ~37s | 全自动 |
4.3 优化前后对比
优化前(纯 Whisper):
开发者朋友们好科技圈今天热闹不减五分钟带你看重点 Mistral AI 发布旗舰模型 Mistral Large 2优化后(蓝耘 LLM):
开发者朋友们好,科技圈今天热闹不减,五分钟带你看重点。 Mistral AI 发布旗舰模型 Mistral Large 2。明显变化:
- ✅ 加了标点,读起来不喘
- ✅ 长句合理分段(第 5-6 条原本是一句,现在拆成两条,时间轴对齐)
- ✅ 术语统一(“github” → “GitHub”,“js” → “JavaScript”)
4.4 平台界面
界面功能一目了然:
- 统计卡片:总任务、已完成、蓝耘 Token 消耗 2.7w、预估成本 ¥0.0271
- 上传区:支持拖拽上传 MP4/MOV/AVI
- 任务列表:实时进度条、Whisper 模型、Token 消耗、完成时间
4.5 任务详情与结果下载
任务卡片显示:
- 状态:已完成(绿色标签)
- Whisper 模型:
whisper-base - 蓝耘 Token:27,077
- 预估成本:¥0.0271
- 三个下载按钮:SRT 字幕、带字幕视频、JSON 结果
底部蓝耘品牌区明确标注:Base URL: maas-api.lanyun.net,Model: deepseek-v4-flash,OpenAI 兼容协议。
任务卡片特写,三个下载按钮清晰可见:SRT 字幕(蓝色)、带字幕视频(绿色)、JSON 结果(紫色)。
4.6 带字幕视频效果
片头效果:主标题「模型大战与开源工具上新」,底部字幕条显示「开发者朋友们好,科技圈今天热闹不减,五分钟带你看重点。」——有标点、分段合理。
Mistral 片段:右上角标签「大模型 Mistral AI」,底部字幕「法国 Mistral AI 正式发布旗舰模型 Mistral Large 2,推理、代码和多语言能力全面升级。」——术语准确,时间轴对齐。
4.7 JSON 结果与文件输出
VSCode 里打开1ffd1a2e_result.json,结构清晰:
task_id、filename、whisper_modelsegments_count: 28- 每条字幕含
id、start、end、text llm_optimized: true、llm_tokens: 27077、llm_cost: 0.027077
下载到本地的三个文件:
1ffd1a2e.srt— 标准字幕文件,可导入剪映/PR1ffd1a2e_result.json— 完整结构化数据1ffd1a2e_subtitled.mp4— 硬字幕视频,直接发 B 站/视频号
4.8 蓝耘控制台
蓝耘控制台模型广场,能看到deepseek-v4-flash在列,支持文本生成,上下文 32K。平台还提供了 Kimi、MiniMax、GLM、Qwen 等主流模型,一个 Key 全部可调。
五、成本核算
这是大家最关心的。实测数据:
| 项目 | 数值 |
|---|---|
| 视频时长 | 2 分 07 秒 |
| 字幕条数 | 28 条 |
| 蓝耘 Token | 27,077 |
| 蓝耘单价 | ¥0.001 / 1K tokens |
| 单条视频成本 | ¥0.027 |
批量 100 条视频的成本:
100 条 × ¥0.027 = ¥2.7对比人工:
- 人工听打:一条 2 分钟视频至少 10 分钟,时薪 ¥50 算,成本 ¥8.3/条
- 剪映自动字幕:免费但准确率低,专业词汇错误多
- 其他 API:某些语音转文字 API 按分钟收费,¥0.5-2/分钟
结论:100 条视频,人工要 830 块,蓝耘方案不到 3 块钱。
六、踩坑记录
蓝耘不支持
response_format: json_object- 某些模型会报错或卡住,解决:prompt 里强调「只返回 JSON」,然后代码里解析
Whisper 模型下载慢
- 第一次跑要下载 139MB 模型,解决:启动时预加载,或换 tiny 模型(39MB)
FFmpeg 路径问题
- Windows 下要配环境变量,解决:代码里检测,没有就提示安装
长视频 LLM 上下文超限
- 5 分钟以上视频字幕太多,一次喂给 LLM 会超 token,解决:分段优化,每 20 条一批
七、总结
这个方案的核心思路是**「本地做重活,云端做精活」**:
- 本地 Whisper:免费、隐私好、不依赖网络,负责把语音变成文字
- 蓝耘 LLM:便宜、快速、OpenAI 兼容,负责把文字变得可读
蓝耘在这里的价值不是「替代 Whisper」,而是**「让 Whisper 的输出变得可用」**。2.7w tokens 换来标点、分段、术语校正,性价比很高。
如果你也要批量处理视频字幕,建议:
- 先用
whisper-base试一条,看准确率够不够 - 蓝耘模型选
deepseek-v4-flash,便宜够用 - 一定要开「智能分段」,不然长句读起来很累
技术方案经历了一次关键调整:最初计划调用蓝耘的 Whisper 接口做语音转录,实测后发现蓝耘平台现有的 6 个 speech 模型均为 TTS(文本转语音),不支持语音转文字。于是架构改为「本地 Whisper 转录 + 蓝耘 LLM 字幕优化」的混合方案——本地 whisper-base 模型负责语音识别的重活,蓝耘 deepseek-v4-flash 负责它最擅长的语义理解:智能分段、标点补全、术语校正。这一调整反而更贴合 MaaS 平台的定位:让大模型做语义层增值,而非替代所有环节。
平台实现采用 FastAPI + Vue3 的前后端分离架构,包含上传、处理、进度查询、下载、统计六个核心接口,SQLite 记录任务流水。处理管线为:FFmpeg 提取音频 → Whisper 转录 → 蓝耘 LLM 优化 → 生成 SRT → FFmpeg 烧录硬字幕。前端界面实时展示任务进度条和蓝耘 Token 消耗/成本统计,让每一分钱的开销都透明可见。
实测效果令人满意:一段 12.64 MB 的每日科技新闻视频,生成 28 条字幕,蓝耘仅消耗 27,077 tokens,成本0.027 元——不到 3 分钱就完成了整段视频的字幕语义优化。优化后的字幕标点完整、分段自然,“Mistral AI”“405B” 等专业术语全部识别正确。烧录后的视频画面清晰、字幕与语音同步精准。
踩坑记录也有价值:蓝耘 chat 接口暂不支持response_format: json_object参数,导致首次调用卡死,去掉该参数并增加 120 秒超时后恢复正常;服务部署时还需注意工作目录与相对路径的解析问题。
结论:蓝耘元生代 MaaS 以极低的调用成本(deepseek-v4-flash 每百万 token 约 1 元)提供了可靠的语义理解能力,配合本地开源模型,开发者可以用"混合架构"低成本搭建实用的 AI 应用。单条视频字幕优化 3 分钱的成本,意味着批量处理 1000 条视频也只需 30 元——这正是 MaaS 模式对中小开发者的核心价值:把大模型的能力,变成人人用得起的生产力工具。