智谱AI/GeminiAI用来做视频硬字幕识别提取

gvs.gif

智谱 AI 的 glm-4v-flash 模型不仅免费,还具备图像理解能力;Google 的 Gemini-2.0-flash 模型也支持视频、图片的识别和处理,而且每日提供大量免费额度,都可用来作为OCR工具。

基于此开发了一个硬字幕提取软件,已更新到v0.2,加入Gemini支持

下载地址 (640MB)

内含文本相似度检测模型,用于判断连续字幕是否重复,故体积略大

百度网盘下载: https://pan.baidu.com/s/1SDKm5tWsr6dkajhsf8T5Ew?pwd=95i4

Github下载: https://github.com/jianchang512/stt/releases/download/0.0/GVS-v0.2-AI.7z

软件使用指南

  1. 下载解压: 下载软件压缩包,解压后双击 app.exe 即可运行。

  2. 选择视频: 点击软件界面上方的按钮,选择需要提取字幕的视频文件,请确保视频中存在硬字幕。

  3. 选择字幕位置: 选择字幕在视频中的位置,默认是“底部”,您也可以选择“顶部”、“中间”或“全部”区域。

  4. 填写 API Key:

    可填写 智谱AI 的 api key,这是国内免费的

    也可填写 Gemini AI 的api key,每日有1500次免费调用额度,不过国内使用需要科学上网,以英文逗号分隔可填写多个key。

    智谱 AI 平台可以免费注册并获取 API Key: 智谱AI开放平台

    Gemini可去此页面获取 https://aistudio.google.com/app/apikey

  5. 选择模型: 智谱AI支持 glm-4v-flash 免费模型。 GeminiAI支持 gemini-2.0-flash-expgemini-1.5-flash模型

  6. 如果使用 GeminiAI,需填写代理ip和端口,或者在vpn软件中启用系统代理

  7. 开始提取: 点击“开始”按钮,软件下方文本框会显示进度和日志信息。提取完成后,会在视频文件所在目录生成同名的 SRT 字幕文件。

技术原理

  1. 视频切帧: 首先,使用 FFmpeg 工具将视频按 1 秒间隔切分为图像帧。选择 1 秒间隔而非逐帧提取,一方面可以大幅减少需识别的图像数量,另一方面考虑到字幕通常持续时间不会低于 1 秒,过多的帧数也会增加去重的难度。
  2. OCR 识别: 将切分后的图像帧发送给智谱 AI 的 GLM-4V-FLASH 模型或 Gemini-2.0-flash-exp 模型,进行 OCR 识别,提取图像中的文字。
  3. 字幕去重: 由于连续的图像帧可能包含相同的字幕内容,为了避免重复,使用 sentence-transformers 模型计算当前识别出的字幕与前一句字幕的相似度。如果相似度超过 60%,则认为两条字幕内容相同,进行去重。
  4. 生成字幕文件: 最后,将去重后的字幕文本按照对应的时间戳进行拼接,并保存为 SRT 格式的字幕文件。
1 Like

本地识别也搞起来吧,我这3080,1080p png不到2秒,360p只需要0.8秒

与OCR方案有啥优势?还是只能应对单个字幕的情况吧,也不能把样式也复原吧…

我希望能实现简单ass字幕(含屏幕字注释)的生成…

不错不错,以前一直在用video-subtitle-extractor(也是github上的)做硬字幕提取,但时间比较长,
现在有新的工具可以试试看了。

提一个小小的建议,关于字幕的位置,能否弄一个可选择上下左右和大小的框,以便精确定位?

这不带模型咋这么大

有一个模型,用于文字相似度判断的,1s截一张图,肯定有非常多重复但又有细微差别的的字幕,尤其是字幕渐隐渐现时

能支持本地么:joy:

本地的大模型么,例如ollama搭建的?这个后边可以增加,不过本地受限于显卡,效果应该不怎么好。

如果是本地的OCR模型,例如百度飞桨的,这个不打算加,体积庞大、部署困难,也有据此实现的开源项目 video-subtitle-extractor

对呀,开个接口,直接填就行嘛

本地的话你会发现还不如ocr后trans的方案呢,当然也可以用API或者本地提取字幕后大模型trans,这样成本更可控

在测试“我不想活了”!是什么逼得一位少女绝望高呼?(答案请看简介).mp4”时遇到了【字幕画面不同步、字幕缺漏、政治敏感提示等问题】

2 Likes

可以增加一个只截图和去重复然后不OCR的工具
只要时间轴。。。
有写视频是只有文字没有语音所以无法用音频来打轴