给B站添加自动跳过片头片尾功能

开头有话说

写这篇文章的意义并不在于分享技术,而是让更多的人知道这个方法,使用这个方法.git

原文地址: https://segmentfault.com/a/11...

事出必有因

最新在B站刷<夺宝幸运星>这个动画片,动画时长8:30,片头1:30,片尾长1:08.合着中间内容就6分钟左右,我却要看2:30的片头片尾.每次遇到片头片尾都要手动去拉进度条,简直不能忍,个人时间那么宝贵,那居然让我看片头!而这时候我发现B站居然么有跳过片头片尾的功能!
好,你没有,为了更愉快的刷个人动画片,我给你写个.github

问题咋解决

通过几十集的拉进度条训练,这个业务我已经很熟练了,我发现片头片尾的时长通常都是固定的.那么咱们要想自动跳过片头片尾其实能够:segmentfault

  • 在视频加载完成后跳过指定的时间
  • 在视频播放到还剩指定时间的时候切换到下一集

好了思路有了,那怎么控制视频跳过期间呢?ide

一开始我想经过控制鼠标来解决.后来发现不可控因素太多,因而我开始翻B站的代码,但愿能够获得一些提示,黄天不负无聊人,我在window对象上发现了player这个属性,而这个属性还有一大坨的方法:动画

play
pause
reload
seek
...

简单试验以后发现,经过这个player属性上带的方法咱们就能够控制播放行为.
同时还发现了一些player的事件code

video_media_ended
video_media_error
video_media_loaded
...

结合以上所得,咱们就能够实现咱们想要的功能了.视频

代码长这样

function skip (start_length, end_length) {
    if (!start_length || !end_length) {
        return console.error('请设置片头和片尾时长')
    }
    let total_time = player.getDuration();
    let skip_point_start = start_length;
    let skip_point_end = total_time - end_length;
    let has_listener = false;
    const interval = 5000;
    window.timer = 0;

    function start () {
        console.log('开搞');
        if (timer) {
            clearInterval(timer);
        }
        handler();
        timer = setInterval(handler, interval)
    }
    function handler () {
        let current_time = player.getCurrentTime();
        if (current_time < skip_point_start) {
            console.log('跳过片头')
            return window.player.seek(start_length);
        }
        if (current_time >= skip_point_end) {
            console.log('跳过片尾,下一集')
            if (!has_listener) {
                has_listener = true;
                window.player.addEventListener('video_media_loaded', start);
            }
            return window.player.next();
        }
    }
    start();
}

固然,如咱们前面所说,要使用这个脚本须要指定两个时间:
片头时长片尾时长,单位都是秒.
而后把这两个参数传给上面这个方法执行就好了对象

skip(90, 68);

这样就能够自动跳过片头片尾了,珍惜咱们宝贵的时间.事件

效果怎么样

我用了两天时间,恩恩,不错,对于固定片头片尾的剧很好,可是会遇到一些片头规则,片尾不规则的状况,这种状况会出问题,常常是没看完就切换到下一集了.但这个问题没关系,你们注意就好了.ip

更多的过程

我把一些更详细的内容放在仓库了,有须要的能够自取,记得转载注明出处就ok了
B站跳过开头结尾脚本 ~ aqiongbei/bilibili_scripts

相关文章
相关标签/搜索