写这篇文章的意义并不在于分享技术,而是让更多的人知道这个方法,使用这个方法.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