Greasy Fork 还支持 简体中文。

Dumb Youtube lowest quality chooser

Auto select the lowest available quality of videos (more eco-friendly, and you can still manually select a higher resolution when needed)

Устаревшая версия за 08.03.2020. Перейдите к последней версии.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey, Greasemonkey или Violentmonkey.

Для установки этого скрипта вам необходимо установить расширение, такое как Tampermonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Violentmonkey.

Чтобы установить этот скрипт, вы сначала должны установить расширение браузера, например Tampermonkey или Userscripts.

Чтобы установить этот скрипт, сначала вы должны установить расширение браузера, например Tampermonkey.

Чтобы установить этот скрипт, вы должны установить расширение — менеджер скриптов.

(у меня уже есть менеджер скриптов, дайте мне установить скрипт!)

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение браузера, например Stylus.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

Чтобы установить этот стиль, сначала вы должны установить расширение — менеджер стилей.

(у меня уже есть менеджер стилей, дайте мне установить скрипт!)

// ==UserScript==
// @name            Dumb Youtube lowest quality chooser
// @name:fr         Vidéos Youtube en basse minimale par défaut
// @version         2
// @description     Auto select the lowest available quality of videos (more eco-friendly, and you can still manually select a higher resolution when needed)
// @description:fr  Choisir automatiquement la qualité minimum pour la lecture des vidéos (plus eco-friendly, avec toujours la possibilité de choisir manuellement une meilleure qualité quand nécessaire)
// @author          Les noix de coco
// @include         http://youtube.com/*
// @include         https://youtube.com/*
// @include         http://www.youtube.com/*
// @include         https://www.youtube.com/*
// @include         http://gaming.youtube.com/*
// @include         https://gaming.youtube.com/*
// @noframes
// @grant           none
// @namespace https://greasyfork.org/users/456082
// ==/UserScript==

(function() {

    "use strict"
  
  	//--- USER SETTINGS
  
  	// PREFERRED_QUALITY (string) can be set to 'lowest' (most of the time it means 144p),
    // or to a specific quality such as '240' or '360' (string without trailing 'p')
  	const PREFERRED_QUALITY = 'lowest'

    //--- END OF USER SETTINGS


    function sortNumber(a, b) {
      return a - b;
    }

    const DELAY = 1

    function setLowestQuality()
    {
      if (!window.location.href.match(/\?.*v=/)) {
        // Not a video
      	return
      }
      console.log('Will try to set video quality...')
      setTimeout(() => {
        const videoSettingsButtonEl = document.querySelector('.ytp-settings-button')
        if (!videoSettingsButtonEl) {
          return
        }
      	videoSettingsButtonEl.dispatchEvent(new Event('click'))

        setTimeout(() => {
          let found = false
          for (const el of document.querySelectorAll('.ytp-menuitem')) {
            if (el.textContent.match(/Qual|Calidad/)) {
              found = true
            	el.dispatchEvent(new Event('click'))
              break
            }
          }
          if (!found) {
            return
          }

          setTimeout(() => {
            const qualities = {}
            for (const el of document.querySelectorAll('.ytp-menuitem')) {
              const match = el.textContent.match(/(\d+)p/)
            	if (match) {
                const qualityNum = match[1]
              	qualities[qualityNum] = el
              }
            }
            let qualitiesList = Object.keys(qualities).sort(sortNumber)
            console.log('Qualities (sorted):', qualitiesList)
            let quality
            if (!PREFERRED_QUALITY || PREFERRED_QUALITY === 'lowest') {
              quality = qualitiesList[0]
            } else {
              // Take the preferred quality (with a fallback to the lowest quality)
              const idx = qualitiesList.indexOf(PREFERRED_QUALITY)
              quality = idx >=0 ? qualitiesList[idx] : qualitiesList[0]
            }
            console.log(`Setting video quality to ${quality}p`)
            qualities[quality].dispatchEvent(new Event('click'))
          }, DELAY)

        }, DELAY)

      }, DELAY)
    }

    window.addEventListener("yt-navigate-finish", setLowestQuality, true)

})();