您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically set YouTube video and livestream quality to 1080p60 or fallback to the highest available resolution, avoiding Enhanced Bitrate options.
// ==UserScript== // @name YouTube Auto 1080p60 // @namespace https://violentmonkey.github.io/ // @version 1.8 // @description Automatically set YouTube video and livestream quality to 1080p60 or fallback to the highest available resolution, avoiding Enhanced Bitrate options. // @author Indrath // @match https://www.youtube.com/* // @grant none // ==/UserScript== (function() { 'use strict'; let qualitySet = false; function waitForElement(selector, callback, interval = 500, maxAttempts = 10) { let attempts = 0; const checkExist = setInterval(() => { const element = document.querySelector(selector); if (element) { clearInterval(checkExist); callback(element); } else if (++attempts >= maxAttempts) { clearInterval(checkExist); console.log(`Element ${selector} not found.`); } }, interval); } function setQuality() { if (qualitySet) return; // Prevent continuous execution qualitySet = true; waitForElement('.ytp-settings-button', (settingsButton) => { settingsButton.click(); waitForElement('.ytp-panel-menu .ytp-menuitem:last-child', (qualityMenu) => { qualityMenu.click(); waitForElement('.ytp-quality-menu .ytp-menuitem', () => { const qualityOptions = [...document.querySelectorAll('.ytp-quality-menu .ytp-menuitem')]; let targetOption = qualityOptions.find(option => option.innerText.includes('1080p') && !option.innerText.toLowerCase().includes('enhanced')); if (!targetOption) { targetOption = qualityOptions.find(option => !option.innerText.toLowerCase().includes('enhanced')) || qualityOptions[0]; // Fallback to highest non-enhanced resolution } if (targetOption) { targetOption.click(); console.log(`Quality set to ${targetOption.innerText}.`); } else { console.log(`No suitable quality options found, using default.`); } }); }); }); } const observer = new MutationObserver(() => { const player = document.querySelector('video'); if (player && player.readyState > 0) { setQuality(); observer.disconnect(); // Stop observing after setting quality } }); observer.observe(document.body, { childList: true, subtree: true }); })();