給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

相關文章
相關標籤/搜索