AI 摘要

本文介绍了如何将b站和网页上的视频文件下载到NAS或本地电脑的多种方法,重点提供了使用猫抓、aria2和mediago的组合方案。首先,猫抓浏览器扩展能够嗅探到网页中的m3u8文件,通过设置调用程序,可以将视频下载到NAS。自动化处理则借助tampermonkey脚本实现,支持一键下载视频。同时,文章还提到mp4文件的下载只需用到aria2,没有媒体文件格式的复杂性。此外,还介绍了mediago的docker部署方式,使视频下载变得更加便捷。

开始

先讲讲我碰到的事情,首先就是今年我用nas部署了一个moontv的docker项目,也部署过类似的LibreTV,最近也听说了新的OmniBox项目,这些项目拿来追各种影视剧都很方便,只要你部署了对应的项目,并配置好了播放源,就可以直接在网页上在线播放对应的影视,可以说相当的方便

但是这样子观影有一个缺点,那就是你必须要在你部署的项目网页上才可以播放这些影视,但是我又想在nas上下载观看这些影视资源,一来二去我就想到了两个新办法

本文第二部分会讲我的探索过程和方法,第三部分讲m3u8视频和哔哩哔哩视频下载脚本教程解决办法,第四部分讲其他类型的mp4视频下载解决方法,第四部分讲项目的部署

我的探索过程和方案(不想看的话可以直接跳过看下一部分的脚本使用教程)

已知我们已经可以在网页上播放影视资源,而当你获取这些资源时,可以知道它们是mp4,mkv,或者m3u8的格式,而m3u8和mp4或者mkv不太一样,它本身是一种流媒体播放列表文件(playlist file),它本身不是真正的视频文件(如 mp4 或 mkv),而是一个用 UTF-8 编码的纯文本文件,里面记录了视频的索引信息和分段地址,不同于mp4文件的容易下载,m3u8视频资源的下载也是没有那么简单的

所以现在下载网页地址上的m3u8影视资源的话,你就可以得到一些方法,比如直接在手机的夸克浏览器或者其他的能下载m3u8文件的浏览器去下载,再或者在电脑上使用tampermonkey和其他的浏览器扩展去下载,结论就是本身下载这些m3u8文件并不难

但是我又不想下载到电脑和手机上,我想下载到我的nas或者服务器上,怎么办呢,我一开始找到了第一个办法

第一个方法只需要你有猫抓+aria2就可以,但是这个方法局限性很大,讲讲我的过程

我首先尝试了猫抓+aria2下载器,直接用aria2的下载器就可以从猫抓下载视频到nas里了,这种方法对于mp4视频文件来说很好用,但是m3u8文件完全不行,最后失败,原因是用猫抓调用aria2去下载m3u8影视资源直接就会下载m3u8文件,而不会下载这个文件地址的视频,所以失败,所以接下来我尝试了第二个方法

第二个方法:猫抓+mediago

讲一下它们,首先是猫抓,猫抓是一个chrome上的浏览器扩展,它可以嗅探获取并且下载m3u8文件

地址:https://o2bmm.gitbook.io/cat-catch/

第二个是mediago,它是一个docker项目,也可以下载m3u8格式的视频,但是mediago可以直接把m3u8视频下载到nas或者电脑里,我们后面的脚本

地址:https://github.com/caorushizi/mediago

而我找到这个方法,并且组合起来的目的呢,首先就是因为猫抓可以获取网页上的m3u8文件,并且可以直接复制粘贴它的地址,如下图所示,m3u8的地址和视频播放预览全都有,很方便,但是猫抓本身的m3u8视频下载功能并不是很好用,我感觉mediago更好用一些,所以我们选择组合起来,猫抓嗅探,之后调用mediago下载视频

而单独使用mediago则需要你在mediago里去手动填写m3u8地址,如下图所示,再下载到nas或者电脑里,这也是我们为什么选择组合猫抓进行使用的原因

正好,对于我而言这俩就可以互补了,猫抓支持从浏览器嗅探获取m3u8的视频文件到mediago里下载

而猫抓也可以从浏览器获取mp4文件到aria2下载器里下载,理论上可以直接结案了,但是我体验下来感觉还有值得改进的地方

虽然方案已经有了,但是猫抓+mediago的方案我觉得还可以优化,来讲讲这个方案的步骤吧

首先需要你在猫抓里设置输入一个调用程序,设置好后,每次下载视频你都要点击调用,并点击确认,在确认后跳转到mediago中,然后在你的mediago中去手动点击那颗下载按钮

调用程序怎么搞定呢,下载到nas的mediago的情况就像下面这么写,前面的网址http://192.168.9.100:8899,就换成你nas上部署的mediago的地址,哪怕你在外面也可以内网穿透,直接用你在公网的网址也是可以的,电脑本地的调用程序怎么写我就略过了

http://192.168.9.100:8899?n=true&name=${title}&url=${url}&headers=${referer|exists:'Referer:*'|to:urlEncode}&type=m3u8&silent=true{title}&url=${url}&headers=${referer|exists:'Referer:*'|to:urlEncode}&type=m3u8&silent=true

在这种手段下,你需要在猫抓获取页面下的影视的时候,点击调用并确认,跳转打开mediago页面去下载影视了

这是最手动的方法,用URL 参数方式 + silent=true + Referer:*的方式去下载资源

但是,还有没有更方便的方法呢,有的有的,兄弟

这个方案充满了手动点击和跳转,而且还有一个问题和一个我的思考

问题就是如果你下载的视频想下载到不同客户端的mediago程序的话,比如你上个视频下载到nas里,下个视频想下载到电脑本地,那么你又需要去猫抓的设置中修改已经设置好的调用程序,因为nas端和本地电脑端的调用程序并不一样

而我的思考就是,在你想要下载bilibili视频的时候,你又没有办法用到猫抓,而是直接用mediago,在mediago中去手动输入bilibili视频地址,然后去下载

所以我想改进一下,弄一个更简单的下载方法,让用户不需要输入调用程序,而且让用户不输入bilibili地址,直接一键下载视频到mediago中,所以我们的脚本就这么诞生了

ps:至于mp4文件的下载,那么我们就不进行改动了,因为目前的aria2下载器都已经非常的方便了,但是我还是讲两句吧,aria2下载器该怎么部署我这里就不说了,其中motrix部署和下载都很简单,我以前在博客上也写过,有需要的自己去搜搜看

已知我们现在可以用这种方法来调用mediago进行视频下载,但是我查阅了mediago的官方地址

发现mediago可以直接api调用静默下载,但是猫抓不支持这个方法,那么很简单,直接用tampermonkey,也就是油猴脚本,来写一个脚本,让这个脚本来调用api自动下载网页上的m3u8文件到nas的mediago里

可以调用直接下载的api,post
请求地址:http(s)://[host]/api/download-now
请求体,json,参数:
name(媒体命名),
url(链接),
type(媒体类型,如m3u8,bilibili),
folder(保存路径,可提供,不提供就是默认路径)

脚本地址我会在下面贴出来,首先我们来讲讲脚本的逻辑

首先也就是api调用,但是这种方法我尝试了一下,有一个问题,那就是纯API 模式虽然可以做到完全后台静默,但是它只适用于不需要 Referer 的视频

所以我添加了原来的url参数模式,在需要referer的视频的情况下,使用上面原来的URL 参数方式 + silent=true + Referer:*的方式去下载资源,虽然需要跳转到mediago去手动确认下载,但是也非常方便了

这样子就可以下载目前大多数网页下面的m3u8视频资源,几乎完美的解决了问题

m3u8视频+bilibili视频下载脚本的使用

首先你得用浏览器下载一个tampermonkey,有什么不懂的直接评论区问我

然后你得在nas或者服务器,再或者电脑本地上部署一个mediago,mediago部署方式在本文的最下面

添加我的油猴脚本,地址:https://greasyfork.org/zh-CN/scripts/559910

国内备用下载地址:https://scriptcat.org/zh-CN/script-show-page/4975

使用起来也很简单,那就是在你对应的想要下载视频的地址下面,首先要启用脚本

在你的播放页面会出现脚本的选项

最上方选项就是齿轮图标和深浅色模式:如果你想下载视频到电脑上,不需要理会这个按钮,如果你是下载到nas里,那么你需要点击齿轮图标,填写你的mediago地址,填写后确认就可以了,齿轮的右边是深浅色模式,最左边的话是最小化按钮,点击后脚本就会变成一个齿轮图标,再点击齿轮就可以变回面板

多选全选:视频文件是可以多选和全选进行下载的,也可以单独下载,多选的话自己勾选就可以了,但是不要一次下载太多,避免卡顿

投喂:点击投喂docker按钮就可以把视频投喂到mediago了,而当你多选了视频文件后,也可以点击右上角的一键投喂按钮直接把视频投喂到mediago中

往下面看,目标:有docker和本地两种,对应的就是你想下载视频到本地电脑或者docker版本的mediago

下载的模式:有两种,第一种是纯api模式,这是最优先的选择方式,如果第一种不行,你就可以尝试url模式来下载,两种方式在使用体验上来说就是api模式会静默一键下载,url则是会跳转到mediago中去下载

归类:这个选项比较特殊,如果选择域名文件夹,理论上它会根据你目前所在的域名名称来创建一个目录,并下载到这个目录中,而默认根目录则是会把视频直接下载到你的mediago下载根目录中。ps:但是实测目前域名文件夹归类模式只会在docker版本中奏效,如果你是电脑本地用户,那么这个选项就没有用

使用我的这个脚本来下载的话,就可以调用你的mediago来下载视频文件了,到这里,正篇的使用教程就算写完了

下面就随便写写dlc番外吧

猫抓+aria2下载器组合部署

如果你要下载的东西不是m3u8和bilibili视频,而是mp4,那其实根本就用不到mediago,而是可以直接用aria2来下载,首先打开猫抓的设置,找到对应的aria2 prc设置,如下图所示

启用aria2 prc,密钥和地址就填你的aria2下载器地址和密钥,下图就是我的motrix aria2下载器页面,在进阶设置里设置prc的地址端口和密钥,就ok了

什么?你问我motrix怎么部署,自己去看我博客以前写过的教程吧

设置好后,就直接在猫抓里填写自己对应的Aria2 RPC 地址和密钥,最后打开这个功能

之后你再去猫抓下载m3u8的视频文件,就可以直接下载到你的nas里了

mediago部署

猫抓很简单,直接去浏览器的扩展商店就可以部署了,

地址:https://o2bmm.gitbook.io/cat-catch/docs/install
mediago的电脑版本下载则是参考他们的官网,地址:https://downloader.caorushizi.cn/guides.html

至于mediago的docker版本,可以直接docker compose,直接docker部署就可以使用了

代码如下

version: '3.9' 

services: 

    caorushizi: 

        image: 'registry.cn-beijing.aliyuncs.com/caorushizi/mediago:v3.0.0' 

        volumes: - '你自己想要视频下载的目录地址:/root/mediago' 

        ports: - '8899:8899' 

        container_name: mediago

就这样,资源的下载变得很简单了

结语

半年没写东西了,下一年我一定要多写东西