您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows speed-adjusted time for YouTube videos
当前为
- // ==UserScript==
- // @name YouTube Speed-Adjusted Time Display
- // @namespace http://tampermonkey.net/
- // @version 1.1
- // @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');
- const remainingTimeDisplay = document.querySelector('.speed-adjusted-time');
- if (!currentTimeDisplay || !durationDisplay || !remainingTimeDisplay) return;
- const currentTime = video.currentTime;
- const duration = video.duration;
- const playbackRate = video.playbackRate;
- const adjustedCurrentTime = currentTime / playbackRate;
- const adjustedDuration = duration / playbackRate;
- const remainingTime = adjustedDuration - adjustedCurrentTime;
- 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);
- remainingTimeDisplay.textContent = `(-${formatTime(remainingTime)})`;
- }
- function createSpeedTimeDisplay() {
- const timeContainer = document.querySelector('.ytp-time-wrapper');
- if (!timeContainer || document.querySelector('.speed-adjusted-time')) return;
- const speedTimeDiv = document.createElement('div');
- speedTimeDiv.className = 'speed-adjusted-time ytp-time-display';
- speedTimeDiv.style.color = 'inherit';
- speedTimeDiv.style.fontSize = 'inherit';
- timeContainer.append(speedTimeDiv);
- }
- 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);
- })();