Bilibili跳过片头片尾

墨 燝 最后更新于 2024-11-04 113 次阅读


因为有看切片剧的需求,所以用chatgpt改了别人的代码,添加了几个按钮就不会绑定奇怪的键盘按键还忘了功能是啥了。不过目前没有做本地的跳过时长存储,应该也不需要吧(大概

// ==UserScript==
// @name         BiliBili跳过片头片尾
// @namespace    http://tampermonkey.net/
// @version      2024-11-04
// @description  添加控制按钮用于跳过片头片尾设置
// @match        *://www.bilibili.com/*
// @icon         data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNDEuMDY1IiBoZWlnaHQ9IjEyNy43NDciIHZpZXdCb3g9IjAgMCAzNy4zMjQgMzMuOCI+PHBhdGggZmlsbD0iIzIwYjBlMyIgZD0iTTg2Ljk2MiAxMTIuMzMyYTIuNjYxIDIuNjYxIDAgMCAxIDIuMjYyIDAgNS41MzYgNS41MzYgMCAwIDEgMS4zODQgMS4wMTFsNS4zMjMgNC42NThoMy44MDVsNS4zMjMtNC42NThhNS41ODkgNS41ODkgMCAwIDEgMS4zODQtMS4wMTEgMi42NjEgMi42NjEgMCAwIDEgMy41NCAyLjIwOSAyLjY2MSAyLjY2MSAwIDAgMS0uNTg2IDEuNzgzIDE0Ljg3NyAxNC44NzcgMCAwIDEtMS4xNzEgMS4wNjUgNy42OTEgNy42OTEgMCAwIDEtLjc0NS42MTJoMy4zMjZhNS42NDIgNS42NDIgMCAwIDEgMy45MTIgMS43NTYgNS42NjkgNS42NjkgMCAwIDEgMS43ODQgMy45MTJ2MTUuMzAzYTEwLjc3OCAxMC43NzggMCAwIDEtLjEzNCAyLjMxNSA1LjkwOCA1LjkwOCAwIDAgMS0yLjY2IDMuNzI2IDUuNzIyIDUuNzIyIDAgMCAxLTMuMDYxLjg1Mkg4Ni4yMTdhMTEuMjg0IDExLjI4NCAwIDAgMS0yLjM5Ni0uMTMzIDUuODgyIDUuODgyIDAgMCAxLTMuNjcyLTIuNjYyIDUuNjk1IDUuNjk1IDAgMCAxLS45MDUtMy4wNnYtMTUuMTQzYTExLjkyMyAxMS45MjMgMCAwIDEgMC0yLjIwOSA1Ljg1NSA1Ljg1NSAwIDAgMSA1LjMyMy00LjczN2gzLjQ4NmMtLjU1OS0uNC0xLjAzOC0uODc4LTEuNTQ0LTEuMzA0YTIuNjYxIDIuNjYxIDAgMCAxLS44NTEtMi4xODMgMi42NjEgMi42NjEgMCAwIDEgMS4zMDQtMi4xMDJtLS42MTIgMTAuMzI2YTIuNjYxIDIuNjYxIDAgMCAwLTIuMTAzIDEuOTE2IDMuNTkzIDMuNTkzIDAgMCAwIDAgMS4wMTF2MTIuNTg4YTIuNjYxIDIuNjYxIDAgMCAwIDEuODM3IDIuNjYyIDMuNTEzIDMuNTEzIDAgMCAwIDEuMTQ0LjE4NmgyMS42MzdhMi42NjEgMi42NjEgMCAwIDAgMi41MjgtMS41NyAzLjcyNiAzLjcyNiAwIDAgMCAuMjY2LTEuNzU3di0xMS43MWE0LjQ3MSA0LjQ3MSAwIDAgMCAwLTEuMjc3IDIuNjYxIDIuNjYxIDAgMCAwLTEuNzMtMS44MSA0LjI4NSA0LjI4NSAwIDAgMC0xLjY1LS4yMzlIODcuNjAxYTguODg5IDguODg5IDAgMCAwLTEuMjUxIDB6bTAgMCIgc3R5bGU9InN0cm9rZS13aWR0aDouMDMzMDcyOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTc5LjE5MyAtMTEyLjA4KSIvPjxwYXRoIGQ9Ik04OC45NyAxMjguNjM2Yy4zNjMuMzc3Ljc0NS43NDcgMS4wODggMS4xNDIuNTk3LjY4NyAxLjExOCAxLjE5NyAxLjY2NiAxLjgwOS0uMTI5LTEuMTE3IDEuMzA0LTEuMTk4LjA3NC0xLjc1Ny0uNDA4LjQxNy0uOTQxLjg4NC0xLjM2IDEuMjIzLS4zOTIuMzE2LS44NjMuNjctMS4yMzUuOTUyLTEuOTA3IDEuNDQzLjIyNiA0LjA1MyAyLjEzIDIuNjA3IDAgMCAyLTEuNTM1IDIuODA3LTIuMzAxLjQ0LS40MTcuNjgtLjk1Ni43Mi0xLjU5Mi4wNC0uNjU0LS41MzUtMS4yNC0uNzk0LTEuNDk4LS45Mi0uOTE0LTEuNzQzLTEuOTY4LTIuNTUtMi44MTItMS41NzUtMS44LTQuMTIuNDI4LTIuNTQ2IDIuMjI3ek0xMDYuOTc5IDEyOC42MzZjLS4zNjMuMzc3LS43NDUuNzQ3LTEuMDg4IDEuMTQyLS41OTcuNjg3LTEuMTE4IDEuMTk3LTEuNjY2IDEuODA5LjEyOS0xLjExNy0xLjMwNC0xLjE5OC0uMDc0LTEuNzU3LjQwOC40MTcuOTQxLjg4NCAxLjM2IDEuMjIzLjM5Mi4zMTYuODYzLjY3IDEuMjM1Ljk1MiAxLjkwNyAxLjQ0My0uMjI2IDQuMDUzLTIuMTMgMi42MDcgMCAwLTItMS41MzUtMi44MDctMi4zMDEtLjQ0LS40MTctLjY4LS45NTYtLjcyLTEuNTkyLS4wNC0uNjU0LjUzNS0xLjI0Ljc5NC0xLjQ5OC45Mi0uOTE0IDEuNzQzLTEuOTY4IDIuNTUtMi44MTIgMS41NzUtMS44IDQuMTIuNDI4IDIuNTQ2IDIuMjI3eiIgc3R5bGU9ImZpbGw6IzIwYjBlMztmaWxsLW9wYWNpdHk6MTtzdHJva2Utd2lkdGg6LjUyNDE1OTtzdHJva2UtZGFzaGFycmF5Om5vbmUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC03OS4xOTMgLTExMi4wOCkiLz48L3N2Zz4NCg==
// @grant        none
// ==/UserScript==

let skip_IntroLength = 0;
let skip_OutroLength = 0;

(function() {
    'use strict';

    // 创建按钮容器
    const buttonContainer = document.createElement("div");
    buttonContainer.style.position = "fixed";
    buttonContainer.style.bottom = "20px";
    buttonContainer.style.right = "20px";
    buttonContainer.style.display = "flex";
    buttonContainer.style.flexDirection = "column";
    buttonContainer.style.gap = "10px";
    buttonContainer.style.zIndex = "9999";
    document.body.appendChild(buttonContainer);

    // 创建手动设置按钮
    const manualButton = document.createElement("button");
    manualButton.textContent = "手动设置时长";
    manualButton.style.padding = "10px";
    manualButton.style.backgroundColor = "#6DD3CE";
    manualButton.style.color = "#fff";
    manualButton.style.border = "none";
    manualButton.style.borderRadius = "5px";
    manualButton.style.cursor = "pointer";
    buttonContainer.appendChild(manualButton);

    // 创建设定片头按钮
    const setIntroButton = document.createElement("button");
    setIntroButton.textContent = "设为片头时间";
    setIntroButton.style.padding = "10px";
    setIntroButton.style.backgroundColor = "#C8E9A0";
    setIntroButton.style.color = "#fff";
    setIntroButton.style.border = "none";
    setIntroButton.style.borderRadius = "5px";
    setIntroButton.style.cursor = "pointer";
    buttonContainer.appendChild(setIntroButton);

    // 创建设定片尾按钮
    const setOutroButton = document.createElement("button");
    setOutroButton.textContent = "设为片尾时间";
    setOutroButton.style.padding = "10px";
    setOutroButton.style.backgroundColor = "#F7A278";
    setOutroButton.style.color = "#fff";
    setOutroButton.style.border = "none";
    setOutroButton.style.borderRadius = "5px";
    setOutroButton.style.cursor = "pointer";
    buttonContainer.appendChild(setOutroButton);

    // 手动设置跳过时长
    manualButton.addEventListener("click", () => {
        const newIntroLength = prompt("请输入片头跳过时间(秒):", skip_IntroLength);
        const newOutroLength = prompt("请输入片尾跳过时间(秒):", skip_OutroLength);

        if (!isNaN(parseFloat(newIntroLength))) {
            skip_IntroLength = parseFloat(newIntroLength);
        }
        if (!isNaN(parseFloat(newOutroLength))) {
            skip_OutroLength = parseFloat(newOutroLength);
        }
    });

    // 设置当前播放时间为片头时长
    setIntroButton.addEventListener("click", () => {
        const video = document.querySelector("#bilibili-player video");
        if (video) {
            skip_IntroLength = video.currentTime;
            alert(`片头时长已设置为:${skip_IntroLength.toFixed(2)} 秒`);
        } else {
            alert("未找到视频元素!");
        }
    });

    // 设置当前播放时间为片尾时长
    setOutroButton.addEventListener("click", () => {
        const video = document.querySelector("#bilibili-player video");
        if (video) {
            skip_OutroLength = video.duration - video.currentTime;
            alert(`片尾时长已设置为:${skip_OutroLength.toFixed(2)} 秒`);
        } else {
            alert("未找到视频元素!");
        }
    });

    // 定时跳过片头和片尾
    setInterval(() => {
        const video = document.querySelector("#bilibili-player video");
        if (video && !isNaN(video.duration)) {
            const currentTime = video.currentTime;
            if (currentTime < skip_IntroLength) {
                video.currentTime = skip_IntroLength;
            } else if (currentTime > (video.duration - skip_OutroLength) && currentTime < (video.duration - 2)) {
                video.currentTime = video.duration;
            }
        }
    }, 2000);
})();
此作者没有提供个人介绍
最后更新于 2024-11-04