🏠 Home 

自定义视频播放速度

允许自定义视频播放速度

// ==UserScript==
// @name         自定义视频播放速度
// @version      2.2
// @description  允许自定义视频播放速度
// @author       ChatGPT
// @match        http://*/*
// @match        https://*/*
// @grant        GM_setValue
// @grant        GM_getValue
// @run-at       document-end
// @namespace    https://greasyfork.org/users/452911
// ==/UserScript==
function setVideoSpeed() {
'use strict';
let videos = document.querySelectorAll('video,[class*="player"] *');
if (videos.length > 0 && !document.fullscreenElement) {
(function() {
'use strict';
let defaultSpeed = 1;
let currentSpeed = defaultSpeed;
let savedSpeed = GM_getValue('videoSpeed');
if (savedSpeed) {
defaultSpeed = parseFloat(savedSpeed);
currentSpeed = defaultSpeed;
}
let videos = document.querySelectorAll('video,[class*="player"] *');
for (let i = 0; i < videos.length; i++) {
videos[i].playbackRate = currentSpeed;
}
let control = document.createElement('div');
control.textContent = '倍速控制';
control.style.cssText = `
position: fixed;
right: 5px;
top: 30px;
padding: 2px;
background: #ddd;
border: 1px solid #999;
cursor: pointer;
z-index: 9999;
`;
document.body.appendChild(control);
control.addEventListener('click', () => {
let newSpeed = prompt('请输入新的播放倍速:', currentSpeed);
if (newSpeed) {
saveSpeed(newSpeed);
updateSpeed(newSpeed);
}
});
function updateSpeed(newSpeed) {
for (let i = 0; i < videos.length; i++) {
videos[i].playbackRate = newSpeed;
}
currentSpeed = newSpeed;
}
function saveSpeed(newSpeed) {
GM_setValue('videoSpeed', newSpeed);
}
window.addEventListener('speedChanged', (e) => {
let newSpeed = e.data;
updateSpeed(newSpeed);
});
let iframes = document.querySelectorAll('iframe');
iframes.forEach(applySpeed);
function applySpeed(iframe) {
let doc = iframe.contentDocument;
let videos = doc.querySelectorAll('video,[class*="player"] *');
videos.forEach(v => v.playbackRate = currentSpeed);
let iframes = doc.querySelectorAll('iframe');
iframes.forEach(applySpeed);
}
})();
}
}
let throttleTimer;
const throttle = () => {
if(throttleTimer) return;
throttleTimer = setTimeout(() => {
setVideoSpeed();
throttleTimer = null;
}, 800);
}
window.addEventListener('scroll', throttle);
setVideoSpeed();