找回密码
 立即注册
查看: 610|回复: 5

【探讨总结】官中字幕词句通用修改思路

  • TA的每日心情
    慵懒
    21 小时前
  • 签到天数: 1063 天

    [LV.10]以坛为家III

    21

    主题

    424

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    1357601
    tmdtmdtmdqq 发表于 2024-10-27 12:34:26 | 显示全部楼层 |阅读模式
    本帖最后由 tmdtmdtmdqq 于 2024-11-16 12:41 编辑

    针对srt首次转为ass的官中字幕被他人添加过样式/屏幕字的ass官中字幕不可用以下规则!(替换比较暴力,该过的字幕容易误判而导致改错)

    因地域语言差异,以下某些规则可能只适用于简体文字的语言习惯。
    欢迎探讨和补充更多的官中字幕的词句通用修改思路。

    2024/10/27 Init v1.0
    2024/11/13 Update v1.1: 增加省略号的替换规则,增加提示中显示aegisub行号功能
    2024/11/14 Update v1.2: 增加单行字幕字数超长提示(默认30个utf-8字),
                                             增加\N两侧没有特殊符号,则把\N直接删掉的规则【sommio提议】(默认不启用)
    2024/11/16 Update v1.3: 脚本中的换行符换成\n适配linux系统,
                                             增加日文的直角引号符替换成中文的
    直角引号符sommio提议】,
                                             增加句子两端的英文半角括号替换成中文括号的规则【sommio提议】(默认不启用)
                                             增加句中存在括号时的提示



    以下均为正则表达式
    序号
    类型
    查找目标(已正则转义)
    替换为
    备注
    01
    替换
    [‧.・] · 间隔号(人名中间的点号)
    02
    替换
    [!!]!感叹号替换为英文半角的。或替换为中文字符”,反正统一观感就行
    03
    替换
    [\?]?疑问号替换为英文半角的。或替换为中文字符”,反正统一观感就行
    04
    替换
    !\?|!?|\?!|?!疑问感叹号(日文用!?,而中文用?!)替换为英文半角的。或替换为中文字符”,反正统一观感就行
    05
    替换
    ...
    三个英文句号替换成半个中文省略号
    06
    替换

    日文的左直角引号替换成中文的
    07
    替换

    日文的右直角引号替换成中文的
    08
    替换
    多次
    (,,0,0,0,,[^,,\r\n]*?)[,,]$1去除句中逗号。如果句中逗号后面没有空格,则替换为$1后面加个空格,即“$1 ”(不含双引号,后面有空格)。要替换多次,直至找不到为止
    09
    替换
    多次
    (,,0,0,0,,[^"\r\n]*?)"([^"\r\n]+)"$1「$2」英文双引号""替换为「」要替换多次,直至找不到为止
    10
    替换
    多次
    (,,0,0,0,,[^“\r\n]*?)“([^”\r\n]+)”
    $1「$2」中文双引号“”替换为「」要替换多次,直至找不到为止
    11
    查找
    多次
    \\N \N为ass字幕的换行符,一般替换成空格分割成两行不同时间的字幕直接删掉变成一行
    12
    查找
    多次
    [耶啦欸诶]根据句意去除/替换台湾腔语气词 吧、呀 之类的
    13
    查找
    多次
    怎样 看情况替换成 怎么回事/什么情况
    14
    查找
    多次
    看情况替换成 挺/蛮/颇
    15
    查找
    多次
    是说
    看情况替换成 话说
    16
    查找
    多次
    没差 看情况替换成 没所谓/都可以/差不多


    写了个python脚本按上面规则简单处理了一下,能将.srt文件转换为.ass文件输出,会删除繁化姬行备注
    1. python <official_subtitle_processor.py路径> <字幕文件/目录1> <字幕文件/目录2> ... <字幕文件/目录N>

    2. 例:
    3. python "Z:\official_subtitle_processor.py" d:\1.ass z:\2.srt "c:\3 4.ass" "d:\zimu dir"
    复制代码
    或者用里面的脚本建立个快捷方式,直接把多个字幕/目录拖进去快捷方式图标就行
    处理后的字幕后缀为 .formatted.ass,存在源字幕对应的目录下
    ● 不需要日志文件则将代码中的log_save_to_file变量改为False
    ● 程序结束时候不想按下Enter再结束则将stop_after_finished_process变量改为False
    ● 不需要在提示中显示aegisub行号,则将tips_show_aegisub_line_num变量改为False
    #号打头的行号是文档编辑工具(记事本之类)的行号A打头的行号是Aegisub的行号
    ● 单行最大字数提示(遇到\N当两行),想修改提示的最大字数阈值,则将single_line_max_char_num变量修改为你想要的字数
    对于默认不启用的规则如需启用下面规则对应行前面的#号去掉(#号前面的空格不能删)
      ○ 【sommio提议】\N的两侧没有特殊符号,则把\N直接删掉,此规则默认不启用。(v1.3版代码在68行):
        #text = re.sub(r'(,,0,0,0,,[^\r\n]*?[^\d\s\(\)()"《》“”「」-])\\N([^\d\s\(\)()"“”「」-])', r'\1\2', text)

    ○【sommio提议】句子两端的英文半角括号替换成中文括号,此规则默认不启用。(v1.3版代码在70行):
        #text = repeat_replace(lambda x: re.sub(r'(,,0,0,0,,(?:[^\r\n]*?\\N|))\(([^\(\r\n]+?)\)(\\N|[\r\n]|$)', r'\1(\2)\3', x), text)

    ● srt转成ass补充的字幕元数据信息(字体、颜色、字幕位置等),需要修改则自行修改ass_header变量
    ● 需要增改替换规则,则修改process_using_rules方法
    ● 需要增改潜在错误的查找规则,则修改grep_using_rules方法
    以上这些变量和方法都定义在脚本的开头,一打开文件就能找到









    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x

    评分

    参与人数 2活跃度 +35456 收起 理由
    gotohitori + 29056 很给力!
    Yukarubih + 6400 很给力!

    查看全部评分

    欢迎报错继续向上改进我改进过的字幕。
    请勿将无实质性修改、劣化精简本人改进过的字幕重新发布到此论坛:如仅改名、仅打包、修改总错字数≤5、删除特效等。       ——20230204
    本人改进过的字幕,禁止以任何形式进行商用。若要附带在视频、种子中发布,请先咨询。      ——20231203
    一些字幕搜寻、制作的方法和经验汇总  →  >>>帖子<<<
    禁止DBD-Raws及其相关人士使用本人所有制作或修正改进过的字幕(包括过往的)      ——20240730
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 156 天

    [LV.7]常住居民III

    23

    主题

    743

    回帖

    3104

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    584886
    sommio 发表于 2024-11-13 17:13:39 | 显示全部楼层
    我还会正则合并些多行字幕,感觉多行不怎么合阅读习惯。

    仅适用于 SRT ([^-\d\s\(\\)()"《》])\n([^-\d\s\(\\)()"]) $1$2

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    21 小时前
  • 签到天数: 1063 天

    [LV.10]以坛为家III

    21

    主题

    424

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    1357601
    tmdtmdtmdqq  楼主| 发表于 7 天前 | 显示全部楼层
    本帖最后由 tmdtmdtmdqq 于 2024-11-14 01:59 编辑
    sommio 发表于 2024-11-13 17:13
    我还会正则合并些多行字幕,感觉多行不怎么合阅读习惯。

    程序现在会合并成带\N的一句输出到ass字幕,然后检测\N的存在进行提示
    \N两侧没有特殊符号的话,大部分情况可以直接删掉\N。但某些情况可能替换成空格比较好
    但我还是倾向于根据输出提示手动处理一下,反正也没几行

    比如:
    #107| Dialogue: 0,0:06:14.08,0:06:18.08,Default,,0,0,0,,我给其他人降下了考验\N看他们能否杀死魔物
    #195| Dialogue: 0,0:09:35.95,0:09:39.27,Default,,0,0,0,,而且说白了\N广冈和佐久间这种人本来就活该去死

    此规则已经加进程序,默认不启用。需要启用此规则就把下面这行前面的#号去掉:
        #text = re.sub(r'(,,0,0,0,,[^\r\n]*?[^\d\s\(\)()"《》“”「」-])\\N([^\d\s\(\)()"“”「」-])', r'\1\2', text)


    2024/11/13 Update v1.1: 增加省略号的替换规则,增加提示中显示aegisub行号功能
    2024/11/14 Update v1.2: 增加单行字幕字数超长提示(默认30个utf-8字),
                                             增加\N两侧没有特殊符号,则把\N直接删掉的规则【sommio提议】(默认不启用)





    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 156 天

    [LV.7]常住居民III

    23

    主题

    743

    回帖

    3104

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    584886
    sommio 发表于 6 天前 | 显示全部楼层
    本帖最后由 sommio 于 2024-11-15 05:06 编辑

    半角括号也可以换成全角的,很多字体半角括号内中文不会居中。
    \((.+?)\) ($1)



    我还有个想法是在全角括号前添加 \an8,类似这样:
    ,,( ,,{\an8}(

    但目前还没有想法如何处理括号后换行可能是正文对话的情况
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    3 天前
  • 签到天数: 156 天

    [LV.7]常住居民III

    23

    主题

    743

    回帖

    3104

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    584886
    sommio 发表于 5 天前 | 显示全部楼层
    本帖最后由 sommio 于 2024-11-16 04:13 编辑

    报告一个 py 脚本的错误:
    现在使用的是 CRLF 换行,在 *nix 系统 \r 会被当成路径的一部分处理。
    建议在 vscode 修改为使用 LF 换行。
    1. /usr/bin/env: "python\r": 没有那个文件或目录
    2. /usr/bin/env: 使用 -[v]S 以在 shebang 行中传递选项
    复制代码


    另外在羚邦的字幕中发现了更诡异的引号,0xFF62 和 0xFF69
    七大不可思議之一的「吞噬之黑霧」
    维基百科的说法,这个应该是半角假名引号(JIS X 0201)

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    21 小时前
  • 签到天数: 1063 天

    [LV.10]以坛为家III

    21

    主题

    424

    回帖

    1万

    VC币

    星辰大海

    Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

    积分
    1357601
    tmdtmdtmdqq  楼主| 发表于 5 天前 | 显示全部楼层
    sommio 发表于 2024-11-15 05:02
    半角括号也可以换成全角的,很多字体半角括号内中文不会居中。

    半角括号改为全角括号的规则已增加,定为选用功能,需自行去掉#号开启。而且只处理句子两端的括号(换行符也算两端),不处理句中的括号。
    加\an8这个,遇到像下面这种的话,不就会导致一下在上方显示,一下在下方显示了。而且这脚本我是不会去加另外的tag进句子的,因为可能会导致后续正则处理/检查上会出问题。
    Dialogue: 0,0:04:09.41,0:04:11.12,Default,,0,0,0,,目前在场的只有四个
    Dialogue: 0,0:04:11.96,0:04:12.83,Default,,0,0,0,,(五龙士 黑龙骑士团)
    Dialogue: 0,0:04:12.83,0:04:13.92,Default,,0,0,0,,少一个人呢\N(五龙士 黑龙骑士团)
    Dialogue: 0,0:04:14.71,0:04:16.67,Default,,0,0,0,,我已经封住那家伙的嘴了 欧本

    脚本代码中换行符的问题,我用dos2unix处理了一下,统一成\n了。
    日文直角引号也替换成中文直角引号了。


    2024/11/16 Update v1.3: 脚本中的换行符换成\n适配linux系统,
                                             增加日文的直角引号符替换成中文的直角引号符
    sommio提议
                                             增加句子两端的英文半角括号替换成中文括号的规则【sommio提议】(默认不启用)
                                             增加句中存在括号时的提示





    回复

    使用道具 举报

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

    本版积分规则

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