ssh_0224 发表于 6 天前

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

本帖最后由 ssh_0224 于 2025-9-28 21:18 编辑

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

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



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





将以下3行,分别复制进替换窗口的第一行(开启通配符模式)
([\u4e00-\u9fa5]) ([\u4e00-\u9fa5])
([\u4e00-\u9fa5]) ()
() ([\u4e00-\u9fa5])
将下面一行复制进替换窗口的第二行
$1 $2
点击“全部替换”,对每个ASS文件分别替换三次

注意,每次替换,“全部替换”需要点到没有匹配项为止。

④ 还原之前被保护的字体名

以上步骤可以替换掉绝大部分,根据经验,还会漏掉“「」”、“…”前后接中文或日文的情况,需要手动替换。

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

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

洛雨璃 发表于 6 天前

我一般更直接一点,在Aegisub里面把一个空格替换成两个空格就搞定了

StarRingChild 发表于 6 天前

前段时间用 AI 写了个 PY 脚本,将 .ass 字幕中,所有 Style 名称包含 “JP” 的 Dialogue 行里,
位于 {} 标签外的半角数字(0-9)替换为全角数字(0-9)。
支持目录或文件列表批量处理,自动备份为 .bk。
页: [1]
查看完整版本: 【小技巧】将ASS字幕正文中用于分隔的半角空格(0x20)替换为全角空格(0x3000)