突发奇想,想找发姐过去的直播录像,在斗鱼时期的那些。
|
| 这是发姐和……大表姐? |
我是知道 chatcyf.com(以及 67373pt.com)的,不过它上面的视频只有近些年的,最早只到 2024 年,还不及 发姐自己频道 的录像全。不过发姐自己的频道没有放看电影的那些,也就是周一的大部分。如果一点都不想错过的话,还是得去下载。
然而即使发姐自己的 YouTube 频道也没有过去的旧录像,充其量能找到茶话会的一些切片。cloud.chatcyf.com 上面有不少旧的音频,MP3 格式,已经算是很珍贵的史料了,难能可贵。自从强国全网封杀之后,视频估计很难找了,抱着一丝希望问了一下 AI,说在 YouTube 还有。是@moarmo7396 和 @moarmodlc9595 这两个号。
这两个号一共有 1394 + 103 = 1497 个视频。后者是 2015 年 3 月及以前的,大概因为主号到了什么限额?算是相当早期的视频,应该是发姐刚开播不久就开始录的,很是珍贵。虽然 YouTube 不太有会被下架之虞,但人家放上来也就算了,不能指望还能维护多久,我还是觉得有必要下载一下。而且路上在线听需要流量,下载好了再听就不用了,也方便拖动进度、回看一类的操作。
我订阅了 Google AI Pro,送了 YouTube Premium Lite,看视频不需要看广告。据说也有大部分视频的下载权益,但我尝试了一下,发现上述视频不在其中,仍然让我去订阅 YouTube Premium。不知道是不是因为这些视频上传时间比较老?我顺手点了一下别人昨天新发布的视频的下载,是可以进行的。
于是,现在的问题来到了「如何下载 YouTube 视频」的环节。
我也是知道有网站提供了在线服务,可以用来下载 YouTube 视频的。我之前干过这种事情,在 B 站上也干过,原理类似。既然在线视频网站要让人来看,那么理论上就防不住别人来下载。所谓下载,无非就是用非常快的速度看一遍,然后把收到的数据都记录下来而已。无论网站如何「防范」,也只是道高一尺魔高一丈,从根本原理上就是无能为力的事情。
不过呢,视频网站持有版权,可以把提供这些在线下载服务的工具网站给关停掉。防不住心怀不满的民众,但是可以把菜刀锁起来不让用啊。而且越好用的在线下载网站,名声越在外,越容易吃官司。比如这个 Cobalt.tools,等到我去想下载的时候,就已经被投诉关停服务了。
|
| 你妹! |
我当然可以再去找找看有没有别的「存活」的网站。只要市场上还有需求,就一定会有人架设这种站点,然后隔不了多久再被关停。一如中国机房里面那些 VPN 的「中转服务器」。但这种猫捉老鼠的游戏我有点厌烦了,就像 Cobalt.tools 说的,你行你自己上啊!
我又不是真的中年不举了。
在推荐在线下载网站的同时,AI 也推荐了开源的 YouTube 视频下载工具,例如这个托管在 GitHub 上的 yt-dlp。
注意:攻防拉锯战中,以下具体技术内容可能很快过时需要更新,请参考官方网站的最新技术说明。
我一开始有点没想明白,在自己机器上用 WinGet 下载安装了它。但我随即想起来老子现在是被「混合双打」的角色,所以就改在墙外的 VPS 上去部署。我是直接下载了二进制可执行文件的版本。对于 x64 的 Debian 而言,丢去 /usr/sbin 以后直接就可以运行。另外它还需要 ffmpeg,这个用 apt 直接安装就好。
我试了一下,下载没有成功,给了报错信息,说是需要登录。得去导出浏览器上的 Cookies,然后放到 txt 文件中,让 yt-dlp 加载起来,才能完成下载。我试着在 Chrome 的无痕模式下打开这个页面,也有类似的报错,看来确实是 YouTube 服务器不让游客下载。
|
| 防火防盗防 Bot |
关于如何把 Cookies 给到 yt-dlp,它在 GitHub 上也给了 说明。英文不难看懂,我就不具体讲了。总之只要得到了有 Cookies 的 txt 文件,接下来就用命令行参数 --cookies 给到 yt-dlp 就可以。那么怎么得到这个 txt 文件呢?官方也给出了 说明,需要从浏览器中进行导出。
这一步就有点麻烦了。需要先安装一个 Chrome 插件,然后找一个干净的 Chrome 浏览器,确保没有别的站点的 Cookies 被导出,并且已经得到的 YouTube 的 Cookies 不能被它自己的定时更新机制给刷废掉。所以官方说明里面给出的方法大概是这样的:
- 新开个浏览器,打开一个无痕模式的页面,登录 YouTube(同时也就登录了 Google 账号)。
- 别的页面都不要开,把这个页面跳转到 https://www.youtube.com/robots.txt,保持整个浏览器就这个页面。
- 用 Chrome 插件把 Cookies 导出成 txt 文件,Netscape 格式,然后就关掉这个页面,别再打开它。
另外还得注意 txt 文件的换行符格式。如果报了 400 错误,那就是换行符格式不对。这种事情对我来说难度不大,不过我也没遇到这个问题。
我的麻烦是我现在的 Chrome 上的 Tab 页签已经多得字都快看不见了,无痕模式的页面也不少。这绝对算不上「干净」。真要干净的环境,得去搞虚拟机或沙盒。我没想到一点小念头最后搞得这么复杂,一度有点想打退堂鼓:大不了在线看就是了。
最后我心中的 Geek 之魂还是战胜了想偷懒的小人儿。好在我手上有维护良好的现成 Win10 虚拟机,克隆一个出来搭个环境也不是太麻烦的事情,顺便也下载个最新版的 Chrome 离线安装包存着(顺便吐槽一嘴,Chrome 最近怎么更新得那么勤快?)。而且我担心这种环境今后可能还需要被再度用到,磨刀不误砍柴工,所以还是耐着性子折腾好了。
插件不算难用,导出的 txt 文件一次性试验成功。现在报错信息变了,说为了应对 YouTube 发起的 JavaScript 挑战,需要 EJS。
官方的说明页面上给了推荐,我用的二进制版 yt-dlp 内置了对 Deno 的支持,因此我就直接选它了。安装 我就直接选 shell 方式了。装好以后,总算是不报错了,后面就蛮顺利的。
[youtube] Extracting URL: https://www.youtube.com/watch?v=AOHawS_X21o [youtube] AOHawS_X21o: Downloading webpage [youtube] AOHawS_X21o: Downloading web creator client config [youtube] AOHawS_X21o: Downloading player e937390a-main [youtube] AOHawS_X21o: Downloading web creator player API JSON [youtube] AOHawS_X21o: Downloading tv downgraded player API JSON [youtube] [jsc:deno] Solving JS challenges using deno [info] AOHawS_X21o: Downloading 1 format(s): 18 [info] Downloading video thumbnail 41 ... [info] Writing video thumbnail 41 to: 陈一发儿直播视频 2015-04-01 10_38.webp [download] Destination: 陈一发儿直播视频 2015-04-01 10_38.mp4 [download] 100% of 443.88MiB in 00:01:01 at 7.19MiB/s [Metadata] Adding metadata to "陈一发儿直播视频 2015-04-01 10_38.mp4" [ThumbnailsConvertor] Converting thumbnail "陈一发儿直播视频 2015-04-01 10_38.webp" to png [EmbedThumbnail] Neither mutagen nor AtomicParsley was found. Falling back to ffmpeg [EmbedThumbnail] ffmpeg: Adding thumbnail to "陈一发儿直播视频 2015-04-01 10_38.mp4"
现在剩下的事情就是把下载好的文件怎么传过来了。慢是慢了一点,总归有办法。文件名还得再改改。这些事情可能就是 AI Agent 擅长的范畴了。但我也不着急着去进一步自动化。就这样一个一个下载,一个一个整理,也是一种擦拭手办的快乐。能带来快乐的事情,我干嘛让给 AI 去做?
最后附上我用的 yt-dlp 命令行参数。自己可以用 --help 打出来慢慢看,我这几个也是从别的网站上抄的。够用就好,我把它整成了一个 shell 脚本,调用的时候在命令行参数给出 URL 就可以了。
yt-dlp \
--output "%(title)s.%(ext)s" \
--embed-thumbnail \
--add-metadata \
--cookies www.youtube.com_cookies.txt \
"$1"



没有评论:
发表评论