waecy 发表于 2025-5-22 22:47:09

【懒人专用】✨自动匹配视频ASS批量改名+ASS子集化更改真正字体和制定统一样式和替换词典+简繁转换三件套✨

本帖最后由 waecy 于 2026-3-9 22:40 编辑

首先感谢这些年,热心坛友们发布且推荐不少实用工具, 提高了不少效率

但随着论坛帖子内热心坛友不断修改字幕, 不断迭代…
对部分强迫症来说,经常全部下载对比

批量字幕修改 / 多目录不同字幕格式命名 / 自动判断简繁需求越来越频繁

用第三方工具或编辑器正则替换,不同修改版本对比一遍,重命名一遍,修改样式一遍, 不自觉几小时过去了…

一直以来这三大批量工具没有懒人一键化轮子, 只能自己造, 花了几天成功测试成功, 直接发布给大家提升效率


使用PowerShell写的, 本来想用bat写, 结果BUG越来越多❌,放弃了,但可以用bat直接套用ps1用


虽然打包exe发布会更好, 但考虑了下,还是放源码版,里面置顶全局常量, 方便自定义正则,替换文本,样式,方便后期维护, 让坛友都能自定义最强一套, 毕竟不同人都有自己喜爱字体样式, 没必要完全按我的来, 可以自定义字体,大小,颜色, 字体边距, 斜体啥的

能够一键命名/简繁/字幕处理脚本

相信论坛不少编程大佬, 都已经有自己写过类似的轮子, 无论python.C#,C+,Java, 若有更好的希望也能分享下

测试环境
Windows 10 专业版 22H2
PowerShell v5.1.19041.5848


目前只在本地系统测试过,坛友可以自行测试版本


分别起名为
✅ 1.zSubRen重名器
✅ 2.zSubCC转换器
✅ 3.zSubTC转换器/zSubAC转换器



zSubRen重名器介绍


1.自动把视频目录下,所有子目录包含字幕文件名并且集数相同的改成和视频文件一样的名字

2.能识别各种常见视频格式(mp4/mkv/avi等)和字幕格式(ass/srt等)

3.通过集数自动匹配,比如把"第01集.ass"改成"视频01.mp4"对应的字幕名(通过正则匹配, 支持 01 - 01等格式,如果有没有的文件格式,可以全局变量后续添加)

4.可以跳过特定文件夹(比如SPs文件夹,可以自定义添加过滤)

5.可选生成操作日志,记录改了哪些文件,自己选择是否开启


※:更新了不少视频格式正则,无论子目录,严格判断,只有和视频数目一致的字幕才重命名, 数目不同跳过



zSubCC转换器介绍

1.专门处理ASS, SSA可编辑字幕文件

2.自动统一字幕样式(字体、大小、位置等)

3.适配不同视频分辨率(从480p到1080p都能调)

4.自动删除不需要的字幕(比如日文字幕)

5.保持原文件编码不变,不会乱码

6.支持批量处理整个文件夹所有混合格式字幕

7.字幕子集化字体更改引用真实字体名,包括行号样式\fnxxxx

8. 自定义全局替换词典,可
替换词 = 替换为
禁止相同替换词出现相同的,会导致错误,简体和繁体可视为不同替换词

9. ""、“”、‘’ 、『』 批量替换为「」格式




ZSubTC转换器介绍

1.简繁字幕互相转换(简体转繁体或繁体转简体)

3.支持ass/srt/ssa三种字幕格式

4.自动识别内容该转简体还是繁体

5.跳过特殊内容(比如OP/ED字幕不转换)

6.保持原文件编码,不会乱码

7.可以一键处理整个文件夹



以前发帖对比过
GUI第三方工具优先建议用「繁化姬」
但如果API有时维护或无法使用时情况下
可用本地「ConvertZ」,转换最快,但是缺点就是不支持正则.「」转换"",强迫症实在忍不了,之前用EmEditor 正则批量替换,现在有这个方便多了



static/image/hrline/3.gif
经过思考,如何最大效率,懒人操作

大部分软件和脚本都离不开打开软件 (复制脚本) → 选择 /拖动 / 复制 (填写代码或互动选项操作)
1. GUI的需要每次打开软件, 进行拖动或选择
2. 命令行或需要配置的脚本,需要每次输入路径或者把脚本复制到指定操作文件目录下

这两点还是较为繁琐, 距离想到一键懒人自动化还差点, 以前推荐的Ditto + 快捷键属于曲线救国, 虽然也方便了些, 但没达到理想的简单操作
1 按下快捷键 → 2 右键 → 3. 运行
哪怕设置F7单键绑定快捷键, 也得三步骤法,用的次数长, 复制的文件有时就剪切消失了, 所以还得提前另外备份,防止丢失

经过很长时间思考, 得出一个结论, 只要把脚本绑定在系统默认操作上就行了
1. 只要在文件夹空白目录 任意右键 - 点击两步骤最简单
2. 右键菜单绑定脚本, 把路径传到脚本内自动调用, 就可以无需每次复制脚本了
3. 日后更新脚本, 只要同步改调用脚本就行了

目前来说, 这个最接近我理想的懒人效率操作, 还算满意

所以最终实现效果如下



参考导入注册表


不能直接用, 需要修改的有三点
←1. 这里subsRen可任意修改别的英文数字,禁止空格, 如果要调用其他脚本,不能相同,这就相当于身份证ID一样,不能重复
@="视频集数智能字幕重命名工具" ←2. 这里任意改, 右键显示文字
最后修改PS1路径, ,保存,双击导入就行了

以后无论是要繁简转化,自动重命名字幕,甚至去子集化,更改样式,删除日文样式都能一键操作了

static/image/hrline/3.gif







PS: 也可以下载Ditto这个剪切板增强第三方软件,把这三个文件单独复制,置顶,然后属性设置三个独立全局快捷键,以后要处理那个目录下,直接按快捷键自动复制到目录下一键处理



※ 已把测试字幕文件和ps1放压缩包,支持特殊路径运行,坛友可自行下载测试…






再补充个批量提取MKV的第三方工具的,这款知名度低, 但实用度高, 论坛没多少人提起过, 适合提取多个WebRip的MKV字幕/视频/音频等


zSubCC转换器v0.6【新增自定义替换词典,可以按自己需求添加】


可自行添加替换词典,但不能重复
$GLOBAL_REPLACE_DICT = @{
    "三溫暖" = "桑拿"
    # 可以继续添加其他替换规则...
    # "原词" = "替换词"
}

不能
原词=1
原词=2
这样会报错

自定义全局样式,这个坛友选自己喜欢字幕组的样式,或者自己用Aegisub设置完样式后生成ass,直接复制对应的就好
$styleRules = @{
    '1920x1080' = @{
      # 这里定义字幕默认预设分辨率样式
      # 不区分大小写,Sub-CN已经包含sub-cn,不要重复填写相同样式,不然会报错
      'Sub-CN'= '方正准圆_GBK,63,&HFFFFFF,&H000000,&H000000,&H000000,1,0,0,0,100,100,1,0,1,1,1,2,10,10,20,1'
      'Default' = '方正准圆_GBK,63,&HFFFFFF,&H000000,&H000000,&H000000,1,0,0,0,100,100,1,0,1,1,1,2,10,10,20,1'
    }
    '1280x720' = @{
      'Sub-CN'= '方正准圆_GBK,43,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,15,1'
      'Default' = '方正准圆_GBK,43,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,15,1'
    }
    '720x480' = @{
      'Sub-CN'= '方正准圆_GBK,28,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,10,1'
      'Default' = '方正准圆_GBK,28,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,10,1'
    }
    '718x476' = @{
      'Sub-CN'= '方正准圆_GBK,28,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,10,1'
      'Default' = '方正准圆_GBK,28,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,10,1'
    }
    '640x360' = @{
      'Sub-CN'= '方正准圆_GBK,22,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,6,1'
      'Default' = '方正准圆_GBK,22,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,6,1'
    }
    '480x272' = @{
      'Sub-CN'= '方正准圆_GBK,16,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,5,1'
      'Default' = '方正准圆_GBK,16,&H00FFFFFF,&H00000000,&H00000000,&H00000000,-1,0,0,0,100,100,1,0,1,1,0,2,10,10,5,1
    }
}

zSubCC转换器v0.7【新增批量替换""、“”、‘’ 、『』→ 「」,不影响全局词典】


流程图:




zSubCC转换器v0.8【新增删除ass,ssa开头{tag数字标签}】


专门处理字幕开头的行内样式,为了不影响全局样式,可以自定义删除,暂时不需要这功能,可以$RemoveStartTagsEnabled =0来禁用
# 新增:控制删除开头标签的配置
$RemoveStartTags = "blur|bord|shad"# 要删除的起始标签,用|分隔多个标签类型
$RemoveStartTagsEnabled = 1# 0=禁用此功能,1=启用


修改前
Dialogue: 0,0:00:02.00,0:00:05.23,Default,,0,0,0,,{\blur2}两千年前 神话的时代
Dialogue: 0,0:00:05.85,0:00:10.58,Default,,0,0,0,,{\blur2}有一位灭亡了人类国度 烧毁了精灵之森
替换后
Dialogue: 0,0:00:02.00,0:00:05.23,Default,,0,0,0,,两千年前 神话的时代
Dialogue: 0,0:00:05.85,0:00:10.58,Default,,0,0,0,,有一位灭亡了人类国度 烧毁了精灵之森

全局变量开关版,增加了不少功能,不一一举例,看脚本说明


zSubCC转换器v1.1【新增删除ASS字体映射行】


默认开启,改成0保留
$ENABLE_REMOVE_FONT_MAPPING = 1    # 删除字体映射声明开关

比如

; Font Subset: 5AGJWBWR - TsangerJinKai03 W04
; Font Subset: MWUQC7I8 - Koku Mincho Regular
; Font Subset: L9HFKKEO - FZYaSong-M-GBK
; Font Subset: 27DZPBRO - FZYaSong-L-GBK
; Font Subset: 3S2ROOD3 - FOT-TsukuMin Pr6N E
; Font Subset: VLWJ191A - FOT-TsukuMin Pr6N B
; Font Subset: 5IGO9PLS - Dream Han Serif TC W18
; Font Subset: Y1GDHPSS - Dream Han Serif TC W15
; Font Subset: HY03V34F - Dream Han Serif SC W18
; Font Subset: WI6W56ON - Dream Han Serif SC W15
; Font Subset: 0APN7RIV - Dream Han Sans TC W27
; Font Subset: HFQFEI7E - Dream Han Sans TC W20
; Font Subset: F5ZXAX7C - Dream Han Sans TC W15
; Font Subset: R4MKDAK8 - Dream Han Sans SC W27
; Font Subset: 89U4VC3B - Dream Han Sans SC W20
; Font Subset: 4IVC47XI - Dream Han Sans SC W15
; Font Subset: 832HTB1Y - DFHanziPenW5-A
; Script generated by Aegisub 9820-cibuilds-8165f1ad5

替换后

; Script generated by Aegisub 9820-cibuilds-8165f1ad5

比如
LayoutResX: 1920
LayoutResY: 1080


A P-OTF Kasumi ShirafujiMin2 L ---- ESBHIAGC
A-OTF Kaimin Sora Std M ---- VEEICLEK
A-OTF UD Reimin Pr6N B ---- ZCDUKIUB
Koku Maru Mincho Kana ---- CWRIHHSQ
Sarasa Gothic TC SemiBold ---- XRTEBVEA
Zen Old Mincho SemiBold ---- DSAGMOYN
方正兰亭圆_GBK_中粗 ---- MPVDJTKH
方正准雅宋_GBK ---- LXBFHMSA
更纱黑体 SC SemiBold ---- ZBMANSQF
森泽UD黎明体 Gb4 B ---- ACKHQQTW
森泽UD黎明体 Gb4 M ---- XMQZYTXM
森泽UD黎明体 Gb4 R ---- IEXCJLRA
森澤UD黎明體 B5HK B ---- WXEUFANO
森澤UD黎明體 B5HK R ---- TUKHDYPC


替换为

LayoutResX: 1920
LayoutResY: 1080





waecy 发表于 2025-5-23 12:32:56

本帖最后由 waecy 于 2025-10-16 22:16 编辑

tmdtmdtmdqq 发表于 2025-5-23 12:06
看了一下代码,有两个功能使用时候要注意:
1. 分辨率调整不是简单调一下PlayResX/PlayResY和Style就行的, ...
感谢建议,目前根据需求, 已实现了相关功能,后期想到什么再加,zSubTC简繁转换那个PowerShell不支持相同键值对,因此两边必须唯一,遇到不同的台繁和香繁单字就没辙了,这个作为备用, 繁化姬可用情况还是优先这个

但可以用另一个zSubCC脚本处理
两字及以上关键词来实现批量替换$GLOBAL_REPLACE_DICT = @{
    # 台湾繁体字
      "三溫暖" = "桑拿"
      "菁英"="精英"
      "欸"="诶"
      "夥"="伙"
      "祕"="秘"
      "拚"="拼"
      "牠"="它"
      "妳"="你"
      "浏海"="刘海"
      "拚命"="拼命"
      "网路"="网络"
      "资讯"="情报"

      # 香港繁体(港繁)→ 简体中文
      "差唔多" = "差不多"
      "唔该" = "谢谢"
      "唔係" = "不是"
      "落雨" = "下雨"
      "的士" = "出租车"
      "飛機" = "飞机"
      "電郵" = "邮件"
      "入面" = "里面"
      "出面" = "外面"
      "靚" = "漂亮"
      "核突" = "恶心"
      "潮濕" = "潮湿"
      "滾水" = "开水"
      "雪糕" = "冰激凌"
      "朱古力" = "巧克力"
      "忌廉" = "奶油"
      "茄汁" = "番茄酱"
      "雲呢拿" = "香草"
      "芝士" = "奶酪"
      "甜品" = "甜点"
      "宵夜" = "夜宵"
      "早茶" = "早茶"
      "腸粉" = "肠粉"
      "雲吞" = "馄饨"
      "餛飩" = "馄饨"
      "菠蘿油" = "菠萝油条"
      "西多士" = "吐司夹心面包"
      "撈丁" = "捞面"
      "燒味" = "烧味"
      "叉燒" = "叉烧"

      # 简体
      "三温暖" = "桑拿"



}这样必须左侧「需替换词」唯一就行,右侧「替换词」可以相同
左侧繁体/简体「需替换词」≠「相同替换词」
所以可以这样写
"三溫暖"="桑拿"
"三温暖"="桑拿"


PS: 目前待解决问题, 不同字幕pos标签不同定位, X/Y轴的根据不同制定样式大小, 需后期微调, 如底部字幕上英文, 不过可用正则匹配来替换, 等后期慢慢新增功能


PwwSkuriX 发表于 2026-3-9 20:48:46

楼主,你的powershell写的很好,我做了几条修正可以同步。
1,增加了美剧格式SxxExx的识别。
    VideoEpisodes = @(和    SubtitleEpisodes = @(下都增加:
'\d{1,2}(\d{1,3})'

2,避免例如VCB的方括号被当成正则识别。将-path更改为Literal:
$videoFiles = Get-ChildItem -LiteralPath $Path -File | Where-Object {

lisbt 发表于 2025-5-23 00:09:45

tmdtmdtmdqq 发表于 2025-5-23 12:06:30

看了一下代码,有两个功能使用时候要注意:
1. 分辨率调整不是简单调一下PlayResX/PlayResY和Style就行的,要把字幕里所有位置信息都要调整,\bord、\blur等都要根据参数ScaledBorderAndShadow判断是否调整。
2. 繁简转化直接暴力单字替换,这样做不可取,会导致错字太多。建议使用繁化姬,特别是用对应的地区化 中国化、香港化、台湾化 进行转换。繁化姬会分析句子成分根据词语去做转化,而且地区化会把一些词语转为对应地区的常用说法。大部分情况都能正确进行转换。


原文繁化姬香港化繁化姬台湾化
蒜头发芽了
你的头发长长了
桑拿蒜頭發芽了
你的頭髮長長了
桑拿蒜頭發芽了
你的頭髮長長了
三溫暖
繁化姬再次中国化蒜头发芽了
你的头发长长了
桑拿蒜头发芽了
你的头发长长了
三温暖 *

* 最后将“三溫暖”再次进行中国化后,并没有转化为“桑拿”,想想这也是能理解的。因为转换前并不知道这是哪种地区的语言文字,譬如放在香港的语言中,并没有“三溫暖”一词,那么就应该直接转换为“三温暖”。想替换这种需要进行 自訂取代(自定义取代)。


AnoHana1949 发表于 2025-10-23 21:54:18

waecy 发表于 2025-5-23 12:32
感谢建议,目前根据需求, 已实现了相关功能,后期想到什么再加,zSubTC简繁转换那个PowerShell不支持相同 ...

使用《]zSubCC转换器v1.1【新增删除ASS字体映射行】》恢复子集化字体命名名称后,字幕里面会多出《已还原字体命名字幕 绿色线》 an8相关代码,《原始字幕 红色线》没有an8这个代码信息,v1.0版本脚本没有an8这个问题来着

waecy 发表于 2025-10-23 23:19:07

AnoHana1949 发表于 2025-10-23 21:54
使用《]zSubCC转换器v1.1【新增删除ASS字体映射行】》恢复子集化字体命名名称后,字幕里 ...

$ENABLE_DIALOGUE_SPLIT = 1         # 双语字幕拆分开关改成$ENABLE_DIALOGUE_SPLIT = 0         # 双语字幕拆分开关这个拆分功能,是为官方SRT字幕转ASS定制的,需要时再开启



如以下官方ASS字幕
https://bbs.acgrip.com/thread-13158-1-1.html


AnoHana1949 发表于 2025-10-23 23:40:37

waecy 发表于 2025-10-23 23:19
改成这个拆分功能,是为官方SRT字幕转ASS定制的,需要时再开启




可以了!谢谢你耐心的解答我的提问

AnoHana1949 发表于 2025-10-24 12:50:31

waecy 发表于 2025-5-23 12:32
感谢建议,目前根据需求, 已实现了相关功能,后期想到什么再加,zSubTC简繁转换那个PowerShell不支持相同 ...

又出现一个问题!如图《已一键恢复子集化字体命名 绿色线》子集化字体前面带@字符的字体无法一键恢复原始字体命名

waecy 发表于 2025-10-24 13:39:49

AnoHana1949 发表于 2025-10-24 12:50
又出现一个问题!如图《已一键恢复子集化字体命名 绿色线》子集化字体前面带@字符的字体无法一键恢复原 ...

下刚发v1.2版本

AnoHana1949 发表于 2025-10-24 15:04:11

waecy 发表于 2025-10-24 13:39
下刚发v1.2版本

可以了!谢谢你又更新了新脚本{:4_87:}
页: [1] 2
查看完整版本: 【懒人专用】✨自动匹配视频ASS批量改名+ASS子集化更改真正字体和制定统一样式和替换词典+简繁转换三件套✨