Skip to content

zhimengsub/SubtitleCleaner

Repository files navigation

字幕清理工具

简介

对ts源中提取出的ass字幕进行处理,包括合并多行对白、清理各种不必要的符号、说话人备注、转换假名半角等,输出ass或txt。

程序下载

Releases页面选择最新版本的程序下载。

功能具体说明

⚠️部分功能可以在配置文件中详细设置,括号中即配置文件中对应的条目。

合并

合并多行对白及其时间(需要保证字幕按时间顺序排列)

📝 分隔符:一般使用merge.sep(默认为空格)或merge.sep_on_overlap(默认为空格),具体用法见下文;

当新行以merge.special_prefix开头时(默认为空字符串,表示关闭该功能),则改为使用merge.sep_on_special_prefix分隔。

  1. 按成对括号合并(开关:merge.pair,默认开启)

    从首次出现左括号起,经过若干行后出现对应的右括号,则将这些行合并,并使用merge.sep分隔。(如需删除括号本身,见清理

    如:第一行《aa,第二行bb》,两行合并为一行得到《aa bb》

    ⚠️合并时左括号后和右括号前后不添加分隔符。

    配置:在merge.merge_pairs_left中配置左括号,在merge.merge_pairs_right中配置对应的右括号,二者必须按顺序一一对应。

    默认取值为

    merge.merge_pairs_left: "《<<〈「「『(([["

    merge.merge_pairs_right: "》>>〉」」』))]]"

  2. 按单个符号合并(开关:merge.singlesuf,默认开启)

    merge.merge_suffix(默认为→➡)中任一符号结尾的对白,和下一行合并,并使用merge.sep分隔,并将该符号删除。

  3. 按时间合并(开关:merge.time,默认关闭):

    时间有重叠的相邻对白合并,使用merge.sep_on_overlap分隔。

  • 可配置参数:

    • 📝 合并行数限制merge.limit

      整数。为避免合并后内容过长,可以限制合并行数达到merge.limit后强制新建一行。

      默认为2,设为0表示不限制。

    • 📝 忽略按时间合并时的行数限制merge.ignore_limit_on_overlap

      默认关闭。开启后可以保证输出的每一行都不会有时间重叠。

清理

  1. 直接删除单个字符:

    配置:symbols.remove,把所有需要删除的单个字符依次写入,默认包括:

    。。!!??~~∼・♪≫《》<><>〈〉

    📝:如果添加 等各种括号也不影响前面的合并,会先合并再删除。

  2. 替换单个字符(配置:symbols.replace_key symbols.replace_val):

    默认symbols.replace_key: "、、⚟",依次替换为symbols.replace_val: " "(全替换为半角空格)。

    配置方法:替换前的单个字符写在symbols.replace_key中,替换后的单个字符一一对应按顺序依次写在symbols.replace_val中。

  3. 直接删除以下字符(不可配置):\N

  4. 半角方括号[]及其括起来的的内容(不可配置);

  5. rubi字幕(平假名注音字幕)(开关:remove_rubi,默认开启)

  6. 特效标签(花括号括起来的),开启时全部删除,关闭时保留(如果合并了多行,只保留第一行的)(开关:remove_format_tags,默认开启)

  7. 半角圆括号()及其括起来的内容,一般为说话人或环境音提示(开关:remove_comments,默认开启);

  8. 说话人标识。匹配规则为:从行首开始全是片假名,然后紧接一个全角冒号(开关:remove_speaker,默认开启)。

  9. 特定文本替换(配置:texts.replace):

    texts.replace中的键替换为对应的值(冒号左边替换为右边),如将ウソ替换为ダメ替换为だめ

    注意texts.replace字典中最后一行的结尾不能有逗号。

其他

  1. 假名宽度替换(FullwidthConverter.py)(开关:convert_width,默认开启):

    将半角片假名,以及 等符号转换为全角;

    将全角数字、空格转换为半角。

  2. 添加前缀(开关:add_newline_prefix,默认开启):

    在输出的每一行开头添加\N前缀。

  3. 数字宽度替换(开关:format_digit,默认开启):

    若一行对白只含有一个数字,则数字使用全角,若含有多个数字,则所有数字均使用半角。

  4. 标注时间重叠行(开关:mark_overlap,默认开启):

    当某几行的时间出现重叠时,在Actor栏中标注(如:时间重叠1)。

  5. 标注分工(设置值:mark_segment,默认为3,设为0表示关闭):

    把全文均分为mark_segment部分,每部分的起始位置标注在Actor栏中(如:分段1开始),方便分工。

  • 可配置参数:

    • 📝 输出格式format

      字符串,默认为 ass,表示输出ass字幕文件,也可设置为txt,表示文本文件。

配置文件格式

配置文件为同目录下的configs.json,使用JSON语法

📝 如果误删,重新运行一次SubCleaner.exe即可生成。

默认配置:

{
    "format": "ass",
    "merge": {
        "pair": true,
        "singlesuf": true,
        "time": false,
        "limit": 2,
        "ignore_limit_on_overlap": false,
        "sep": " ",
        "sep_on_overlap": " ",
        "special_prefix": "",
        "sep_on_special_prefix": "\\N",
        "merge_pairs_left": "《<<〈「「『(([[",
        "merge_pairs_right": "》>>〉」」』))]]",
        "merge_suffix": "→➡"
    },
    "symbols": {
        "remove": "。。!!??~~∼・♪≫《》<><>〈〉",
        "replace_key": "、、⚟",
        "replace_val": "   "
    },
    "texts": {
        "replace": {
            "ウソ": "",
            "イヤ": "",
            "ダメ": "だめ",
            "ヤツ": "",
            "ジャマ": "邪魔",
            "ケンカ": "喧嘩",
            "ホント": "本当"
        }
    },
    "remove_rubi": true,
    "remove_format_tags": true,
    "remove_comments": true,
    "remove_speaker": true,
    "convert_width": true,
    "add_newline_prefix": true,
    "format_digit": true,
    "mark_overlap": true,
    "mark_segment": 3
}

使用方式

按需求修改配置文件configs.json,然后将需要处理的字幕文件ass拖放到SubCleaner.exe上,即可得到处理后的文件,默认输出文件名为<输入文件名>_cleaned

也可以使用命令行进行更多配置。

其他命令行参数

格式

SubCleaner.py [-h] [-o OUTFILE] [-q] [--offsetms OFFSETMS] [-c CONFIG] [--log] InputFile

可选参数说明:

-o OUTPUT, --output OUTPUT

输出文件路径,默认为<输入文件名>_cleaned。

-q, --quit

结束后不暂停程序直接退出,方便命令行调用。不加该参数程序结束时会提示请按任意键继续...

--offsetms OFFSETMS

输出ass整体时间偏移毫秒数,负数为提前,正数为延后。

-c, --config CONFIG

指定配置文件的路径,默认为同目录下的config.json

--log

记录日志,日志存储到同目录下的<输入文件名>_log.txt。

📝 使用命令行参数需要先SubCleaner.exe所在目录打开命令行,然后输入Subcleaner.exe <字幕文件路径> <其他命令行参数>,如Subcleaner.exe input.ass -o output.ass --offsetms -355 --log -q

FAQ

在指定目录打开命令行

点击资源管理器的地址栏,输入cmd后按回车。

参考


Caption2Txt.bat

说明:批处理文件,依次调用Caption2Ass(请自行搜索下载)提取ts中的ass、SubCleaner对提取出的字幕进行清理。

使用方法:拖放ts文件到批处理文件上。

⚠️必须把本脚本与Caption2Ass_PCR.exe、SubCleaner.exe放在同一目录下才能正常工作!

提出修改建议 / 运行时的错误和BUG

请给我提出Issue,看到后我会及时处理。

Changelog

FullwidthConverter

  • 1.0.4_halfwidth-sp

    • 空格全部变为半角
  • v1.0.4

    • 空格全部变为全角
  • v1.0.3

    • 修改全角数字为半角数字
  • v1.0.2

    • 添加-q, --quit --log参数,方便命令行调用
  • v1.0.1

    • 优化直接运行程序时的提示
  • v1.0

    • 实现基本功能
    • 支持UTF-8 (with BOM)、GBK编码格式文件
    • 一次只支持单个文件

SubCleaner

  • v3.0.2

    • 支持新的参数
  • v3.0.0

    • 重构代码,支持输出ass
    • 支持更多可配置参数,并使用配置文件读取
  • v2.4.5.001

    • 一句话内只有一位数字时改为全角,同时出现多位数字时保持半角
  • v2.4.4.002_halfwidth-sp

    • 空格全部变为半角
  • v2.4.4.002:

    • 使用假名转换器v1.0.4
    • 不含拟声词删除功能
  • v2.4.3

    • 顿号替换为全角空格
    • v2.4.3.002: 拟声词误删较多,暂时关闭该功能
  • v2.4.2

    • 使用假名转换器v1.0.3
  • v2.4.1

    • 完善台词清理符号
  • v2.4.0

    • 完善台词清理符号
    • 台词清理新增删除拟声词v0.2
    • 完善台词合并行为(每两行合并一次)
  • v2.3.1

    • 转移仓库至zhimengsub
  • v2.3.0

    • 改进台词合并的规则
    • 跳过Rubi(注音)的台词
  • v2.2.0

    • 优化输出内容(存在bug:时间相同的台词合并时也会以全角空格隔开)
  • v2.1.0

    • 新增几对合并标志符号,优化输出内容
  • v2.0.0

    • 修改台词合并逻辑
    • 修复合并及清理时的一些bug
    • 修改默认输出文件名为<输入文件名>.txt
    • 添加-q, --quit --log参数,方便命令行调用
  • v1.0.1

    • 优化直接运行程序时的提示
  • v1.0

    • 实现基本功能
    • 一次只支持单个文件