三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

免费本地字幕提取工具实测:无需联网的OCR神器,3分钟把视频硬字幕变成SRT文件

免费本地字幕提取工具实测:无需联网的OCR神器,3分钟把视频硬字幕变成SRT文件

免费本地字幕提取工具实测:无需联网的OCR神器,3分钟把视频硬字幕变成SRT文件

【免费下载链接】video-subtitle-extractor视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字幕内容提取。A GUI tool for extracting hard-coded subtitle (hardsub) from videos and generating srt files.项目地址: https://gitcode.com/gh_mirrors/vi/video-subtitle-extractor

如果你曾在剪辑软件里对着视频硬字幕一个字一个字地敲,大概能体会那种崩溃——一小时的素材,光打字就能耗掉一整个下午。今天要聊的 Video-subtitle-extractor(简称 VSE),就是专门解决这个痛点的免费开源工具:它全程在本地运行,靠内置的深度学习 OCR 模型自动识别视频里的硬字幕,几分钟就能产出一份可直接使用的 SRT 字幕文件,不需要联网,也不需要申请任何第三方识别 API。

那晚,我对着一段旧录像敲了整夜字幕

上个月我接到一个有点特殊的任务:把一段三十多年前的家族录像转成带字幕的数字版。录像画质谈不上好,但画面上的硬字幕——时间、地名、人名——却一个都不能漏。于是那个晚上,我的动作变成了机械循环:暂停、截图、辨认、打字、继续播放……

凌晨两点,我盯着两页手抄稿发呆,脑子里只有一个念头:如果有个程序能直接读懂视频画面里的文字,该多好。

第二天一早,我找到了 VSE。事实证明,它不仅解决了那个晚上的问题,还顺手把我此后所有"给视频补字幕"的工作都省了。

我的第一次:从下载到跑通第一个任务

很多人看到"深度学习""OCR"这类词就发怵,担心配置很麻烦。老实说,我一开始也这么想,但实际走下来,比我想象的顺利得多。

第一步:搭一个干净的运行环境

项目要求 Python 3.12 及以上版本。我的做法是先建一个独立虚拟环境,避免污染系统里已有的 Python 依赖:

git clone https://gitcode.com/gh_mirrors/vi/video-subtitle-extractor cd video-subtitle-extractor python -m venv videoEnv source videoEnv/bin/activate pip install -r requirements.txt

如果你的电脑有 NVIDIA 显卡,可以再补装对应版本的 paddlepaddle-gpu 获得加速;没有显卡也没关系,CPU 版本同样能跑,只是慢一些。

第二步:打开视频,框出字幕区域

一切就绪后,一条命令就能唤出图形界面:

python gui.py

界面比我预想的清爽。点击"打开"载入视频,中央是播放窗口,右侧是参数面板。我需要做的只有两件事:把字幕语言选成视频里实际用的语言(我那次是英文),然后在画面上用鼠标拖出一个矩形框,把字幕出现的区域圈起来。剩下的交给软件。

第三步:点一下运行,等几分钟

按下"运行",左下角的状态区开始滚动日志:关键帧提取、字幕区域检测、文本识别、去重、生成文件……进度条一格一格往前走。中途我甚至去泡了杯咖啡,回来时 SRT 文件已经生成完毕,还顺带导出了一份 TXT 文本。

把它拖进剪辑软件验证了一下:时间轴和原文基本对得上,个别拼写错误也在可接受范围内——毕竟这是机器识别,不是神仙。

真正打动我的五个细节

用了一个多月,我陆续摸清了它的脾气。下面这几个能力,是我觉得最值得拿出来说的。

所有识别都在本地完成,视频不用离开你的电脑

这是我最看重的一点。VSE 的整个识别链路——从视频抽帧、字幕区域检测,到文字内容识别——全部在本地完成,视频文件从头到尾不会上传到任何服务器。对于涉及隐私的素材,这种本地部署的模式让人踏实得多,也省去了申请各种云识别 API 的流程。

87 种语言,冷门语种也能识别

它的模型库放在backend/models/V5/目录下,除了常见的中英日韩,还覆盖了阿拉伯语、越南语、泰语、印地语、西里尔字母语系等共计 87 种语言。我试过一次带越南语字幕的素材,识别结果居然有模有样。

三种识别模式,按需切换

  • 快速模式:轻量模型,速度快,适合对准确率要求不高的场景;
  • 自动模式:程序根据你的硬件自动选择模型——有 GPU 时用大模型,没有时用轻量模型,日常推荐;
  • 精准模式:逐帧检测、几乎不丢字幕,但速度非常慢,适合字幕轴丢失严重的情况。

我的经验是:默认用自动模式,不满意再上精准模式。

批量处理,一次喂五个视频

如果你手上攒了一堆格式统一的教学视频或节目素材,可以把它们一次性全部选中,VSE 会按照同一套参数挨个处理。对于需要批量出字幕的场景,这几乎是效率翻倍的体验。

用 typoMap.json 给字幕"纠偏"

OCR 偶尔会把 "I'm" 识别成 "l'm",把"威胁"识别成"威筋"。VSE 提供了一个很巧的机制:编辑backend/configs/typoMap.json,把你发现的错误和期望的替换结果写进去,之后所有识别结果都会自动纠正,还能顺手把台标、水印这类固定文本替换成空字符串直接过滤掉。

![字幕提取工具界面布局设计示意图](https://raw.gitcode.com/gh_mirrors/vi/video-subtitle-extractor/raw/85746f7df5bf85978fd05f3ca6ce66e321a87a72/design/UI design.png?utm_source=gitcode_repo_files)

替你试过毒:四个容易踩的坑

这部分是我真实踩过的,提前写出来,帮你省掉几小时排查时间。

坑一:视频路径和项目路径里别带中文和空格

这是官方文档里反复强调的第一条。我一开始没当回事,把视频放在"下载/课程视频"这种目录下,结果程序报了一堆莫名其妙的错误。把文件挪到纯英文、无空格的路径后,一切恢复正常。

坑二:字幕区域框得不够准

框选范围如果太大,容易把背景里无关的文字也识别进来;框得太小,又会漏掉后半句。我的做法是:先播放几秒,确认字幕的上下边界,再留出少量余量框选。

坑三:批量处理时,视频分辨率必须一致

批量模式要求所有视频的分辨率和字幕区域保持一致,否则处理结果会错位。如果你手里的视频来源混杂,建议先统一分辨率,再扔进批量队列。

坑四:一上来就选"精准模式"

精准模式听起来最美好,但逐帧检测带来的时间成本可能超出你的耐心——一个十分钟的视频跑上很久是常有的事。正确姿势是先快速/自动模式过一遍,确认丢轴严重时再对症下药。

它背后是怎么工作的(写给好奇的人)

如果你想知道原理,其实它的源码结构并不复杂,核心逻辑都在backend/tools/目录下:

  • subtitle_detect.py:负责视频关键帧提取与字幕区域检测;
  • ocr.py:加载深度学习模型,完成文字内容识别;
  • hardware_accelerator.py:负责 GPU 加速检测与多平台适配;
  • reformat.py:负责字幕去重、时间轴对齐与 SRT 格式标准化。

从视频帧里定位文字,到逐帧识别,再到把重复行合并成规范的时间轴,整条流水线环环相扣。感兴趣的读者可以直接翻翻项目的 README.md 和这几个源码文件,逻辑比想象中好懂。

写在最后

回头再看那个敲了整夜字幕的晚上,我最大的感慨是:很多重复劳动,其实早就有更好的解法,只是我们习惯性地没去找。VSE 不是什么玄学工具,它就是一个把"读视频里的字"这件事做扎实的开源项目——免费、本地、支持 87 种语言、还能批量处理。

如果你也经常和视频硬字幕打交道,无论是给课程补字幕、给素材做翻译底稿,还是单纯想把老录像里的信息留存下来,都值得花一个下午把它跑通。它的安装命令只有几行,我第一次用时也怀疑过自己能不能搞定,结果不到半小时就跑出了第一份 SRT 文件。试试看吧,说不定你也会和我一样,从此告别那台"人肉字幕机"。🚀

【免费下载链接】video-subtitle-extractor视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字幕内容提取。A GUI tool for extracting hard-coded subtitle (hardsub) from videos and generating srt files.项目地址: https://gitcode.com/gh_mirrors/vi/video-subtitle-extractor

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表