跳到主要内容

Welcome

· 阅读需 1 分钟
CollapseNav
一条咸鱼

兴趣使然的 blog, 不定期更新

内容大概会非常混乱

2023年度回顾

· 阅读需 17 分钟
CollapseNav
一条咸鱼

0. 总览

不知不觉2023年就这么过去了,对我来说今年发生了不少事情,比如:

  • 离职上一家,入职新公司,虽然没有钱,但有了更多时间
  • 用了chatgpt,ai机器人从入门到放弃
  • 装了"新"电脑,重新开始搞ai玩,sd和glm真好玩
  • 开始更新B站视频,数据看起来还凑合
  • dotnet更新了令人激动的LTS版本.Net8,看起来有摘掉万年老五这个帽子的可能
  • ......

1. 离职

对我来说今年的头等大事就是2月份从待了一年半的上家离职,换了个新的公司

在上家入职的时候我曾经有过"宏伟蓝图",觉得可以大干一场做点什么

面试时根据hr的介绍,他们在国内各个省市以及国外部分国家都有不少用户,整个行业的上下游他们都在做,我想着这样的业务规模在以后可以做成saas之类的平台,为行业内的各个从业者提供他们所需要的服务,是可以做的很大的,由于之前的公司就没做过什么大的工程,所以我对于这个看起来非常有"前景"的方向有点眼热,如果真的能够做成,对于我个人来说也是很有意义的

抱着这样的想法我就入职了,结果没想到是掉坑里了

不得不说我还是太年轻,虽然知道有些HR会说鬼话,但是也没想到具体的情况和预想的有非常大的差异,碰到的坑还是挺多的

1.1 混乱的数据库

上家在全国七八成的省市都多多少少有些业务,然后针对每个城市都会有一套单独的数据库(市库),然后在市库之上还会有一套省库,各个市库之间的结构不一定是相同的,并且各个市库之间还会有一些字段拥有多个不同的用途,不过所有城市都使用同一套代码,同时市库和省库之间会有一些数据需要定时地做数据同步

上面所说的是一套所谓的"新市库",除此之外还有一个旧的市库也在同时使用,然后这个旧的市库和新的市库之间也需要使用同步程序做数据同步,数据冲突的事件时有发生

更加难受的是,这些同步程序并不可靠,有的时候会莫名其妙挂掉,挂掉的原因可能就是因为上述的数据库表结构不一致

当然最最难受的是,全公司没有人或者文档能够讲清楚这些市库之间的表结构差异,能讲明白的人也不知道什么时候就离职了,这在开发和维护时就是数不清的大雷

1.2 运维×dba√

一般来说只要是系统数量规模大一点的公司都会有一个运维岗,我上家也存在所谓的运维岗,但是运维做的最多的事情却是写sql刷数据

基本上我每次去找运维,他们都在写sql处理数据上的事情,为上面一点擦屁股

真正的运维主要还是开发干的,我就处理过几次IIS的问题,上家用的是windows server

最近听说现在的那个运维组长在熬了两年之后,白头发都长出来不少,我记得我刚去的时候他还是满头黑发来着

1.3 狂躁症老板

上家老板可能有狂躁症,经常能看到他疯狂拍桌子骂人,而且控制欲也非常强,可能也有点被害妄想症,反正一年半霍霍走了几十个产品经理,有些是被骂了之后不想再伺候他,于是就直接跑路的,有的是看到办公室氛围不对劲自己跑掉的,还有些是被老板觉得可能影响到自己的权威,然后来了句"你是不是想夺权",最后被赶走的

他有点"霸道"总裁那种恶心的感觉,他只要他觉得,不要别人怎么觉得,作为乙方他会和甲方的老板对骂,因为他觉得甲方的业务不符合他的预想,甲方应该按照他所想的那样重新组织业务

经常有产品和客户沟通了方案,对方确认之后由于不符合老板的想法然后被修改,最后做成了老板觉得对的样子

不过这个产品做出来之后被客户说难用,他就开始喷产品经理了,忘了当初是他说要改掉的

1.4 貌合神离的系统

讲道理上家的系统还挺多,行业的上下游都有涉及,也是因此当初我觉得可以搞类似saas的系统,将上下游都整合起来,为各方提供服务

不过实际上手做的时候发现,所有系统只是看起来有关联,但实际上关联并不大,虽然在业务上应当存在交互,但是在实际运行过程中并不能体现这样的交互,各个系统还是各做各的,然后通过蹩脚的同步程序维护那脆弱的关联

比方说一个简单的供应商数据,在系统中就存在不下三个版本,虽然几个系统中所说的供应商在业务上确确实实就应该是同一个东西,但是在数据上却有至少三个不同的子系统模块,对于这三个系统来说,供应商在事实上不是同一个东西,最终上家选择通过同步程序实时同步这些供应商数据,修改任意一个的时候就向其他的库中同步对应的更新

我看不懂,但是大受震撼

1.5 无节制的定制化

上家特别喜欢做定制化系统,宁愿费时费力去做他们不赚钱的业务,也不高兴花点人力去把数据理理顺

有个系统做了至少三十个版本,都是根据客户要求从某一个版本衍生出来的定制化版,但是各个版本之间的差异实际上并不大

有些客户只是要求改一两个页面,多做一个接口,多做一个页面,然后通过权限的分配理应就能解决了,不过上家选择复制一份代码,再开一个仓库,硬生生拆出一个版本,有的甚至只是复制了一份改了改页面样式

在这种情况下还想着做通用的功能优化,在上面的这种定制化开发下,每次的通用更新都需要耗费相当长的时间和精力,即使只是修复一个几分钟就能改好的bug,也需要修改十几二十个仓库的代码,然后在简单的自测之后让测试部门的人一个一个测试过去,填好测试报告和发布申请之后找人审批,然后发包给运维一个一个复制粘贴到windows服务器上

然后两三天就这样过去了

1.6 孤独的年假

正常公司的年假应该都是可以连起来休的,但上家的年假却有特殊的规定,不允许年假连休,两个月能只允许请一天

我看不懂,但是大受震撼

1.7 最终离职

由于以上的一些原因,在上家待着

  • 没有钱
  • 没有时间
  • 没有经验
  • 没有希望

所以在老板把矛头转向他觉得他可能已经搞懂了的开发之前,我就选择溜了

现在入职的这家公司不是软件公司,只是集团中的一个it部门,所以整体的开发任务相对就少了一些

面试的时候还说过他们的开发一般情况下任务是不饱和的,我一听就心动了,至少我能有点时间

果不其然,比上家多了很多时间,可以搞一些比较有意思的事情,之后的2023就渐渐充实了起来

2. ChatGpt

要说2023年的互联网上什么东西最火爆,那当然是ChatGpt了,离职有了较多的时间之后当然是得好好玩玩看看了

2.1 简单使用

虽然ChatGpt是去年出现的,但我在今年入职了新的公司之后才开始使用

年初的时候账号注册还挺麻烦,又是搞短信验证又是搞节点什么的,不过折腾了半天还是成功注册了

那时候还有免费送的18刀额度,用的不亦乐乎,不得不说,2023年初的ChatGpt是真的有点厉害,虽然后来谷歌推出了他们的Bard,但是由于不支持中文,所以还是转回去用ChatGpt了

除了那时候最常用的web页面,还试了试通过api去进行调用,不过也只是简单试了试,作为一个技术储备,并没有想到能拿来干什么

2.2 QQ机器人

后来看到编程群里有人引入了QQ机器人账号,然后接入ChatGpt,让机器人可以在群内扮演猫娘的同时解决群友提出的编程问题

我看到后觉得很有意思,然后用 go-cqhttp 做了个机器人项目

初期和常见的机器人一样,可以at对应账号之后正常对话,也可以通过一些预设的命令触发我自己编写的工具,不过并没有监听群内的所有消息,也没有做私聊功能,毕竟我的账号额度有限

本来想通过prompt让ChatGpt帮我判断用户的具体需求,分析用户的意图,不过考虑到token的消耗,最后还是选择部署专门用于分类的NLP模型先对接收到的消息做一个快速的分类,让机器人可以在不使用 ChatGpt 的情况下做简单的工具调用

qq-tool-1 qq-tool-2

上面的这个过程中并没有chatgpt的参与,只靠一个简单的可以使用cpu运行的nlp模型实现,先根据相似度进行分类,然后去调用对应分类匹配的工具返回运行的结果

分类匹配到查看黑名单白名单什么的就查看在机器人设置中黑白名单列表,如果是添加或者移除黑白名单,就调用修改的方法增减列表

如果分类是提问或者不知道具体什么分类的,就全都丢给ChatGpt当成普通的对话处理

那时候曾有过好好做一个机器人框架的想法,捣鼓两天搞了一套简易的依赖注入框架,为了不只是局限于QQ机器人,想着以后说不定能接入到其他平台里面使用,还抽象了消息,实现了一个简易的管道中间件处理机制,可以处理http请求以及QQ消息什么的

那时候吭呲吭呲做了大半个月

2.3 封禁

不过到了后期,我的机器人就没法正常做下去了,一方面由于OpenAi持续封禁ip,我的节点已经无法正常访问ChatGpt的页面,虽然还能通过api使用,但是总体使用成本提高了很多

另一方面是腾讯加大了对QQ机器人协议的封禁力度,我的机器人没法正常工作,在正常回复几条群消息之后就被风控,无法再次回复

所以在今年6月份我的ChatGpt额度到期之后,QQ机器人项目就开始了无限期的搁置,到现在已经半年多没有再更新了

同时由于 claude 的兴起以及bard开始支持中文,我放弃了ChatGpt转头使用其他的服务

但这两者我都没有再去看对应的api接入文档,群喵娘就这样彻底陷入了沉寂

3. Stable Diffusion WebUI

2023年除了用于文本生成的ChatGpt,另一种大热的ai就得是可以画画的 Stable-Diffusion(sd) 了,虽然还有一个更加简单易用的 Midjourney(midj),但在2023年初的时候sd的可控性和可玩性是比midj要高出来一大截的

由于我并不是绘画美工相关从业者,我对于出图的效率和画质什么的没有特别高的需求,只是希望能在需要一张图片的时候可以快速给我生成一张用用

警告

未完待续

下载油管视频

· 阅读需 14 分钟
CollapseNav
一条咸鱼

前言

我在2020年上传的一个油管视频下载教程收获了还算可以的播放量, 时常能收到一些观众的点赞

但现在已经是2022年了, 教程中所使用的方法已经不太适用了, 至少从我自己的尝试和其他观众的反馈来看是这样的

经常会出现下载速度为0, 或者下载速度太慢之类的情况

所以我找了个新的, 现在我自己试下来好像还有点效果的方法

安装油猴脚本

第一步是在浏览器上安装插件--油猴脚本(Tampermonkey)

微软商店

谷歌商店

如果上面的链接都点不进去, 那么不建议继续操作下去了, 因为你大概连油管都上不去, 看了也是白看

找一个合适的脚本

我之前在脚本站找到一个挺好用的脚本, 但不知为啥, 最近去看的时候又找不到了

但还好这些脚本都是用 js 写的, 所以我先贴一下这个脚本, 脚本有点长, 为了不影响观感, 已折叠

被折叠的脚本代码
// ==UserScript==
// @name YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:pt-BR YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:ar YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:bg YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:cs YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:da YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:de YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:el YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:eo YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:es YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:fi YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:fr YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:fr-CA YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:he YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:hu YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:id YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:it YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:ja YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:ko YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:nb YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:nl YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:pl YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:ro YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:ru YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:sk YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:sr YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:sv YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:th YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:tr YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:uk YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:ug YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:vi YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:zh-CN YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:zh-TW YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @name:ru YouTube™ Video Downloader v15 [MP3,4K,WEBM,WAV,MP4,AAC,AndMore] NO ADS ✔️ ONE PAGE ✔️ 2021 UPDATE ✔️
// @description Downloads video and audio from YouTube. Fast and efficient! Doesn't redirect to other pages!
// @description:pt-BR Baixa vídeos e áudios do YouTube. Rápido e eficiente! Não redireciona para outras páginas!
// @description:ar تنزيل الفيديو والصوت من يوتيوب. سريع وفعال! لا إعادة توجيه إلى صفحات أخرى!
// @description:bg Изтегля видео и аудио от YouTube. Бързо и ефективно! Не пренасочва към други страници!
// @description:cs Stahuje video a audio z YouTube. Rychle a efektivně! Přesměruje na jiné stránky!
// @description:da Do .nloader video og lyd fra YouTube. Hurtig og effektiv! Omdirigerer ikke til andre sider!
// @description:de Lädt Videos und Audio von YouTube herunter. Schnell und effizient! Keine Umleitungen zu anderen Seiten!
// @description:el Λήψεις βίντεο και ήχου από το YouTube. Γρήγορη και αποτελεσματική! Δεν ανακατευθύνει σε άλλες σελίδες!
// @description:eo Elŝutoj video kaj aŭdio de YouTube. Rapida kaj efika! Ne redirect al aliaj paĝoj!
// @description:es Descarga videos y audios de YouTube. ¡Rápido y eficiente! No redirige a otras páginas!
// @description:fi Lataa videota ja ääntä YouTubesta. Nopea ja tehokas! Ei ohjaa muille sivuille!
// @description:fr Télécharge des vidéos et de l'audio à partir de YouTube. Rapide et efficace! Ne pas rediriger vers d'autres pages!
// @description:fr-CA Télécharge des vidéos et de l'audio à partir de YouTube. Rapide et efficace! Ne pas rediriger vers d'autres pages!
// @description:he מוריד וידאו ושמע מ-YouTube. מהיר ויעיל! לא מפנה מחדש לדפים אחרים!
// @description:hu Letöltések videó és hang a YouTube-on. Gyors és hatékony! Nem átirányítja más oldalakra!
// @description:id Muat turun video dan audio dari YouTube. Cepat dan yang cekap! Tidak mengarahkan ke halaman lain!
// @description:it Scarica Video e audio da YouTube. Veloce ed efficiente! Non reindirizza ad altre pagine!
// @description:ja YouTubeからビデオとオーディオをダウンロードします。 高速かつ効率的! 他のページにリダイレクトしません!
// @description:ko YouTube 에서 비디오 및 오디오를 다운로드합니다. 빠르고 효율적인! 다른 페이지로 리디렉션하지 않습니다!
// @description:nb Last ned videoer og lyd fra YouTube. Rask og effektiv! Ikke viderekobler til en annen side!
// @description:nl Download videos and audio from YouTube. Fast and efficient! Do not redirect to another page!
// @description:pl Pobierz Filmy i audio z YouTube. Szybko i sprawnie! Nie przekierowuj na inną stronę!
// @description:ro Descărcați video și audio de pe YouTube. Rapid și eficient! Nu redirecționați către o altă pagină!
// @description:ru Загружает видео и аудио с YouTube. Быстро и эффективно! Не перенаправляет на другие страницы!
// @description:sk Sťahovanie videa a zvuku z YouTube. Rýchla a efektívna! Nie je presmerovanie na iné stránky!
// @description:sr Preuzmite video i audio s YouTubea. Brzo i učinkovito! Nemojte preusmjeravati na druge web stranice!
// @description:sv Ladda ner video och ljud från YouTube. Snabbt och effektivt! Omdirigera inte till andra webbplatser!
// @description:th การดาวน์โหลดวิดีโอและเสียงมาจากยูทูปน่ะ อย่างรวดเร็วและมีประสิทธิภาพเพียงพอ smooth scrolling! ยังไม่เปลี่ยนปลายทางจดหมายไปอีกหน้า!
// @description:tr Youtube'dan video ve ses indirir. Hızlı ve verimli! Diğer sayfalara yönlendirmiyor!
// @description:uk Завантажує відео та аудіо з YouTube. Швидко і ефективно! Не перенаправляє на інші сторінки!
// @description:ug تنزيل الفيديو والصوت من يوتيوب. سريع وفعال! لا إعادة توجيه إلى صفحات أخرى!
// @description:vi Phổ biến video và âm thanh từ YouTube. Nhanh chóng và hiệu quả! Không chuyển hướng sang trang khác!
// @description:zh-CN 从YouTube下载视频和音频。 快速高效! 不重定向到其他页面!
// @description:zh-TW 从YouTube下载视频和音频。 快速高效! 不重定向到其他页面!
// @namespace http://tampermonkey.net/
// @version 15
// @author Anpkal_Zuev
// @match https://www.youtube.com/*
// @icon https://www.google.com/s2/favicons?domain=youtube.com
// @grant GM_xmlhttpRequest
// @compatible chrome
// @compatible firefox
// @compatible opera
// @compatible safari
// @compatible edge
// @connect googuu.xyz
// @connect loader.to
// @connect oceansaver.in
// @license MIT
// ==/UserScript==

// Copyright (c) 2021 Anpkal Zuev and others

// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:

// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.

// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

window.onload = function () {
var dark = !!document.getElementsByTagName("html")[0].getAttribute("dark");
var downloadIcon = `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000" style="margin-top: 5px;"><path d="M0 0h24v24H0V0z" fill="none"></path><path d="M13 5v6h1.17L12 13.17 9.83 11H11V5h2m2-2H9v6H5l7 7 7-7h-4V3zm4 15H5v2h14v-2z"></path></svg>`;
if (dark) {
downloadIcon = `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#FFFFFF"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M19 9h-4V3H9v6H5l7 7 7-7zm-8 2V5h2v6h1.17L12 13.17 9.83 11H11zm-6 7h14v2H5z"/></svg>`;
}
var programSTATUS = 0;
function startload () {
var format = document.getElementById("formatus").value;
var f = format;
if (f == "8k" || f == "4k" || f == "1080" || f == "720" || f == "480" || f == "360") {
f = "mp4";
}
getFORMVIDEO(format, f);
}



function updatepos (one, two) {
var reproz = 100 / two;
var ttproz = reproz * one;
document.getElementById("download21").innerText = "Downloaded: " + Math.trunc(ttproz * 10) / 10 + "%";
if (Math.trunc(ttproz * 10) / 10 == 100) {
document.getElementById("download21").innerText = "Download";
}
}

function getFORMVIDEO (format, fff) {
var link = `https://loader.to/ajax/download.php?start=1&end=1&format=` + format + `&url=` + encodeURI(window.location.href);
GM_xmlhttpRequest({
method: 'GET',
url: link,
responseType: "json",
onload: function () {
var ide = this.response.id;
var gtitle = this.response.title;

checkStatus();
function checkStatus () {
GM_xmlhttpRequest({
method: 'GET',
url: "https://loader.to/ajax/progress.php?id=" + ide,
responseType: "json",
onload: function () {
document.getElementById("download21").innerText = " preparation: " + "" + this.response.progress / 10 + "%";
if (this.response.text != "Finished") {
setTimeout(() => { checkStatus(); }, 800);
} else {
download(this.response.download_url, gtitle, fff);
}
}
});
}
}
});

}
function download (link, name, type) {
window.location.href = link;
programSTATUS = 0;
document.getElementById("download21").innerText = "Download";
/*
GM_xmlhttpRequest({
method: 'GET',
url: link,
responseType:"blob",
onload: function() {
console.log(1);
save([this.response], name+"."+type);
},
onprogress:function(r) {
updatepos(r.loaded,r.totalSize)
}
});
*/
}
var save = (function () {
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, name) {
programSTATUS = 0;
var blob = new Blob(data, { type: "octet/stream" }),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = name;
a.click();
window.URL.revokeObjectURL(url);
if (document.getElementById("ON125374").checked) {
showsettingsd();
localStorage.setItem('ACLOSE154658', '1');
}
};
}());
var menu15 = `
<div style="
width: 250px;
height: 89px;
background-color: white;
margin-left: calc(100vw/2 - 250px/2);
margin-top: calc(100vh/2 - 89px/2);
outline: 2px solid #000;
padding: 0px;
"><div style="height: 19px;">
<div style="
width: 84px;
float: left;
margin-left: 4px;
margin-top: 2px;
">rate please =)</div><div style="
width: 50px;
float: left;
margin-left: 4px;
margin-top: 2px;
margin-left: 46px;
">auto close</div><input type="checkbox" id="ON125374" style="
margin-left: -1px;
"><button id="slaves" style="
border-radius: 0px;
float: right;
border-width: 2px;
border: 0px;
height: 19px;
background-color: #e91e63;
">&nbsp;close&nbsp;</button></div><div style="
height: 17px;
"><select id="formatus" style="
width: 250px;
border-width: 0px;
background-color: #fff;
"><optgroup label="Audio">
<option value="mp3">MP3</option>
<option value="m4a">M4A</option>
<option value="webm">WEBM</option>
<option value="aac">AAC</option>
<option value="flac">FLAC</option>
<option value="opus">OPUS</option>
<option value="ogg">OGG</option>
<option value="wav">WAV</option>
</optgroup><optgroup label="Video">
<option value="360">MP4 (360 px)</option>
<option value="480">MP4 (480 px)</option>
<option value="720">MP4 (720p)</option>
<option value="1080" selected="selected">MP4 (1080p)</option>
<option value="1440">MP4 (1440p)</option>
<option value="4k">WEBM (4K)</option>
<option value="8k">WEBM (8K)</option></optgroup></select></div><button id="download21" style="
border-radius: 0px;
float: right;
border-width: 2px;
width: 100%;
height: 53px;
border: 0;
">Download</button></div>
`;
function showsettingsd () {
var lay = document.getElementsByClassName("15674821765123")[0];
var pos = lay.style.display;
lay.style.display = (pos == "none" ? "block" : "none");
}
setListener();
function setListener () {
try {
document.getElementById("slaves").onclick = function () {
showsettingsd();
};
document.getElementsByClassName("14221212455")[0].onclick = function () {
showsettingsd();
};
document.getElementById("download21").onclick = function () {
if (!programSTATUS) {
startload();
programSTATUS = 1;
} else {
alert("The video is still loading..");
}
};
document.getElementById("ON125374").onclick = function () {
if (document.getElementById("ON125374").checked) {
localStorage.setItem('ACLOSE154658', '1');
} else {
localStorage.setItem('ACLOSE154658', '0');
}
};
} catch { setTimeout(() => { setListener(); }, 500); }
}
let div = document.createElement("div");
div.className = "14221212455";
div.innerHTML = downloadIcon;
try { setTimeout(() => { document.getElementsByClassName("style-scope ytd-video-primary-info-renderer")[8].append(div); }, 1000); }
catch {
try { setTimeout(() => { document.getElementsByClassName("style-scope ytd-video-primary-info-renderer")[8].append(div); }, 1000); }
catch {
setTimeout(() => { document.getElementsByClassName("style-scope ytd-video-primary-info-renderer")[8].append(div); }, 1000);
}
}
let div1 = document.createElement('div');
div1.className = "15674821765123";
div1.innerHTML = menu15;
div1.style = `width: 100vw;background-color: #00000024;height: 100vh;position: fixed;right: 5px;display: none;z-index:99999999;`;
document.body.prepend(div1);

if (!!Number(localStorage.getItem("ACLOSE154658"))) {
document.getElementById("ON125374").click();
}

};

复制上面的脚本, 然后点击浏览器中油猴脚本插件图标, 选择添加新脚本

open_tempermonkey

然后用复制的脚本覆盖掉打开的页面中的脚本代码

copy_to_tempermonkey

复制粘贴完成之后按快捷键 ctrl+s 保存即可

下载视频

脚本添加完成后打开你想要下载的油管视频

然后在订阅按钮上方, 点赞按钮同一行的地方 应当 会出现一个下载按钮

download_btn

如果没有, 那就刷新, 如果还没有, 那就多刷新几次, 如果确实还是没有, 有可能这套方案就寄了

点击下载的按钮之后会出现一个如下的弹窗

download_dialog

默认选项的视频中会带音频, 如果有其他的需求也可以自己选择

确认后点击download, 后面会出现perparation: 23.3% 之类的字样, 等到加载至100%后会自动弹出下载, 然后自己找个位置保存一下就好了

如果这个方案的速度也不行了, 那么很有可能就是寄了