youtube记忆画面清晰度

2023/7/27 11:45:08

当前为 2023-09-02 提交的版本,查看 最新版本

// ==UserScript==
// @name        youtube记忆画面清晰度
// @namespace   Violentmonkey Scripts
// @match        *://www.youtube.com/watch?v=*
// @match        *://www.youtube.com/*
// @grant       none
// @version     3.5
// @author      lazy cat
// @description 2023/7/27 11:45:08
// @run-at      document-end
// @license MIT
// @homepageURL      https://greasyfork.org/zh-CN/scripts/473553-youtube%E9%BB%98%E8%AE%A4%E5%BC%80%E5%90%AF%E6%9C%80%E9%AB%98%E7%94%BB%E8%B4%A8
// @homepage        https://greasyfork.org/zh-CN/scripts/473553-youtube%E9%BB%98%E8%AE%A4%E5%BC%80%E5%90%AF%E6%9C%80%E9%AB%98%E7%94%BB%E8%B4%A8
// ==/UserScript==
(function(){
    function t_stop(num){
        return new Promise((resolve)=>{setTimeout(resolve, num)})
    }
    function save_art(e){
        localStorage.setItem('user_articulation', e)
    }
    // 获取视频id
    function get_voice_pid() {
        try {
            let player = document.querySelector('div[id="movie_player"]')
            let pid = player.getVideoData().video_id
            return pid
        }catch (e) {
            return null
        }
     }
     // 获取url上的视频pid
    async function get_url_pid() {
        let re_data = /v=(\w+)/
        let pid = url.match(re_data)
        if (pid.length < 1){
            await t_stop(100)
            return get_url_pid()
        }
        else{
            return pid[1]
        }
      }
     // 保存数据到本地
    function save_voice_pid(art){
        if (now_pid == get_voice_pid()){
            localStorage.setItem('user_articulation', art)
        }
    }
    async function set_max_voice_px() {
        if (j_num>50){
            return
        }
        let player = document.querySelector('div[id="movie_player"]')
        if (player && player.getAvailableQualityLevels && player.getAvailableQualityLevels().length > 0){
            await t_stop(500)
            let v_list = player.getAvailableQualityLevels()
            let user_articulation = localStorage.getItem('user_articulation')
            // 根据本地数据进行判断
            if (!user_articulation){
                player.setPlaybackQualityRange(v_list[0])
            }
            else{
                if (v_list.includes(user_articulation)){
                    player.setPlaybackQualityRange(user_articulation)
                }
                else{
                    let original_data = ['tiny', 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres'].reverse()
                    let u_index = original_data.indexOf(user_articulation)
                    let need_list = original_data.slice(u_index+1)
                    if (need_list.length === 0){
                        player.setPlaybackQualityRange(v_list[0])
                        j_num = 0
                        // 保存清晰度
                        player.addEventListener('onPlaybackQualityChange', save_voice_pid)
                        return
                    }
                    for (let a of need_list){
                        if (v_list.includes(a)){
                            player.setPlaybackQualityRange(a)
                            break
                        }
                    }

                }
            }
            j_num = 0
            // 保存清晰度
            player.addEventListener('onPlaybackQualityChange', save_voice_pid)
        }
        else{
            j_num++
            await t_stop(100)
            set_max_voice_px()
        }
    }
    function list_judgment() {
        set_max_voice_px()
        //循环检查页面是否改变
        setInterval(() => {
            new_url = String(window.location.href)
            if (new_url != url){
                now_pid = get_url_pid()
                j_num = 0
                set_max_voice_px()
                url = new_url
            }
        }, 1000);
    }
    //开始运行程序
    var j_num = 0
    var new_url = ''
    var url = String(window.location.href)
    var now_pid = ''
    list_judgment()
    })()