时间戳笔记教程

依赖工具

[!alert-quote] 时间戳笔记依赖工具

  • Media Extended
  • Media Extended BiliBili Plugin
  • Regex Pipeline
  • Hover Editor
  • QuickAdd

效果

时间戳笔记教程
时间戳笔记教程
时间戳笔记教程

设置

Media Extended

时间戳笔记教程

时间戳笔记教程

格式

1. 
[name](url#t=hh:mm:ss)
2.
[hh:mm:ss](url#t=hh:mm:ss)
3.
[hh:mm:ss](url)
4.
[name](url#t=s)

阅读模式下 Ctrl+鼠标左键打开。

时间戳笔记教程

Regex Pipeline & Regex Find/Replace

使用 Regex Pipeline 创建正则表达式替换规则。

时间戳笔记教程

时间戳笔记教程

正则表达式替换规则

"([0-9]{1,})\n([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[,.]([0-9]{1,3}) --> ([0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2})[,.]([0-9]{1,3})"
->
"[$2,$3](Media-Extended#t=$4,$5)"

时间戳笔记教程

调用创建的正则表达式规则进行替换。Regex Pipeline 正则表达式用于快速将SRT格式文件快速标记为时间戳格式文档。

时间戳笔记教程

Regex Find/Replace 查找替换 Media-Extended 为视频链接,完成视频实时笔记。

时间戳笔记教程

时间戳笔记教程

时间戳笔记教程

时间戳笔记教程

Hover Editor

使视频显示可以缩放和自由移动。

时间戳笔记教程
时间戳笔记教程

QuickAdd

配合 bilibili.js 实现B站视频合集的快速导入。

const headers = {
    'authority': 'www.bilibili.com',
    'cache-control': 'max-age=0',
    'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'sec-fetch-site': 'none',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-user': '?1',
    'sec-fetch-dest': 'document',
    'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7'
}
async function bilibili(QuickAdd) {
    const url = await QuickAdd.quickAddApi.inputPrompt(
        "输入Bilibili视频网址:"
    );
    let urlTest = url?.match(/https?:\/\/(?:(?:www|m)\.bilibili\.com\/video\/\S*\??|b23\.tv\/\S*)/gm);
    if (url.length == 0 || urlTest.length == 0) {
        new Notice("网址格式错误");
        throw new Error("网址格式错误");
    }
    let biliInfo = await getBiliInfo(url)
    if (!biliInfo) {
        new Notice("获取内容失败");
        throw new Error("获取内容失败");
    }
    new Notice(biliInfo.title + "笔记已生成!", 500);
    QuickAdd.variables = {
        ...biliInfo
    };
}
async function getBiliInfo(url) {
    let searchUrl = new URL(url);
    const res = await request({
        url: searchUrl.href,
        method: "GET",
        cache: "no-cache",
        headers: headers
    });
    if (!res) {
        return null;
    }
    let p = new DOMParser();
    let doc = p.parseFromString(res, "text/html");
    let $ = s => doc.querySelector(s);
    let mainUrl = url.match(/^.+(\?|$)/g)[0];
    let parts = "";
    let videoTime = "";
    if ($('h3')) {
        let sectionData = JSON.parse(doc.querySelectorAll("script")[3].textContent.replace("window.__INITIAL_STATE__=", "").replace(";(function(){var s;(s=document.currentScript||document.scripts[document.scripts.length-1]).parentNode.removeChild(s);}());", ""));
        let episodes = sectionData.videoData.pages;
        var zero_time = new Date(0);
        var video_time = new Date(sectionData.videoData.duration * 1000);
        videoTime = `${(video_time.getHours() - zero_time.getHours()).toString().padStart(2, '0')}:${(video_time.getMinutes() - zero_time.getMinutes()).toString().padStart(2, '0')}:${(video_time.getSeconds() - zero_time.getSeconds()).toString().padStart(2, '0')}`;
        episodes.forEach(episode => {
            var parts_time = new Date(episode.duration * 1000);
            parts += `[P${episode.page.toString().padStart(2, '0')}📺 ${(parts_time.getHours() - zero_time.getHours()).toString().padStart(2, '0')}:${(parts_time.getMinutes() - zero_time.getMinutes()).toString().padStart(2, '0')}:${(parts_time.getSeconds() - zero_time.getSeconds()).toString().padStart(2, '0')} ${episode.part}](https://www.bilibili.com/video/${sectionData.bvid}/?p=${episode.page})\n\n`;
        });
    }
    if ($('a.first-line-title')) {
        let sectionData = JSON.parse(doc.querySelectorAll("script")[3].textContent.replace("window.__INITIAL_STATE__=", "").replace(";(function(){var s;(s=document.currentScript||document.scripts[document.scripts.length-1]).parentNode.removeChild(s);}());", ""));
        let episodes = sectionData.videoData.ugc_season.sections[0].episodes;
        var zero_time = new Date(0);
        var video_time = new Date(sectionData.videoData.duration * 1000);
        videoTime = `${(video_time.getHours() - zero_time.getHours()).toString().padStart(2, '0')}:${(video_time.getMinutes() - zero_time.getMinutes()).toString().padStart(2, '0')}:${(video_time.getSeconds() - zero_time.getSeconds()).toString().padStart(2, '0')}`;
        episodes.forEach((episode, index) => {
            var parts_time = new Date(episode.duration * 1000);
            parts += `[P${(index + 1).toString().padStart(2, '0')}📺 ${(parts_time.getHours() - zero_time.getHours()).toString().padStart(2, '0')}:${(parts_time.getMinutes() - zero_time.getMinutes()).toString().padStart(2, '0')}:${(parts_time.getSeconds() - zero_time.getSeconds()).toString().padStart(2, '0')} ${episode.title}](https://www.bilibili.com/video/${episode.bvid})\n\n`;
        });
    }
    let biliInfo = {};
    biliInfo.link = url.match(/^.+(?=\?)/g) || url;
    biliInfo.date = $("meta[itemprop='datePublished']")?.content;
    biliInfo.videoDate = biliInfo.date;
    biliInfo.title = $("h1").textContent;
    biliInfo.author = $(".up-name").innerText.replace(/(^\s*)|(\s*$)/g, "");
    biliInfo.content = $("div#v_desc")?.textContent?.trim()?.replace(/收起$/, '');
    biliInfo.intro = biliInfo.content;
    biliInfo.cover = 'http:' + $("meta[property='og:image']")?.content?.replace(/@.*/, '');
    biliInfo.parts = parts === '' ? biliInfo.link : parts;
    biliInfo.videoTime = videoTime;
    biliInfo.filename = biliInfo.title.replace(/[\\\/\:\*\?\"\<\>\|]/g, "_");
    return biliInfo;
}
module.exports = bilibili;

bilibili.js 原作者为 荧光闪烁最大化我在此做了部分修改。

时间戳笔记教程
时间戳笔记教程
时间戳笔记教程
时间戳笔记教程
时间戳笔记教程
时间戳笔记教程

创建并添加一个模板文件 bilibili-video.md,并设置模板文件和脚本。

---
title: "{{VALUE:title}}"
author: {{VALUE:author}}
publish_date: {{VALUE:videoDate}}
playback_duration: {{VALUE:videoTime}}
watch_date: {{DATE}}
link: {{VALUE:link}}
---

![]({{VALUE:cover}})
[{{VALUE:videoTime}} 🚩 {{VALUE:title}}]({{VALUE:link}})

{{VALUE:parts}}

## 简介
{{VALUE:intro}}
## 想法
## 记录

时间戳笔记教程
时间戳笔记教程

配合飞书妙记起飞

如果飞书妙记不能用了可以用本地版本的WhisperDesktop代替

@版权声明 1 本站名称:Liuwei's Blog
2 本站网址:https://www.liuwei.vin
3 本站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
5 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
6 本站所有内容,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
obsidian

obsidian提示标签美化

2023-1-13 21:47:52

硬件

FT4232HL制作OpenOCD

2024-12-12 13:59:50

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
有新私信 私信列表
搜索