pakku 2024.10.1 版本主要增加了针对B站最近频繁更新的弹幕智能云屏蔽功能的相关选项。
以下是 2024.10.1 版本相比于 2024.7.1 的变化。
新功能
阻止弹幕云屏蔽
B站近期灰度测试了多个版本的 弹幕智能云屏蔽 功能。此功能将隐藏部分权重较低的弹幕,且在播放器设置中无法完全关闭。
已有很多用户反馈此功能效果欠佳,且与 pakku 的 “自动弹幕优选” 功能互相干扰。因此,pakku 2024.10.1 版本增加了选项来阻止此功能生效。
如果你希望回退到播放器原先的可以设定等级的屏蔽功能,可以在勾选此选项的同时,添加以下 全局用户脚本。同时也可以尝试 pakku 的自动弹幕优选功能作为代替。
const FILTER_LEVEL = 3; // 仅保留权重大于等于此值的弹幕,权重范围一般为1到11
tweak_after_pakku(c=>{
let orig_len = c.objs.length;
c.objs = c.objs.filter(d => d.weight >= FILTER_LEVEL);
console.log('weight filtering:', orig_len, '->', c.objs.length);
});
自动弹幕优选的逻辑改进
pakku 2024.10.1 版本重写了自动弹幕优选的逻辑。之前的逻辑只会丢弃权重为 1 且未被合并的弹幕,因此对于个别弹幕实在过多的视频,弹幕密度依然会远超设置的阈值。 目前的逻辑将灵活处理这种情况,从效果上优于之前的版本,应该也优于播放器的弹幕智能云屏蔽功能。
如果你真的想知道目前的逻辑,以下是详细解释:
首先,对于一条弹幕,我们计算它的字符串长度 L,其中
₍₁₂₃₎
等角标数字记为 0.3 个字符。设它的字号为 S(默认为 25),则这条弹幕对弹幕密度的贡献定义为:
$\sqrt{L} \times \text{max}(\text{min}(\frac{S}{25}, 2.5), 0.7)^{1.5}$ (此公式对应 dispval 函数)某个时间点 t 的弹幕密度定义为 t 减去 4.5 秒到 t 之间这段时间内所有弹幕的贡献之和。这就是打开 “弹幕密度分析图” 之后在图表上看到的数字。
如果自动弹幕优选的阈值设置为 T,那么 pakku 会从前到后依次遍历每条弹幕,若此时弹幕密度 V 大于 T,设当前弹幕由 n 个弹幕合并而成,其权重的最大值为 w(介于 1 到 11 之间),则按以下公式计算丢弃此弹幕的概率:
$p = \frac{V-T}{T} - \frac{w-1}{10} - \frac{\sqrt{n}-1}{2}$ (此公式对应 judge_drop 函数)pakku 将按照概率 p 丢弃这条弹幕(如果大于 1,将一定丢弃此弹幕;如果小于 0,则不会丢弃此弹幕)。如果此弹幕被丢弃,则它不再计入后续的弹幕密度计算。
由于目前的逻辑会丢弃更多的弹幕,在更新之后你可能需要把阈值稍微调高一些,来维持与之前相近的效果。被此功能删除的弹幕数量可以在统计信息面板中查看。
角标可以显示最大弹幕密度
此前,pakku 可以在角标上显示过滤掉的弹幕数量或百分比。现在可以设置为显示最大弹幕密度。
已知情况 1:只有打开了 “自动减小字号” 或 “自动弹幕优选” 时 pakku 才会计算弹幕密度。因此如果这两个功能都没有打开,角标将显示为 0。此问题将在下一个版本修复。
已知情况 2:如果你打开了 “自动减小字号” 功能,则角标显示的数值可能大于在弹幕密度分析图上看到的数值。这是因为前者是在缩小前计算的,后者是在缩小后计算的。
其他改进
- (2024.10.1)改进了对个别视频获取弹幕分段数量的逻辑
- (2024.10.1)调整了 “自动减小字号” 功能的预设强度
Bug 修复
- (2024.8.1)弹幕信息显示框的快捷键功能与新版播放器不兼容
- (2024.10.2)从旧版本迁移设置可能出错
- (2024.10.1)输出XML格式时maxlimit字段有误