Better speed controls for youtube, use `o` to slow down, `p` to speed up. Time is displayed according to the speed of the video.
// ==UserScript==
// @name youtube speed+
// @namespace https://github.com/rafalou38
// @version 1.0.1
// @description Better speed controls for youtube, use `o` to slow down, `p` to speed up. Time is displayed according to the speed of the video.
// @author RafaelMC
// @match https://www.youtube.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=youtube.com
// @grant none
// @license MIT
// ==/UserScript==
(function () {
"use strict";
console.log("YOUTUBE SPEED SWITCH INJECTED");
const video = document.querySelector(".html5-main-video");
const wrapper = document.querySelector(".ytp-time-display");
const speedView = document.createElement("span");
speedView.classList.add("ytp-time-current");
speedView.style.marginLeft = "2ch";
if (video.playbackRate !== 1) speedView.innerText = video.playbackRate + "x";
wrapper.appendChild(speedView);
let lastTimeout = null;
document.onkeydown = (e) => {
const bezel = document.querySelector(".ytp-bezel-text");
if (e.key == "p") {
video.playbackRate += 0.25;
console.log("YOUTUBE SPEED +");
} else if (e.key == "o") {
video.playbackRate -= 0.25;
console.log("YOUTUBE SPEED -");
} else return;
bezel.parentNode.parentNode.style.display = "";
bezel.innerText = video.playbackRate + "x";
if (lastTimeout) clearTimeout(lastTimeout);
lastTimeout = setTimeout(() => {
bezel.parentNode.parentNode.style.display = "none";
}, 1000);
speedView.innerText =
video.playbackRate === 1 ? "" : video.playbackRate + "x";
};
// override the youtube's default speed function
const old_speed_fn = _yt_player.hJ;
_yt_player.hJ = (a, b) => {
if (!b) a /= video.playbackRate;
return old_speed_fn(a, b);
};
})();