【工具】字幕质检工具 Subtitle QC Tool - aegisub插件 (2026/02/04 更新v1.2)
本帖最后由 tmdtmdtmdqq 于 2026-2-5 00:40 编辑一个集
检查字幕中闪轴、叠轴、关键帧、时长、字数、标签、错字等问题,
可自动校正闪轴、叠轴、关键帧,
替换特定字符,
清理无用内容,
还原子集化字体名字
等功能于一体的aegisub插件。
把 subtitle_qc_tool.lua 放到 aegisub 所在目录下的 automation/autoload 目录里
把 subtitle_qc_tool_typo_dict.cfg 放到 aegisub 所在目录里
然后重新打开aegisub即可
2026/01/01 Init v1.0
2026/01/04 Update v1.1:
○优化:【一键疑似错字检查】,大大缩短检查时间
○删除:【无用内容清理】中实际无效的选项“清除除了、、以外ass字幕非标准段的内容”(实测aegisub的subtitles对象是读取不到这部分内容的)
2026/02/04 Update v1.2:
○增加:【ass字幕进阶工序】功能,因有些段的清理/时间修正操作无法在aegisub中实现,所以直接读写字幕文件进行这类工序的处理
○优化:配置信息实现缓存
○优化:代码优化和一些其它的小修正
※ 只测试了wangqr版的aegisub v3.3.3
此插件已经包含之前我写的另一个工具official_subtitle_processor的绝大部分功能
目前有8个功能:
1. 时轴检查&校正
2. 字符替换
3. 无用内容清理
4. 一键标签检查
5. 一键疑似错字检查
6. 一键还原子集化字体
7. 一键清除填充的检查提示
8. ass字幕进阶工序(成功后不可再点击【保存】,否则会还原) 【v1.2新增】
※ 含有“一键”的功能是没有选项界面的,下拉菜单点击后会立即执行。
本工具会在字幕的【特效(Effect)列】输出检查提示。
清除这些提示请用功能【7. 一键清除填充的检查提示】选项(清除后会还原成特效列的原始数据)。
1. 时轴检查&校正
下面简单说明一下几个设置的含义。
关键帧4个选项:
闪轴选项:
叠轴选项:
※ 在字幕检查提示中,
代表已经校正过,后面跟的是原字幕的信息,方便用来发现校正错了而进行还原。
代表仅检查过(还没改),后面跟的是应修正成的信息,方便用来跟着这个信息进行手工修正。
LXXX 代表aegisub字幕编辑框中的行号,“始”代表开始时间,“末”代表结束时间,
“→”代表时间增大(右移),“←”代表时间缩小(左移)
比如【末闪轴→L150◈0:00:08.00】就代表 当前行的结束时间跟150行字幕有闪轴,已经通过增大(右移)修正,原本这行的结束时间是0:00:08.00
【始叠轴→L156◈0:00:12.00】就代表 当前行的开始时间时跟156行字幕叠轴,还没修正,需要增大(右移)到0:00:12.00
【末K帧←0:00:45.86】就代表 当前行结束时间大于(超过了)关键(Key)帧时间,需要缩小(左移)到0:00:45.86
【轴被全覆盖#L165】就代表 当前行的开始和结束时间被165行字幕全覆盖了,还没修正,要手工检查
PS:视频自带关键帧信息过于不准的话,可以用这个工具重新生成关键帧信息文件,然后 视频->打开关键帧 加载刚才生成的关键帧信息文件
2. 字符替换
※ 列出的所有功能选项会从上到下的顺序进行处理(即后面的选项会根据前面选项操作后的数据进行处理)
3. 无用内容清理
4. 一键标签检查
※ 无选项界面,点击菜单就会全字幕处理
特效列的输出提示内容中,
(药丸=要完)表示标签有比较严重的错误,可能会导致显示此行字幕显示走样。
(看看)表示最好看看的地方,对字幕显示影响不大。
5. 一键疑似错字检查
※ 无选项界面,点击菜单就会全字幕处理
这是根据文件 subtitle_qc_tool_typo_dict.cfg 的配置去正则检查错字,目前有我汇总的官中字幕简化后常见错字。
可以自己添加修改错字检查的正则规则。
格式为:
{pattern = "干吗", replacement = "干嘛"},
{pattern = "当机(?:[^立]|立(?:[^断]|$)|$)", replacement = "宕机", mark = "当机→宕机"},
pattern是一个正则表达式的字符串。
(※ 注意:“\“需要双重转义。即如果你想匹配制表符“\t”,你需要写成“\\t”;如果你需要匹配字符“\”,你需要写成“\\\\”)
replacement 是替换的内容。“\“同样需要双重转义。如果正则用到括号的分组捕获,则捕获分组需要写成“\\1”、“\\2”……
mark 是用来显示处理提示的,如果没定义,则使用 “{pattern}→{replacement}” 作为值。
比如,第一行规则(没定义mark)的错字会提示是【✍︎#干吗→干嘛】,第二行规则(有定义mark)的【✍︎#当机→宕机】
6. 一键还原子集化字体
※ 无选项界面,点击菜单就会全字幕处理
只找了几个字幕测试了几种子集化字体的还原方式,不知道有没有别的形式
如果字幕中缺少子集化字体信息,则子集化字体名字会还原不了
7. 一键清除填充的检查提示
※ 无选项界面,点击菜单就会全字幕处理
可以设置一个快捷键快速清理提示
菜单栏 查看 → 选项 → 左侧 界面>热键 → 右侧 字幕栏 → 顶上 新建 → 填入
第一格:自己按下快捷键 (比如图片是Ctrl+P组合键)
第二格:automation/lua/subtitle_qc_tool/~字幕质检工具~ / ⑦ 一键清除填充的检查提示
8. ass字幕进阶工序(成功后不可再点击【保存】,否则会还原) 【v1.2新增】
如图,ass字幕中的负数时间被aegisub加载后会丢失掉负号,-1:59:49.00会变成1:59:49.00,这种在此工序中被称为"疑似负数时间"。
直接读写字幕文件进行一些无法在aegisub中实现的清理/时间修正操作。
注意:成功执行后不可再进行【保存】操作,否则字幕文件可能会还原成执行工序前的状态。
2026/01/04 Update v1.1:
○优化【一键疑似错字检查】,大大缩短检查时间
○删除【无用内容清理】中实际无效的选项“清除除了、、以外ass字幕非标准段的内容”(实测aegisub的subtitles对象是读取不到这部分内容的)
本次更新只需把新的 subtitle_qc_tool.lua 放到 aegisub 所在目录下的 automation/autoload 目录里
你好,感谢提供实用的工具。
在修改字幕文件时,个人非常需要下面这3个功能:
删除夹杂在各个段中的分号开头的注释行。
整体平移时轴导致的开始(Start)字段为诸如-1:59:59.91的无效值,批量设置为0。
心形等emoji符号容易缺字,批量修改为特定字体,如Arial Unicode MS。
不知能否在未来的版本中实现。
本帖最后由 tmdtmdtmdqq 于 2026-1-5 10:57 编辑
QH7B 发表于 2026-1-4 20:02
你好,感谢提供实用的工具。
在修改字幕文件时,个人非常需要下面这3个功能:
删除夹杂在各个段中的分号开 ...
1. 分号开头的行在aegisub的subtitles对象中是获取不了的,所以操作不了(我能获取子集化字体信息是因为外部读取了字幕文件)
如果外部处理的话,保存就是个大问题。因为外部保存的文件在aegisub中是不同步的。
如果外部处理保存后,在aegisub按了一下保存,那么之前外部保存的文件就会被覆盖,分号又会产生。
所以,任何要外部保存才能实现的功能,本插件中是不会出现的。
2. 负时间轴问题,我先看看能不能简单获取到,再判断要不要加。
经测试,aegisub的subtitles对象获取不到负时间(负时间读取出来也是正数,raw字段获取出来也已经变成了正数)。如果用外部字幕文件读取,会有因字幕文件未保存导致行不同步的问题,解决起来比较麻烦,所以此功能也不会有。(这不像子集化信息那样固定在那里,字幕行是会根据aegisub的编辑而变化行号的)
3. 缺字相关的问题,我没见到有暴露相关的接口,lua写这种检测字体这种东西会很复杂。所以缺字相关的功能是不会有的。
因为无法判断是否有“错”,所以不会有缺字替换功能。
但是,换个思路。如果你要提示的话,可以在检查错字配置 subtitle_qc_tool_typo_dict.cfg 中配置,这样就可以在【特效】列的提示输出中直接复制过去替换:(【✍︎#♡→{\fnSegoe UI Symbol}♡{\fn}】){pattern = "♥", replacement = "{\\fnSegoe UI Symbol}♥{\\fn}"},
{pattern = "♡", replacement = "{\\fnSegoe UI Symbol}♡{\\fn}"},
PS:修改 subtitle_qc_tool_typo_dict.cfg 是不用重启aegisub的,再次执行本插件的功能就会立即生效。
再者,你需要的功能是可以另外写一些外部工具实现,例如用python之类的,需求告诉GPT一下就写好。
因本插件功能多,如果某些功能选项复杂的话,选项界面也没位置写了。
aegisub原生选项界面的api功能实在太少(按钮位置都不能调…),只能简陋实现。
tmdtmdtmdqq 发表于 2026-1-5 01:09
1. 分号开头的行在aegisub的subtitles对象中是获取不了的,所以操作不了(我能获取子集化字体信息是因为外 ...
感谢回复!
其实我之前一直用的 EmEditor 修改字幕,但由于没有正式学过编程,只会简单的查找替换。
最近听说“正则表达式”处理文本的功能很强大,所以不知道能不能通过 EmEditor 正则表达式的查找替换功能解决前两个问题。
如果能的话,麻烦有时间帮我写一个正则表达式可以吗,它那个说明文档我实在看不懂。感谢!
本帖最后由 tmdtmdtmdqq 于 2026-1-5 23:27 编辑
QH7B 发表于 2026-1-5 11:51
感谢回复!
其实我之前一直用的 EmEditor 修改字幕,但由于没有正式学过编程,只会简单的查找替换。
分号开头的行(含前面带空格),替换成 空字符串^ *;.*$
负时间轴 (只判断开始时间,适配.ass),替换成 \100:00:00.00^(Dialogue: \d+,)-\d+:\d{2}:\d{2}\.\d{2}
负时间轴 (只判断开始时间,适配.srt),替换成 00:00:00\1000 -->^-\d+:\d{2}:\d{2}([,.])\d+ -->
不确定EmEditor是不是用\1代替正则捕获,如果失败,就把\1改为$1试试
2026/02/04 Update v1.2:
○增加:【ass字幕进阶工序】功能,因有些段的清理/时间修正操作无法在aegisub中实现,所以直接读写字幕文件进行这类工序的处理
○优化:配置信息实现缓存
○优化:代码优化和一些其它的小修正
页:
[1]