黄金右键-灵活控制视频倍速-Golden Right-Flexibly control the playback rate of videos
按住"→"键倍速播放, 松开"→"键恢复原速, 灵活追剧看视频~ 支持所有H5视频的网站(YouTube、腾讯视频、优酷、番剧等); Press and hold the right arrow key (→) to set the video playback rate faster. Release the key to restore the original rate
在gpt的帮助下改了个多倍速调节的版本,比复制粘贴多个脚本好一点,感兴趣的可以看看。
// ==UserScript==
// @name 黄金右键 多种倍速 gpt改
// @description 按住"→"键倍速播放, 松开"→"键恢复原样, 灵活追剧看视频~ 支持b站、YouTube、腾讯视频、优酷...
// @namespace http://tampermonkey.net/
// @version 1.0.5
// @author SkyJin
// @include http://*
// @include https://*
// @grant none
// ==/UserScript==
//倍速,步进,按键
// 3倍速 步进2秒 按键 ? / 191
var faster_rate1 = 3;
var add_time1 = 2;
var key1 = 191;
// 6倍速 步进6秒 按键 ' " 222
var faster_rate2 = 6;
var add_time2 = 6;
var key2 = 222;
// 10倍速 步进10秒 按键 ; : 186
var faster_rate3 = 10;
var add_time3 = 10;
var key3 = 186;
(function () {
'use strict';
let down_count = 0;
let normal_rate = 1;
let page_video;
const tryPageVideo = () => Array.prototype.find.call(document.getElementsByTagName('video'), e => e.offsetWidth > 9);
const getPageVideo = () => {
return new Promise(resolve => {
const timer = setInterval(() => {
const page_video = tryPageVideo();
if (page_video) {
clearInterval(timer);
resolve(page_video);
}
}, 500);
});
};
const checkPageVideo = async () => {
if (page_video.offsetWidth <= 9) {
page_video = await getPageVideo();
if (page_video.offsetWidth <= 9) {
console.error('播放器检查失败,请检查当前页面是否存在html5播放器');
return false;
}
}
return true;
};
const relativeEvent = {
_stopper: e => e.stopPropagation(),
// 目前针对腾讯视频
shouldPrevent: location.origin.indexOf('qq.com') > -1 || location.origin.indexOf('wetv.vip') > -1,
prevent() {
document.body.addEventListener('ratechange', this._stopper, true);
document.body.addEventListener('timeupdate', this._stopper, true);
},
allow() {
document.body.removeEventListener('ratechange', this._stopper, true);
document.body.removeEventListener('timeupdate', this._stopper, true);
}
};
const downEvent = async e => {
const keyMap = {
[key1]: { rate: faster_rate1, time: add_time1 },
[key2]: { rate: faster_rate2, time: add_time2 },
[key3]: { rate: faster_rate3, time: add_time3 }
};
const keyConfig = keyMap[e.keyCode];
if (!keyConfig) return;
e.stopPropagation();
// 计数+1
down_count++;
// 长按右键-开始
if (down_count === 2 && await checkPageVideo()) {
relativeEvent.shouldPrevent && relativeEvent.prevent();
normal_rate = page_video.playbackRate;
page_video.playbackRate = keyConfig.rate;
console.log(`加速播放中,当前倍速: ${keyConfig.rate}`);
}
};
const upEvent = async e => {
const keyMap = {
[key1]: { rate: faster_rate1, time: add_time1 },
[key2]: { rate: faster_rate2, time: add_time2 },
[key3]: { rate: faster_rate3, time: add_time3 }
};
const keyConfig = keyMap[e.keyCode];
if (!keyConfig) return;
e.stopPropagation();
// 单击右键时
if (down_count === 1 && await checkPageVideo()) {
page_video.currentTime += keyConfig.time;
console.log(`前进 ${keyConfig.time} 秒`);
}
// 长按右键-结束
if (page_video.playbackRate !== normal_rate) {
page_video.playbackRate = normal_rate;
relativeEvent.shouldPrevent && relativeEvent.allow();
}
// 计数-重置
down_count = 0;
};
const init = async () => {
page_video = await getPageVideo();
document.body.addEventListener('keydown', downEvent, true);
document.body.parentElement.addEventListener('keyup', upEvent, true);
};
init();
})();