找回密码
 立即注册
查看: 1319|回复: 13

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

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 1119 天

    [LV.10]以坛为家III

    22

    主题

    444

    回帖

    1万

    VC币

    星辰大海

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

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

    针对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提议】(默认不启用)
                                             增加句中存在括号时的提示

    2024/11/16 Update v1.4: 修正处理过程中去除BOM头的正则判断
                                             增加多种词语/错字替换提示


    以下均为正则表达式
    序号
    类型
    查找目标(已正则转义)
    替换为
    备注
    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方法
    以上这些变量和方法都定义在脚本的开头,一打开文件就能找到

    official_subtitle_processor_screenshot.png
    official_subtitle_processor_shortcut_screenshot.gif

    Snap_line_num.png

    把旧版也留着了,方便进行比对查看修改了哪些地方。排在最后的附件是最新版
    如果你自行修改过脚本,那进行更新时候建议用比对工具(如BeyondCompare、UltraCompare…)进行代码差异化增删来更新。
    没修改过脚本的话,直接覆盖文件就行。


    official_subtitle_processor v1.1.rar (4.61 KB, 下载次数: 4)
    official_subtitle_processor v1.2.rar (4.83 KB, 下载次数: 4)
    official_subtitle_processor v1.3.rar (5.08 KB, 下载次数: 21)
    official_subtitle_processor v1.4.rar (6.23 KB, 下载次数: 10)



    评分

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

    查看全部评分

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-12-28 03:04
  • 签到天数: 160 天

    [LV.7]常住居民III

    23

    主题

    766

    回帖

    3104

    VC币

    星辰大海

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

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

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

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 1119 天

    [LV.10]以坛为家III

    22

    主题

    444

    回帖

    1万

    VC币

    星辰大海

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

    积分
    1447933
    tmdtmdtmdqq  楼主| 发表于 2024-11-14 01:56:53 | 显示全部楼层
    本帖最后由 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的每日心情
    慵懒
    2024-12-28 03:04
  • 签到天数: 160 天

    [LV.7]常住居民III

    23

    主题

    766

    回帖

    3104

    VC币

    星辰大海

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

    积分
    603980
    sommio 发表于 2024-11-15 05:02:01 | 显示全部楼层
    本帖最后由 sommio 于 2024-11-15 05:06 编辑

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



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

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

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-12-28 03:04
  • 签到天数: 160 天

    [LV.7]常住居民III

    23

    主题

    766

    回帖

    3104

    VC币

    星辰大海

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

    积分
    603980
    sommio 发表于 2024-11-16 03:32:19 | 显示全部楼层
    本帖最后由 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)

    當不成魔法師的女孩.Ani-One.7z

    8.18 KB, 下载次数: 4

    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 1119 天

    [LV.10]以坛为家III

    22

    主题

    444

    回帖

    1万

    VC币

    星辰大海

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

    积分
    1447933
    tmdtmdtmdqq  楼主| 发表于 2024-11-16 10:32:05 | 显示全部楼层
    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提议】(默认不启用)
                                             增加句中存在括号时的提示





    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-11-27 03:18
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    6

    回帖

    0

    VC币

    中级会员

    Rank: 3Rank: 3

    积分
    8939
    [email protected] 发表于 2024-11-27 10:23:17 | 显示全部楼层
    牛逼牛逼
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2 小时前
  • 签到天数: 374 天

    [LV.9]以坛为家II

    9

    主题

    58

    回帖

    0

    VC币

    高级会员

    Rank: 4

    积分
    33730
    KAKAROTO 发表于 2024-11-27 11:37:23 | 显示全部楼层
    牛,就是需要认真去研究才能懂,现在还是用最笨的Aegisub的替换。

    楼主请教个问题:

    例:「你是谁?我在哪里?」
    能不能替换成:「你是谁? 我在哪里?」

    「你是谁? 」的问号是「问号➕空格」,
    而「我在哪里?」的问号不加空格,这做的到吗?

    请指教,谢谢
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    68

    回帖

    10

    VC币

    中级会员

    Rank: 3Rank: 3

    积分
    4402
    122490165 发表于 2024-11-27 17:47:14 | 显示全部楼层
    KAKAROTO 发表于 2024-11-27 11:37
    牛,就是需要认真去研究才能懂,现在还是用最笨的Aegisub的替换。

    楼主请教个问题:

    用notepad++批量替换就行

    点评

    行,也是个方法,保存了!  发表于 2024-11-28 10:47
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    14 小时前
  • 签到天数: 1119 天

    [LV.10]以坛为家III

    22

    主题

    444

    回帖

    1万

    VC币

    星辰大海

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

    积分
    1447933
    tmdtmdtmdqq  楼主| 发表于 2024-11-27 22:54:08 | 显示全部楼层
    本帖最后由 tmdtmdtmdqq 于 2024-11-30 11:26 编辑
    KAKAROTO 发表于 2024-11-27 11:37
    牛,就是需要认真去研究才能懂,现在还是用最笨的Aegisub的替换。

    楼主请教个问题:

    第一行针对英文半角问号?替换
    第二行针对中文半角问号替换
    如果你之前没改过我脚本的话,增加第一行到脚本即可(注意前面必须要有4个空格对齐)。
    1.     text = re.sub(r'\?([^\s])', r'? \1', text)
    2.     text = re.sub(r'?([^\s])', r'? \1', text)
    复制代码

    2024/11/30 更新:
    突然想到遇到连续的问号,如???(或后续有感叹号,如?!),再加空格会不好看,所以改改
    第一行针对英文半角问号?和感叹号!替换
    第二行针对英文和中文半角问号和感叹号?、?、!、!替换
    如果你之前没改过我脚本的话,增加第一行到脚本即可(注意前面必须要有4个空格对齐)。
    1.     text = re.sub(r'([?!])([^\s?!])', r'\1 \2', text)
    2.     text = re.sub(r'([??!!])([^\s??!!])', r'\1 \2', text)
    复制代码


    问号空格.png

    点评

    感谢指导!  发表于 2024-11-28 10:47

    评分

    参与人数 1活跃度 +100 收起 理由
    KAKAROTO + 100

    查看全部评分

    回复

    使用道具 举报

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

    本版积分规则

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