Skip to content

zhimengsub/SubtitleCleaner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Jul 8, 2024
d261c0b · Jul 8, 2024

History

40 Commits
Jul 8, 2024
Mar 9, 2023
Oct 15, 2022
Mar 9, 2023
Oct 12, 2022
Jul 8, 2024
Jul 8, 2024
Jul 8, 2024

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

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