篡改猴B站音量功放脚本

94 阅读1分钟

由于B站有些视频音量很小,开最大也听不清,因此创建此脚本用于音量功放. (页面左上角b站图标处创建一个input,最小1最大10,数字越大功放越大,1就是原始音量)

注意新版浏览器需要开启浏览器 User Scripts 支持

// ==UserScript==
// @name         B站声音增幅
// @namespace    http://tampermonkey.net/
// @version      2025-08-11
// @description  对于音量太小的视频放大其音量(页面左上角创建一个input)
// @author       fqy
// @match        https://www.bilibili.com/video/*/
// @include      https://www.bilibili.com/video/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=tampermonkey.net
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    if(document.querySelector('video')==null){
        return
    }else{
        console.log('创建功放')
    }

    if(document.querySelector('input#input__fqy_vedio_voice_change')!=null){
        console.log('input__fqy_vedio_voice_change已被创建')
    }
    //功放固定页面左上角
    const input = document.createElement("input")
    input.id='input__fqy_vedio_voice_change'
    input.style.position='fixed'
    input.style.top='0'
    input.style.left='0'
    input.style.height='27px'
    input.style.width='45px'
    input.style.zIndex='9999'
    input.type='number'
    input.step='1'
    input.min='1'
    input.max='10'
    input.style.fontSize='15px'
    input.placeholder='功放'
    onchange=(event)=>{
        createListen()
        let multiplier = event.target.value
        if(!multiplier){
            multiplier=1
        }else{
            multiplier=Number.parseFloat(multiplier)
        }
        window.input_change__fqy_vedio_voice_change(multiplier)
    }
    document.body.appendChild(input)


    function createListen(){
        if(!window.input_change__fqy_vedio_voice_change){
            window.input_change__fqy_vedio_voice_change=(multiplier)=>{
                const mediaElem = document.querySelector('video')
                if(mediaElem==null){
                    alert('没有找到video')
                }
                if(!window.__fqy_vedio_voice_change){
                    const context = new window.AudioContext()
                    const result = {
                        context: context,
                        source: context.createMediaElementSource(mediaElem),
                        gain: context.createGain(),
                        media: mediaElem,
                        amplify: function (multiplier) { this.gain.gain.value = multiplier },
                        getAmpLevel: function () { return this.gain.gain.value }
                    }
                    result.source.connect(result.gain)
                    result.gain.connect(context.destination)
                    window.__fqy_vedio_voice_change = result
                }
                window.__fqy_vedio_voice_change.amplify(multiplier)
            }
        }
    }

})();