找回密码
 立即注册
查看: 561|回复: 2

【小技巧】将ASS字幕正文中用于分隔的半角空格(0x20)替换为全角空格(0x3000)

7

主题

38

回帖

436

VC币

至尊会员

Rank: 16Rank: 16Rank: 16Rank: 16

积分
161362
ssh_0224 发表于 2025-9-28 20:59:31 | 显示全部楼层 |阅读模式
本帖最后由 ssh_0224 于 2026-1-17 14:59 编辑

研究这个纯粹是强迫症犯了,觉得半角空格留的空间太小了。

所需工具:
① VSCode
② VSCode插件【Lyrics/Subtitles Support】

VSCode和其字幕插件

VSCode和其字幕插件



步骤:
① 把所有需要修改的ass字幕文件,一次性或者分批次拖放到VSCode中;
② 检查“[V4+ Styles]”样式表,以及“\fn”字体覆盖代码中的字体名,将含有空格的字体名称先保护起来(替换成下划线“_”或者减号“-”)
2025-09-28_203530.jpg

2025-09-28_203721.jpg


将以下3行,分别复制进替换窗口的第一行(开启通配符模式)
  1. ([\u3040-\u31ff]|[\u4e00-\u9fff]|[\u3400-\u4dbf]) ([\u3040-\u31ff]|[\u4e00-\u9fff]|[\u3400-\u4dbf])
  2. ([\u3040-\u31ff]|[\u4e00-\u9fff]|[\u3400-\u4dbf]) ([A-z])
  3. ([A-z]) ([\u3040-\u31ff]|[\u4e00-\u9fff]|[\u3400-\u4dbf])
复制代码

将下面一行复制进替换窗口的第二行
  1. $1 $2
复制代码

点击“全部替换”,对每个ASS文件分别替换三次
2025-09-28_204558.jpg
注意,每次替换,“全部替换”需要点到没有匹配项为止。

还原之前被保护的字体名

以上步骤可以替换掉绝大部分,根据经验,还会漏掉“「」”、“…”,需要手动替换。

我还遇到过使用两个英文半角空格(0x20)的组合进行分隔的字幕,虽然此方法的本意估计是希望留出和全角空格一样的空白分隔空间,但实际播放器渲染时,似乎依旧只留出一个英文半角空格(0x20)的空间。
这种情况下可以直接把两个英文半角空格(0x20)全部替换为全角空格(0x3000),因为应该不会有字体的名称里以及ass格式定义的其他地方会用到连续的两个英文半角空格(0x20),即使是style名称,因为被全部同步替换掉了,所以也不会出问题。

“[\u4e00-\u9fa5]”也是网上搜到的中文字符的通配符(日文应该也行),如果有更好的替换方法(更完善的通配符匹配方案,或者其他方便的方法),欢迎各位提出。

回复

使用道具 举报

1

主题

60

回帖

0

VC币

高级会员

Rank: 4

积分
21313
洛雨璃 发表于 2025-9-28 22:46:50 | 显示全部楼层
我一般更直接一点,在Aegisub里面把一个空格替换成两个空格就搞定了
回复

使用道具 举报

16

主题

293

回帖

504

VC币

白金会员

Rank: 12Rank: 12Rank: 12

积分
55631
StarRingChild 发表于 2025-9-28 23:50:45 | 显示全部楼层
前段时间用 AI 写了个 PY 脚本,将 .ass 字幕中,所有 Style 名称包含 “JP” 的 Dialogue 行里,
位于 {} 标签外的半角数字(0-9)替换为全角数字(0-9)。
支持目录或文件列表批量处理,自动备份为 .bk。

convert_fullwidth_bk.py.zip

1.7 KB, 下载次数: 42

评分

参与人数 1活跃度 +6400 收起 理由
ssh_0224 + 6400 赞一个!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表