Video Volume Booster (通用音量放大器)

放大任意网站视频音量(支持多倍增益)

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Video Volume Booster (通用音量放大器)
// @namespace    http://tampermonkey.net/
// @version      1.2
// @description  放大任意网站视频音量(支持多倍增益)
// @author       Kazzz
// @match        *://*/*
// @grant        none
// @license MIT
// ==/UserScript==

(function () {
    'use strict';

    // === 可调参数 ===
    const GAIN_VALUE = 4.0; // 默认放大倍数(1.0 = 原音量,2.0 = 200%,可根据需求调整)
    const CHECK_INTERVAL = 2000; // 检测视频间隔(毫秒)

    const boostedVideos = new WeakSet();

    function boostVolume(video) {
        if (boostedVideos.has(video)) return;
        try {
            const ctx = new AudioContext();
            const source = ctx.createMediaElementSource(video);
            const gainNode = ctx.createGain();
            gainNode.gain.value = GAIN_VALUE;
            source.connect(gainNode).connect(ctx.destination);
            boostedVideos.add(video);
            console.log(`[VolumeBooster] 已为视频启用音量放大:x${GAIN_VALUE}`);
        } catch (err) {
            console.warn('[VolumeBooster] 无法增强音量:', err);
        }
    }

    function scanVideos() {
        document.querySelectorAll('video').forEach(boostVolume);
    }

    setInterval(scanVideos, CHECK_INTERVAL);
    scanVideos();

    // 可选:按下键盘快捷键 “Shift + ↑/↓” 调整音量倍数
    window.addEventListener('keydown', e => {
        if (!e.shiftKey) return;
        if (e.key === 'ArrowUp') {
            window.GAIN_VALUE = Math.min((window.GAIN_VALUE || GAIN_VALUE) + 0.2, 5);
            console.log(`🔊 当前音量放大倍数: x${window.GAIN_VALUE.toFixed(1)}`);
        } else if (e.key === 'ArrowDown') {
            window.GAIN_VALUE = Math.max((window.GAIN_VALUE || GAIN_VALUE) - 0.2, 1);
            console.log(`🔉 当前音量放大倍数: x${window.GAIN_VALUE.toFixed(1)}`);
        }
    });
})();