Skip to content

XML弹幕转换

支持将XML格式的弹幕文件转换为 ASS 字幕格式,可用于弹幕压制或播放器加载。

底层使用 DanmakuFactory 实现,兼容 B 站弹幕

快速开始

使用界面

  1. 打开"工具" -> "弹幕转换"
  2. 选择XML弹幕文件
  3. 配置转换参数
  4. 点击"开始转换"

使用预设

为常用配置创建预设,避免重复设置:

  1. 配置好转换参数
  2. 点击"保存为预设"
  3. 输入预设名称
  4. 下次直接选择预设即可

配置选项

视频分辨率

设置弹幕的目标分辨率,需要与视频分辨率一致,这个参数非常重要

自适应分辨率

支持自适应分辨率功能,可以根据视频自动调整,只在和视频压制时生效。

弹幕字体

选择弹幕显示的字体。

web和客户端使用的字体方式并不相同,会有差异,再加上获取字体 postscriptName 的微妙的有些不同,导致某些字体web中选择后无法使用。

docker下的emoji文本渲染错误,猜测和fontconfig有关,但是我不会改,如果你会欢迎发issue

字体大小

弹幕文字的大小,单位:像素。

推荐值:

  • 1080p: 35-45
  • 720p: 25-35
  • 4K: 65-85

不透明度

弹幕的不透明度,范围:0-1。

  • 1.0: 完全不透明
  • 0.8: 推荐值
  • 0.5: 半透明
  • 0.0: 完全透明

屏蔽关键词

过滤包含特定关键词的弹幕。

支持正则表达式,每行一个关键词。

示例:

广告
联系方式
\d{6,}  # 过滤6位以上数字(如QQ号)

描边宽度

弹幕文字的描边宽度,增强可读性。

推荐值:2-3

阴影

为弹幕添加阴影效果,增强可读性。

加粗

将弹幕文字设置为粗体。

批量转换

支持批量转换多个弹幕文件:

  1. 选择多个XML文件
  2. 使用相同的配置
  3. 批量转换

与Webhook配合

可以在 Webhook 中配置自动转换弹幕:

  1. 打开"设置" -> "Webhook"
  2. 启用"自动转换弹幕"
  3. 选择弹幕预设

录制完成后会自动转换弹幕。

导入导出预设

可以导出预设分享给他人,或备份预设:

  1. 点击"导出预设"保存为文件
  2. 点击"导入预设"加载文件

TIP

请尽量保证导出与导入的软件版本一致

自定义过滤函数

注意

此功能为 biliLive-tools 的原生实现,并非 DanmakuFactory 原生实现。转换完成后请查看生成的 ASS 文件以确认过滤效果。

功能说明

自定义过滤函数允许您编写 JavaScript 代码来精确控制哪些弹幕应该被保留或过滤,提供比基础过滤选项更灵活的控制能力。

函数签名

typescript
function filter(type: "danmu" | "sc" | "guard" | "gift", data: DanmakuData): boolean;

参数:

  • type: 弹幕类型
    • danmu: 普通弹幕
    • sc: SuperChat(醒目留言)
    • guard: 舰长/提督/总督等上舰消息
    • gift: 其他礼物消息
  • data: 弹幕数据对象,包含该条弹幕的所有信息

返回值:

  • true: 保留该条弹幕
  • false: 过滤掉该条弹幕

数据结构

属性命名规则

  • 弹幕文本内容使用 #text 属性
  • 其他属性使用 @_ 前缀,如 @_user@_uid
  • raw 原始数据属性不会被解析

由于不同工具生成的弹幕格式可能存在差异,建议在判断时使用可选链(?.)等防御式编程方式,避免报错

danmu (普通弹幕)
参数类型说明
#textstring弹幕文本内容
@_pstringB站弹幕参数(参考B站弹幕格式)
@_userstring发送者用户名
@_uidstring发送者用户ID
@_timestampnumber弹幕发送的Unix时间戳
sc (SuperChat/醒目留言)
gift (礼物)
参数类型说明
@_tsnumber相对时间(秒)
@_giftnamestring礼物名称
@_giftcountnumber礼物数量
@_userstring发送者用户名
@_uidstring发送者用户ID
@_timestampnumber发送的Unix时间戳
guard (舰长/上舰)

使用示例

示例 1: 按关键词过滤

仅保留包含特定表情的弹幕:

js
function filter(type, data) {
  // 只处理普通弹幕
  if (type !== "danmu") return true;

  // 保留包含 🐖 的弹幕
  return data["#text"]?.includes("🐖");
}

提示

转换完成后建议用文本编辑器打开生成的 ASS 文件,检查过滤效果是否符合预期。

故障排除

弹幕转换失败

如果你是Windows新安装的系统,请尝试安装系统相关运行库,如果不是,也请安装试试。

转换失败

  1. 检查XML文件是否完整
  2. 检查文件编码是否为UTF-8
  3. 尝试使用其他弹幕文件测试
  4. 查看日志获取详细错误

字体无法显示

  1. 确认系统已安装该字体
  2. 尝试使用系统默认字体
  3. Docker环境需要挂载字体目录

Released under the GPLv3 License.