完整复盘记录我近期开发「字幕自动校正工具 GUI 版 .exe」的全过程,包括需求提出、问题解决、实现路径与最终成果。人工智能等的普及有利有弊,短视频横行,信息太过碎片化,整合有价值系统化的信息和完整的故事将是一个不错的契机,比如在我个人看来,dy视频大多集中在五分钟内,也有部分短剧创作、影视剪辑等较长,而B站则有一批相当高质的中长视频创作博主。本工具软件包是我近两周遇到问题后自己开发的最终解决方案成果,无偿分享。定位:从事相关视频创作的会用到口播文本或者小说文本.txt,视频的字幕文件.srt,小说或者影视相关创作过程中,我们会用文本生成音频,再用音频转字幕,最终的SRT字幕文件带有时间戳,但会出现同音不同字导致最终的视频字幕出现错别字。版本1:我刚开始是用脚本实现修正,但每次改都需要改文件夹路径,繁琐。版本2:采用命令行输入,类似命令:python auto_correct_subtitles.py 原文.txt 字幕.srt --auto,但每次打开控制台,且输入空格,路径,麻烦。版本3:整合到一个.exe应用程序,直接双击运行,复制文本文件和字幕文件路径输入窗口即可。软件界面:
校正截图:最终生成同路径下修正文档,清晰记录文件信息和修正条例。大幅提升时间,且全过
程不超过1分钟,我这是3w字,10秒左右,python对文本处理很快。
工具:校正TXT和字幕SRT文件中的错别字,比如同音不同字等。
✍️ 作者:计算机研,项目起源于一次字幕批量校正的痛点需求。
🛠 工具目标:根据参考 TXT 原文自动修正 SRT 字幕中的错别字,仅限文字级(不涉及加字、删字、标点)
项目用到的工具包括:
-
Python 3:主程序语言
-
difflib:用于文本相似度对比和错别字识别
-
tkinter:构建GUI界面(图形操作窗口)
-
argparse:支持命令行参数调用
-
pyinstaller(可选):将脚本打包成
.exe
可执行文件
📌 一、项目背景
平时在处理一些字幕文件(.srt
)时,经常会遇到以下问题:
-
字幕中含有同音错别字:如“皇”写成“凰”,“杯剧”写成“悲剧”;
-
字幕中存在非中文符号差异:如标点或多余空格,不需要修正;
-
人工校对效率低、耗时长。
我希望开发一个工具,能自动参考小说原文(.txt
)来批量校正字幕中的错别字(只处理中文文字),并输出修正记录。最好还能有一个图形界面,普通用户也能方便使用。
🧠 二、功能需求拆解
功能 | 描述 |
---|---|
1. 对比参考 TXT | 从原文中提取所有汉字内容 |
2. 分析 SRT 字幕块 | 支持解析字幕格式并提取字幕文本 |
3. 自动比对错别字 | 基于 difflib 模糊比对,只改文字,不改标点和结构 |
4. 输出修改日志 | 类似“修改前/后”格式,每条变更记录清晰分隔 |
5. GUI 操作界面 | 使用 tkinter 构建图形界面,方便选择文件 |
6. 打包为 .exe | 使用 pyinstaller 打包为独立运行程序 |
🧩 三、命令行原型开发
最开始我实现了一个命令行工具,接受如下参数:
python auto_correct_subtitles.py --txt path/to/原文.txt --srt path/to/字幕.srt --auto
后来我希望调用方式更简洁,直接使用位置参数:
python auto_correct_subtitles.py 原文.txt 字幕.srt --auto
于是我对 argparse
的代码做了调整:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("txt_path", help="参考TXT原文")
parser.add_argument("srt_path", help="待处理的字幕SRT")
parser.add_argument("--auto", action="store_true", help="自动替换")
args = parser.parse_args()
🐞 四、问题1:同音字 vs 标点,误判现象分析
问题描述
初期比对逻辑过于“泛化”,比如下面这种输出:
字幕原文:
建议修改为:,
是否接受修改?[Y/n]
显然不是我想要的。这种情况是因为我最早用 pypinyin
来判断“同音字”,但它会把标点、符号也纳入比对,导致输出脏数据。
解决方案
我加入了 过滤器 filter_chinese()
,保证只处理真正的汉字字符:
def is_chinese_char(char):
return '\u4e00' <= char <= '\u9fff'
def filter_chinese(text):
return ''.join([c for c in text if is_chinese_char(c)])
然后在对比环节加入这个过滤处理,确保只针对中文错字。
🔁 五、问题2:输出对比记录 & 命名规范
我希望每次修正后生成一个类似这样的对比日志:
字幕修正对比文档
原始SRT文件: D:\xxx\10.srt
参考TXT文件: D:\xxx\10.txt
修正后SRT文件: D:\xxx\101.srt
修改详情:
字幕序号: 56
修改前: 还有机会阻止杯剧的发生
修改后: 还有机会阻止悲剧的发生
--------------------------------------------------
解决方案
新增 save_compare_log()
方法,动态生成 compare_原始名.txt
文件,按规范输出内容,并与修正后的 .srt
文件同目录保存。
🖼 六、问题3:添加图形界面 GUI
初步使用 tkinter
实现窗口、文件选择框、复选框、进度条等组件。
Bug 遇到:
AttributeError: module 'tkinter' has no attribute 'Progressbar'
分析:
Progressbar
是 ttk
模块里的,不属于 tkinter
本体。
修复方式:
from tkinter import ttk
progress_bar = ttk.Progressbar(window, length=300, mode='determinate')
并通过回调函数实时刷新进度:
def update_progress(current, total):
progress_bar["value"] = (current / total) * 100
window.update_idletasks()
最终 GUI 功能包含:
-
选择 TXT 文件按钮
-
选择 SRT 文件按钮
-
自动修正复选框
-
执行按钮
-
进度条反馈
📦 七、问题4:生成 .exe 可执行文件
使用 PyInstaller 打包 GUI 工具为单文件 .exe
,指令如下:
pyinstaller --onefile --windowed gui.py
-
--onefile
表示打包成单文件 -
--windowed
隐藏终端黑窗(适合 GUI 工具)
生成的 .exe
会出现在 dist/
目录下,可以双击运行,不依赖 Python 环境。
🎉 八、最终成果演示
✅ 功能达成:
-
自动修正错别字(只处理中文,不动标点)
-
图形界面易用性高
-
输出修正日志便于追溯
-
打包为 .exe 可直接使用
🚀 九、后续优化方向
-
增加【逐条人工确认】功能
-
支持【批量处理多个文件】
-
改进匹配算法(如基于语言模型做上下文判断)
📁 十、源码 & 打包文件获取方式
如果你也想体验该工具,可以在评论留言或私信我获取源码和
.exe
可执行文件。
我也提供在附件资源,之前没用过附件功能,在尝试。
🙌 总结
这次开发项目虽然目标明确,但过程中也踩了不少坑。最大的收获是:从命令行脚本一步步构建出图形工具,并最终封装打包的完整流程。
希望这篇文章对你有帮助,如果你正在开发自己的工具,不妨也试试图形化 + 打包发布这条路线!如果采纳也请点赞支持!
如需源码/EXE工具包,可在评论或私信中联系我~
💬 有问题也欢迎留言一起探讨!