B站视频(bilibili )自定义倍速播放

可以自定义bilibili 播放倍速,方便学习网课。

目前為 2022-12-11 提交的版本,檢視 最新版本

// ==UserScript==
// @name         B站视频(bilibili )自定义倍速播放
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  可以自定义bilibili 播放倍速,方便学习网课。
// @author       小明
// @match        https://www.bilibili.com/video/*
// @icon         https://www.bilibili.com/favicon.ico
// @grant        unsafeWindow
// @license      MIT
// @run-at	     document-end
// ==/UserScript==

//快捷键一览
//q w e 分别对应点赞投币收藏
//
//d 关闭弹幕开启弹幕的
//
//f 控制全屏
//
//x c 减速,加速

(function() {
    'use strict';

    document.querySelector('video').playbackRate = 1

	//功能1:自定义倍速
	document.addEventListener("keydown", keyboard);

    //功能12:标题简洁
    unsafeWindow.onload = function(){
			setTimeout(function(){
				ptile();
			},6000)
    }

})();



//--------------自定义倍速 函数--------------------start
function keyboard(event) {
  let keycode = event.keyCode;
  let up = 0;

  //console.info('rate='+document.querySelector('video').playbackRate);

  //---绑定按键---
  if(keycode == 88){//减速
    up = 0;
  }else if(keycode == 67){//加速
	up = 1;
  }else{
	  return;
  }

  //---设置参数---
  //调节范围
  var rangeArr = [0.5,2.0];
  //步进
  var step = 0.05;



  //---设定范围---
  var rate = document.querySelector('video').playbackRate;
  if(rate<rangeArr[0] || rate>rangeArr[1]) return ;

  //调节速率
  if(up==0){
	   rate = rate - step;
  }else if(up==1){
	   rate = rate + step;
  }
  rate = rate.toFixed(2);
  document.querySelector('video').playbackRate = rate;


  //---显示当前速率---
  //console.info('rate='+document.querySelector('video').playbackRate);
}

//--------------自定义倍速 函数--------------------end

//--------------标题简洁 函数--------------------start

//标题简洁风
function ptile(){
	if(document.getElementById('multi_page') == null){
		return;
	}
    console.info('---ptile---');

	let arr = document.querySelectorAll('.list-box li .part');
	let prefix = findPrefix();
	for(var i = 0;i<arr.length;i++){
		var str = arr[i].innerText;
		str = str.replace(prefix,'');
		arr[i].innerText = str;
	}
}

//寻找标题公共前缀
function findPrefix(){
	var prefix = '';
	// NodeList 不是一个数组,是一个类似数组的对象.可以使用 Array.from() 将其转换为数组
	var liArr = document.querySelectorAll('.list-box li a');
	liArr = Array.from(liArr);
	var arr = liArr.map( (item, index) => {
		return item.title
	})

	//console.log("a标签的title集合", arr)
	if(arr.length>=3){

		//随机采样
		var index1 = getRndInteger(0,arr.length);
		var index2 = getRndInteger(0,arr.length);
		var index3 = getRndInteger(0,arr.length);
		var s1s2 = [arr[index1],arr[index2]];
		var s2s3 = [arr[index2],arr[index3]];
		console.info(s1s2);
		console.info(s2s3);
		var s1s2_Pre = longestCommonPrefix(s1s2);
		var s2s3_Pre = longestCommonPrefix(s2s3);
		if(s1s2_Pre == s2s3_Pre){
			prefix = s1s2_Pre;
		}
	}
	return prefix;
}


//JavaScript 最长公共前缀
function longestCommonPrefix(strs) {
    if(strs.length == 0)
        return "";
    let ans = strs[0];
    for(let i =1;i<strs.length;i++) {
        let j=0;
        for(;j<ans.length && j < strs[i].length;j++) {
            if(ans[j] != strs[i][j])
                break;
        }
        ans = ans.substr(0, j);
        if(ans === "")
            return ans;
    }
    return ans;
};

//返回 min(包含)~ max(不包含)之间的数字
function getRndInteger(min, max) {
  return Math.floor(Math.random() * (max - min) ) + min;
}
//--------------标题简洁 函数--------------------end

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址