Greasy Fork

视频倍速播放(追剧学习神器)

看视频播太慢,这能忍?直接倍速播放,/n【食用方法】①调节右上角加速框右侧上下按钮即可调节倍率 ②在右上角的加速框内输入加速倍率,如2、4、8、16等。/n快捷键:①单手快捷键:“x”,“c” ②双手快捷键:ctrl + 左右箭头

当前为 2021-12-19 提交的版本,查看 最新版本

// ==UserScript==
// @name         视频倍速播放(追剧学习神器)
// @namespace    http://tampermonkey.net/
// @icon         https://img-blog.csdnimg.cn/20181221195058594.gif
// @version      1.1.1
// @description  看视频播太慢,这能忍?直接倍速播放,/n【食用方法】①调节右上角加速框右侧上下按钮即可调节倍率 ②在右上角的加速框内输入加速倍率,如2、4、8、16等。/n快捷键:①单手快捷键:“x”,“c”  ②双手快捷键:ctrl + 左右箭头
// @author       wll
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
// @grant        GM_getValue
// @grant        GM_setValue
// @match        *://ke.qq.com/webcourse/index.html
// @match        *://www.bilibili.com/*
// @match        *://www.iqiyi.com/*
// @match        *://ehuixue.cn/index/study/*
// @match        *://*.ehuixue.cn/index/study/*
// @match        *://*.chaoxing.com/*
// @match        *://*.douyin.com/*
// @match        *://*.youku.com/*
// @match        *://*.tv.cctv.com/*
// @note         增加支持网站:	依照规则增加@match所在标签即可
// @note         郑重声明:	本脚本只做学习交流使用,未经作者允许,禁止转载,不得使用与非法用途,一经发现,追责到底
// @note         授权联系:	[email protected]
// @note         版本更新	20-12-26 1.0.0	初版发布视频倍速播放
// @note         版本更新	21-02-04 1.0.1 	优化用户体验
// @note         版本更新	21-02-04 1.0.2 	优化标题,优化简介
// @note         版本更新	21-06-18 1.0.3 	增加新的倍速网址,ehuixue.cn/index/study,ehuixue.cn/index/study,chaoxing.com
// @note         版本更新	21-06-25 1.0.4 	增加新的倍速网址,douyin.com
// @note         版本更新	21-06-26 1.0.5 	增加新的倍速网址,pan.baidu.com,youku.com
// @note         版本更新	21-07-09 1.0.6 	修正哔哩哔哩网站无法暂停问题
// @note         版本更新	21-10-11 1.0.7 	由于百度云视频倍速播放收费,一时无法解决,暂时停用百度相关加速*://*.pan.baidu.com/*
// @note         版本更新	21-12-11 1.0.8  感谢用户“何佳林”,提供建议,增加快捷键控制倍速 ctrl + ->  ctrl + <-
// @note         版本更新	21-12-13 1.0.9  增加cctv支持,增加倍速控件悬浮不跟随滑动
// @note         版本更新	21-12-14 1.1.0  增加倍率记忆功能,防止页面刷新倍率重新计算
// @note         版本更新	21-12-19 1.1.1  1、增加单手快捷键: “x” 、“c”, 2、增加寄存器倍率存储,浏览器全局使用 3、增加倍速框自动聚焦

// ==/UserScript==

(function() {
	'use strict';

	var stepHtml = '<input id="rangeId" type="number" step="0.1" min="0.1" max="20" value="1" autofocus="autofocus" style="z-index:999999;position:fixed;top:100px;right:100px;border:solid 1px;background-color:#E3EDCD;" />';
	$("body").prepend(stepHtml);
    var stopFlag = true;

	window.setInterval(function() {
		let step = document.getElementById("rangeId").value || 1.0;
		var htmlVideo = $("video").length;
		if(htmlVideo > 0) {
            console.log("倍速播放方法启动,当前倍率为....." + step);
			var url = location.href;

			if(url.indexOf('bilibili.com/video/') > 0) {
			    if(stopFlag){
			        //play video is auto
			    	document.querySelector('video').play();
			    	stopFlag = false;
			    }
			}

            if(step!=1){
            	localUtil.setGValue("speedStepKey",step);
            }
            var speedStepKey = localUtil.getGValue("speedStepKey");
            if(speedStepKey != null){
            	step = speedStepKey;
            	$("#rangeId").val(step);
            }

			// now play three times as fast just for the heck of it
			document.querySelector('video').playbackRate = step;
		} else {
			console.log("当前视频不支持倍速播放..... o(╥﹏╥)o");
		}

	}, 1000);

    document.onkeydown = function() {
		if (window.event.ctrlKey && (window.event.keyCode == 37)) {
			console.log("---");
			$("#rangeId").val(parseFloat(parseFloat($("#rangeId").val()) - 0.1 < 0.1 ? 0.1 : parseFloat($("#rangeId").val()) - 0.1).toFixed(1));
		}
		if (window.event.ctrlKey && (window.event.keyCode == 39)) {
			console.log("+++");
			$("#rangeId").val(parseFloat(parseFloat($("#rangeId").val()) + 0.1 > 20  ? 20  : parseFloat($("#rangeId").val()) + 0.1).toFixed(1));
		}
	}
	
	document.addEventListener("keypress", function(e) {
		switch (e.key) {
			case "x":
				$("#rangeId").val(parseFloat(parseFloat($("#rangeId").val()) - 0.1 < 0.1 ? 0.1 : parseFloat($("#rangeId").val()) - 0.1).toFixed(1));
				break;
			case "c":
				$("#rangeId").val(parseFloat(parseFloat($("#rangeId").val()) + 0.1 > 20  ?  20 : parseFloat($("#rangeId").val()) + 0.1).toFixed(1));
				break;
		}
	});

    let localUtil = {
		getSValue(name) {
			return window.localStorage.getItem(name);
		},
		setSValue(name, value) {
		    window.localStorage.setItem(name, value);
		},
		getGValue(name) {
			return window.GM_getValue(name);
		},
		setGValue(name, value) {
			window.GM_setValue(name, value);
		}
	}

})();