Greasy Fork

Greasy Fork is available in English.

提取b站视频cc字幕内容(自行配合GPT)

一键复制视频字幕文本,可以配合GPT对视频进行总结

当前为 2023-06-11 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         提取b站视频cc字幕内容(自行配合GPT)
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  一键复制视频字幕文本,可以配合GPT对视频进行总结
// @author       Josh
// @match        https://www.bilibili.com/video/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=bilibili.com
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @grant        GM_download
// @grant        GM_setClipboard
// @license MIT
// ==/UserScript==

var currentCCText = "";

function createBtn() {
  const right = document.querySelector(".video-toolbar-right");
  const btn = document.createElement("div");
  btn.innerHTML = `<div class="bpx-player-dm-btn-send bui bui-button">
  <div id="fetchCCBtn" style="border-radius: 10px;padding: 8px;" class="bui-area bui-button-blue">复制视频字幕内容</div>
  </div>`;
  right.appendChild(btn);
  _setBtnCopyEvent();
}

function createFailBtn() {
  const right = document.querySelector(".video-toolbar-right");
  const btn = document.createElement("div");
  btn.innerHTML = `<div class="bpx-player-dm-btn-send bui bui-button bui-disabled">
  <div style="border-radius: 10px;padding: 8px;" class="bui-area bui-button-blue">该视频无字幕</div>
  </div>`;
  right.appendChild(btn);
}

function _setBtnCopyEvent() {
  const btn = document.querySelector("#fetchCCBtn");
  btn.addEventListener("click", function () {
    GM_setClipboard(currentCCText);
    btn.innerText = "复制成功";
    setTimeout(() => {
      btn.innerText = "复制视频字幕内容";
    }, 2000);
  });
}

function getSubtitleUrl() {
  return unsafeWindow.__INITIAL_STATE__.videoData.subtitle.list[0].subtitle_url;
}

function main() {
  try {
    GM_xmlhttpRequest({
      method: "GET",
      url: getSubtitleUrl(),
      onload: function (res) {
        const data = JSON.parse(res.response);
        for (const e of data.body) {
          currentCCText += e.content + "  ";
        }
        createBtn();
      },
    });
  } catch (e) {
    createFailBtn();
  }
}

setTimeout(main, 5000);