您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
zeigt an wie viel Restzeit ein Video läuft,
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.greasyfork.icu/scripts/488745/1384911/Erweiterung%20%28Rest%20time%29%20f%C3%BCr%20das%20gesehene%20Videos%20ausblenden%20oder%20markieren.js
// ==UserScript== // @name Erweiterung (Rest time) für das gesehene Videos ausblenden oder markieren // @namespace https://basti1012.bplaced.net // @version 2.0 // @description zeigt an wie viel Restzeit ein Video läuft, // auch wenn der Player schneller läuft, wird die Zeit mitgerechnet // Dieses Script wurde von 4lrick geschrieben (YouTube - Remaining time). // Ich hatte mir zwar auch eine Version erstellt. Aber seine läuft besser // @author 4lrick . Für mein YouTube Script umgebaut von basti1012 als Erweiterung // @allFrames true // @run-at document-end // @license MIT License // @noframes // @icon https://basti1012.de/images/favicon.png // ==/UserScript== if(!console_log_value){ var console_log_value = []; } var start2 = performance.now(); if(!array_localsdtorage){ var array_localsdtorage=[]; } if(!erweiterungs_einstellungs_array){ var erweiterungs_einstellungs_array=[]; } array_localsdtorage.push(["rest_zeit_einblenden", false]); function rest_lauf_zeit_anzeigen(){ if(localStorage.getItem('rest_zeit_einblenden')=='true'){ // beginn Script from 4lrick let init = false; let timeDisplay; function displayRemainingTime(){ const videoElement = document.querySelector('video'); if (videoElement) { const timeRemaining = (videoElement.duration - videoElement.currentTime) / videoElement.playbackRate; const hours = Math.floor(timeRemaining / 3600); const minutes = Math.floor((timeRemaining % 3600) / 60); const seconds = Math.floor(timeRemaining % 60); const isLive = document.querySelector('.ytp-live'); const viewLiveCount = document.querySelector('span[dir="auto"].bold.style-scope.yt-formatted-string'); const isEmbed = window.location.href; if ((viewLiveCount !== null && viewLiveCount.textContent.trim() !== "watching now") || isEmbed.includes("youtube.com/embed") && !isLive) { timeDisplay.textContent = `(${hours > 0 ? `${hours}:` : ''}${minutes < 10 ? '0' : ''}${minutes}:${seconds < 10 ? '0' : ''}${seconds})`; } else { timeDisplay.textContent = null; } } requestAnimationFrame(displayRemainingTime); } function initDisplay() { timeDisplay = document.createElement('div'); timeDisplay.style.display = 'inline-block'; timeDisplay.style.marginLeft = '10px'; timeDisplay.style.color = '#ddd'; const timeContainer = document.querySelector('.ytp-time-display'); if (timeContainer) { timeContainer.appendChild(timeDisplay); init = true; } } function checkVideoExists() { const videoElement = document.querySelector('video'); if (videoElement) { if (!init) { initDisplay(); } videoElement.onplaying = displayRemainingTime; } } const observer = new MutationObserver(checkVideoExists); const body = document.body; const config = { childList: true, subtree: true }; observer.observe(body, config); // end script from 4lrick return 1; }else{ return 2; } return 3; } var checkboxerweiterungrestzeitaktivieren; if(localStorage.getItem('rest_zeit_einblenden')=='true'){ checkboxerweiterungrestzeitaktivieren ='checked="true"'; }else{ checkboxerweiterungrestzeitaktivieren =''; } if(!erweiterungs_einstellungs_array){ erweiterungs_einstellungs_array = []; } erweiterungs_einstellungs_array.push(['restzeit_anzeigen',` <label> <label style="display:flex;flex-direction:column"> <p> <strong>Restzeit anzeigen </strong> <input type="checkbox" id="rest_laufueit" ${checkboxerweiterungrestzeitaktivieren}> <span>? <small> Mit dieser Funktion wird im Player neben der Abgelaufene und Endzeit noch die Restlaufzeit angezeigt<br> Auch wenn sie den Player schneller oder langsamer laufen lassen, wird dies mit berechnet </small> </span> </p> </label> </label>`]); if(!array_script){ var array_script=[]; } array_script.push([` var restlaufzeit_var=document.getElementById('rest_laufueit') restlaufzeit_var.addEventListener('click',function(u){ if(restlaufzeit_var.checked==true){ localStorage.setItem('rest_zeit_einblenden',true); }else{ localStorage.setItem('rest_zeit_einblenden',false); } }) `]); if(localStorage.getItem('rest_zeit_einblenden')){ var restlaufzeit=rest_lauf_zeit_anzeigen(); var console_rest_lauf_zeit='_____'; var console_rest_lauf_zeit_per='_____'; if(restlaufzeit==1){ //console.log('%cRestlaufzeit aktiviert'+ (performance.now() - start2) + ' ms.','color:green'); console_rest_lauf_zeit='Restlaufzeit aktiviert'; console_rest_lauf_zeit_per=''+(performance.now() - start2) + ' ms.'; }else if(restlaufzeit==2){ //console.log('%cRestlaufzeit deaktiviert'+ (performance.now() - start2) + ' ms.','color:orange'); console_rest_lauf_zeit='Restlaufzeit deaktiviert'; console_rest_lauf_zeit_per=''+(performance.now() - start2) + ' ms.'; }else{ //console.log('%cRestlaufzeit error'+ (performance.now() - start2) + ' ms.','color:red'); console_rest_lauf_zeit='Restlaufzeit error'; console_rest_lauf_zeit_per=''+(performance.now() - start2) + ' ms.'; } } console_log_value.push({ name: console_rest_lauf_zeit, wert: console_rest_lauf_zeit_per });