您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows speed-adjusted time for YouTube videos
当前为
// ==UserScript== // @name YouTube Speed-Adjusted Time Display // @namespace http://tampermonkey.net/ // @version 1.0 // @description Shows speed-adjusted time for YouTube videos // @author kavinned // @match https://www.youtube.com/* // @grant none // @icon https://www.google.com/s2/favicons?sz=64&domain=YouTube.com // @license MIT // ==/UserScript== (function() { 'use strict'; function updateTimeDisplay() { const video = document.querySelector('video'); if (!video) return; const currentTimeDisplay = document.querySelector('.ytp-time-current'); const durationDisplay = document.querySelector('.ytp-time-duration'); if (!currentTimeDisplay || !durationDisplay) return; const currentTime = video.currentTime; const duration = video.duration; const playbackRate = video.playbackRate; const adjustedCurrentTime = currentTime / playbackRate; const adjustedDuration = duration / playbackRate; function formatTime(seconds) { const hours = Math.floor(seconds / 3600); const minutes = Math.floor((seconds % 3600) / 60); const secs = Math.floor(seconds % 60); if (hours > 0) { return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; } else { return `${minutes}:${secs.toString().padStart(2, '0')}`; } } currentTimeDisplay.textContent = formatTime(adjustedCurrentTime); durationDisplay.textContent = formatTime(adjustedDuration); } function createSpeedTimeDisplay() { const timeDisplay = document.querySelector('.ytp-time-display'); if (!timeDisplay || document.querySelector('.speed-adjusted-time')) return; const speedTimeDiv = document.createElement('div'); speedTimeDiv.className = 'speed-adjusted-time ytp-time-display'; speedTimeDiv.style.marginLeft = '10px'; speedTimeDiv.style.color = '#fff'; speedTimeDiv.style.fontSize = '14px'; timeDisplay.parentNode.insertBefore(speedTimeDiv, timeDisplay.nextSibling); } const observer = new MutationObserver((mutations) => { if (document.querySelector('video')) { createSpeedTimeDisplay(); updateTimeDisplay(); } }); observer.observe(document.body, { childList: true, subtree: true }); setInterval(updateTimeDisplay, 1000); document.addEventListener('ratechange', updateTimeDisplay, true); })();