Matrix 首页推荐
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
我想有不少人和我一样并不喜欢 B 站视频中 up 主的带货广告,例如千篇一律的某转,某按摩仪。
从技术上来说,带货广告不像常规在网页中被植入的横幅广告或者「牛皮癣」广告那样容易被识别。因为浏览器的广告拦截插件是通过某些技术特征来识别广告的。例如广告在渲染时需要发送请求到特定的域名来获取广告的文案以及图片,那么插件只需要将阻止所有指向这些域名的请求被发出即可。
可带货广告不同,它不存在什么技术特征,它与 up 主的视频内容浑然天成。想单纯的从技术特征这条路来解决很难。
目前有一类针对带货类广告的拦截插件,例如 SponsorBlock。它依赖的是「众包」,即依赖观众人肉识别到视频中的广告区间段,然后提交到一个共享的数据库中。

上图就是 SponsorBlock 的使用截图,在该视频的时间轴最尾端你可以看到一段高亮的区域,该时间段即为广告时间。而在右侧你提交你识别的到的关于该视频的广告时间段。
开发一个 B 站的 SponsorBlock 的确也是一个跳过带货广告的办法,但我始终觉得它并不是万全之策,因为它依赖于用户的自驱力,依赖于规模效应。并且很明显也只有被多数人观看到的头部视频才能够享受到该「待遇」。
AI 的出现改变了这一切.
如何利用 AI 跳过带货广告
我编写了一个开源插件来实现利用 AI 来跳过带货广告,后面我会详解其工作原理,在正式开始前先使用一个视频来看看效果:
它的实现很简单——通过字幕。
根据我对 B 站播放页面的技术分析,B站的视频会分两次加载视频的字幕信息,第一次是字幕的元信息。之所以称之为元信息,是因为它不包含字幕本身,而是包含围绕字幕的有关其他信息,例如该字幕属于哪国语言,该字幕是否由 AI 生成。在获取的到元信息之后才会正式加载字幕。以上述视频为例,字幕的原始数据如下:

当然如上图所示的原始字幕信息是无法喂给 AI 的,我通过代码对字幕的原始数据进行了二次转化,转化后的字幕格式示例如下:
[0.82-2.06]:哇来了哇;[2.06-5.48]哦让我们去看看这个今天就吃一桶螺蛳粉了;[5.48-9.41]哇这哇哦终于吃螺蛳粉了;
再接着使用下方提示词将转化之后的字幕内容发送给 AI:
接下我会分享给你一段视频字幕,该段字幕由多个字幕语句组成。
每一句字幕包含三部分内容,分别是起始时间,结束时间,以及字幕内容,格式如下:[{起始时间}-{结束时间}]:{字幕内容}。语句之间由分号(;)隔开。
帮助我分析其中哪些是与视频无关的广告内容,给出其中连续广告内容起始时间和终止时间。我可能还会分享给你视频的标题以及视频的描述,用于辅助你判断广告内容。
如果存在广告内容,请将广告的起止时间返回给我,返回格式为:{startTime: number, endTime: number};如果不存在广告内容,返回 null
字幕内容如下
这组提示词其实还有提升的空间,我还可以通过向AI提供更丰富的信息来协助它判断广告内容为何,例如视频的标题和描述。所以的最终喂给AI的最终提示词中实际上是包含视频的标题以及描述的:
……
字幕内容如下: xxxx
视频标题如下: xxxx
视频描述如下: xxx
使用方式
该插件可以在 Chrome 浏览器的应用商店找到,直接搜索「Bilibili Ad Killer」即可。并且它还是一个开源项目,如果你是一名开发人员的话可以克隆项目到本地,选择自行编译然后加载到 Chrome 浏览器中。

如上图所示,目前它处于一个「短小精悍」的状态,提供的选项所见即所得。可能唯一需要解释的是「忽略小于 5 分钟的视频」这个选项——之所以提供这个选项是因为我发现对于短视频AI的过滤的效果并不是那么好,甚至会出现误判,所以默认暂且不识别五分钟以内的视频。
唯一需要用户提供的是一个 Gemini API Key。现阶段还仅支持 Gemini 模型的原因是,一方面我的精力有限想要兼容更多的模型需要投入更多的时间精力;另一方面也受到一个技术上的限制还在设法解决。
未来如果时间允许的话,还是希望能够做到广告数据的共享,毕竟每一次的广告识别对个体来说都是白花花的金钱。
最后如果你并不清楚申请 Gemini API Key,可以参考我自己的整理的这篇插件的完整使用教程。
Enjoy 😜

