弹幕 XML 转 ASS 转换器

高性能 XML 弹幕转 ASS 字幕工具。支持 B 站弹幕转换,内置智能防碰撞算法,完美适配 Potplayer、IINA、VLC 及 Movist。

100% 本地运行 · 无需上传
跳转常见问题使用方法常见问题

弹幕 XML → ASS 转换工具

将哔哩哔哩 / AcFun 弹幕 XML 转换为无碰撞的 ASS 字幕,适用于 VLC、PotPlayer、IINA 等播放器。

常见问题

Q

怎么把 B 站 .xml 弹幕转成 ASS?

A

粘贴 XML 或上传 BBDown/you-get 导出的 .xml,把分辨率和字号设成和视频一致,点转换。把生成的 .ass 和视频放同一目录并同名,播放器即可自动加载弹幕。

Q

转换后弹幕时间轴不准 / 整体偏移?

A

B 站 p 属性里第一个数字是相对视频开头的出现秒数,而不是时间码。直接用原始 XML 转换时间轴就是对的;偏移通常出在 XML 被手动改过,或者视频和弹幕不是同一个版本/剪辑。

Q

弹幕重叠堆在一起怎么办?

A

转换时开启轨道防碰撞。工具把每条弹幕放进一条车道,等前一条滚出屏幕再复用该车道,弹幕密集的高能段也能保持可读,不会几十条叠着印。

Q

怎么在 IINA / mpv / PotPlayer 里加载 ASS 弹幕?

A

把 .ass 和视频放同一文件夹并同名(episode01.mp4 + episode01.ass)即可自动加载;也可以在 字幕 → 添加/载入 里手动选。mpv 还能用命令行 --sub-file=episode01.ass。

Q

为什么有些该固定在顶/底的弹幕却在滚动?

A

B 站用 p[1] 表示位置:1-3 滚动、4 底部固定、5 顶部固定。把所有弹幕都当滚动处理的转换器会让它们全飘起来。本工具会用正确的对齐标记把模式 4、5 固定住。

工作流程

弹幕 XML 转 ASS 转换器 是什么?

用 BBDown、you-get 或唧唧(Jijidown) 下载 B 站视频时,弹幕会单独存成一个 .xml 文件,里面是一行行 <d p="...">弹幕内容</d>。但 IINA、mpv、VLC、PotPlayer 都不认这个 XML——直接拖进播放器没有任何反应。本工具把弹幕 XML 转成播放器通用的 ASS 字幕轨,并顺手解决手动转换最常翻车的两点:时间轴(p 里第一个数字是相对秒数,不是时间码)和弹幕重叠(同一时刻几百条弹幕糊成一坨)。

如何使用 弹幕 XML 转 ASS 转换器

粘贴 XML 或上传 .xml 文件。转换前有三个设置真正影响效果:①分辨率——和视频保持一致(1920×1080、1280×720…),ASS 坐标是相对画布(PlayResX/PlayResY)的绝对值,对不上字就会飘或被裁切;②字号——1080p 用 36、720p 用 28 起步;③滚动时长——8 秒最舒服,弹幕太密就调短。点转换后,把 .ass 存成和视频同名(movie.mp4 → movie.ass)放同一目录,播放器会自动加载。

示例

输入 (B 站 XML):
<d p="12.53,1,25,16777215,1699...">前方高能</d>
  p[0]=12.53 出现秒数  p[1]=1 滚动  p[2]=25 字号  p[3]=16777215 颜色(白)

输出 (ASS):
[Script Info]
PlayResX: 1920
PlayResY: 1080
[Events]
Dialogue: 0,0:00:12.53,0:00:20.53,R2L,,0,0,0,,{\move(1920,64,-260,64)}前方高能

注意:ASS 颜色是 &HBBGGRR(字节反序),所以 RGB 0xFFFFFF 仍是 FFFFFF,但 0xFF0000 红色会变成 &H0000FF。

应用场景

1. 在 macOS 上用 IINA / mpv 观看下载的 B 站视频,保留原汁原味的滚动弹幕。

2. 用 ffmpeg (-vf "ass=movie.ass") 把弹幕压进视频做硬字幕,方便在不支持外挂字幕的设备上分享。

3. 本地转换超大弹幕(5 万条以上),不必把观看记录上传到第三方网站。

4. 让顶部/底部固定弹幕(模式 4/5)保持固定而不是被当成滚动弹幕,适合歌词、空耳类弹幕。

5. 把直播弹幕存档成永久、可搜索的 .ass 文件。

常见问题

为什么 VLC / IINA 显示不了我的 .xml 弹幕?

这些播放器只认 ASS/SRT/SSA 等字幕格式,不认 B 站的 XML 弹幕结构。必须先把 XML 转成 ASS——本工具就是把每条 <d> 弹幕映射成带正确时间轴和位移的 Dialogue 行。

弹幕能显示,但时间轴整体对不上,怎么回事?

B 站 XML 里 p 的第一个数字是相对视频开头的出现秒数,不是 HH:MM:SS 时间码。如果你手动改过这个文件、或把它当时间码处理,每条都会偏。直接用原始 XML 重新转换就能对齐。

防碰撞/防重叠是怎么做到的?

工具给每条滚动弹幕分配一条横向轨道(车道),按字符串长度算出它划过屏幕需要多久,在前一条没离开前不复用这条轨道,弹幕密集时也不会糊成一片。

4K 视频上弹幕太大或跑到屏幕外,怎么修?

把转换器的分辨率设成和视频一致,再把字号调小。ASS 坐标是相对 PlayResX/PlayResY 的;如果画布是 1080p 而视频是 2160p,播放器会把一切放大两倍。

相关工具