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

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

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 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)}`);
        }
    });
})();