自用脚本,使用键盘快捷键:Alt+< 减速;Alt+>加速;Alt+/ 重置速度。
适用于b站小红书等等大部分网页视频。
// ==UserScript==
// @name 视频倍速快捷键
// @version 1.0
// @match *://*/*
// @grant none
// @run-at document-idle
// ==/UserScript==
(function () {
'use strict';
// 速率档位:只在这个列表里前进/后退
const RATES = [0.25, 0.5, 0.75, 1, 1.5, 2, 2.5, 3, 4, 5, 10];
const DEFAULT_RATE = 1;
// ---------- 找当前视频 ----------
function getVideo() {
const videos = Array.from(document.querySelectorAll('video'));
if (!videos.length) return null;
return (
videos.find(v => !v.paused && !v.ended && v.readyState > 2) ||
videos.find(v => !v.paused) ||
videos[0]
);
}
// ---------- 速率逻辑 ----------
function nearestIndex(rate) {
let idx = 0, min = Infinity;
RATES.forEach((r, i) => {
const d = Math.abs(r - rate);
if (d < min) { min = d; idx = i; }
});
return idx;
}
function stepRate(dir) {
const v = getVideo();
if (!v) { showToast('未找到视频'); return; }
let idx = nearestIndex(v.playbackRate) + dir;
idx = Math.max(0, Math.min(RATES.length - 1, idx)); // 到两端后不再越界
v.playbackRate = RATES[idx];
showToast(RATES[idx] + 'x');
}
function resetRate() {
const v = getVideo();
if (!v) { showToast('未找到视频'); return; }
v.playbackRate = DEFAULT_RATE;
showToast(DEFAULT_RATE + 'x');
}
// ---------- 唯一保留的 UI:屏幕中央文字提示 ----------
let toastEl = null, toastTimer = null;
function showToast(text) {
if (!toastEl) {
toastEl = document.createElement('div');
toastEl.style.cssText = [
'position:fixed', 'left:50%', 'top:50%',
'transform:translate(-50%,-50%)',
'z-index:2147483647',
'padding:12px 24px',
'font-size:28px', 'font-weight:bold',
'color:#fff', 'background:rgba(0,0,0,.65)',
'border-radius:16px',
'pointer-events:none', 'user-select:none',
'white-space:nowrap',
'opacity:0', 'transition:opacity .25s'
].join(';');
}
// 全屏时挂到全屏元素内,保证提示可见
const host = document.fullscreenElement || document.documentElement;
if (toastEl.parentNode !== host) host.appendChild(toastEl);
toastEl.textContent = text;
toastEl.style.opacity = '1';
clearTimeout(toastTimer);
toastTimer = setTimeout(() => { toastEl.style.opacity = '0'; }, 600);
}
// ---------- 快捷键:Alt + , . / 0 ----------
document.addEventListener('keydown', (e) => {
if (!e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) return;
switch (e.code) {
case 'Comma': stepRate(-1); break; // Alt+, 减一档
case 'Period': stepRate(1); break; // Alt+. 加一档
case 'Slash': resetRate(); break; // Alt+/ 重置为 1
default: return;
}
e.preventDefault();
e.stopPropagation();
}, true);
})();