【实战记录】tkinter+pyinstaller从命令行到GUI打包exe,我如何打造一个智能字幕错字校正工具

完整复盘记录我近期开发「字幕自动校正工具 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'

分析:

Progressbarttk 模块里的,不属于 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工具包,可在评论或私信中联系我~
💬 有问题也欢迎留言一起探讨!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值