使用aria2下载视频文件

某些网站的视频文件即使获取了下载链接也是无法使用第三方工具下载,主要原因是服务器端需对Cookie或者referer等验证,故使用第三方下载工具时需要提交该信息。

工具

  • chrome浏览器
  • aria2
  • AriaNG: 一个aria2 web UI

视频文件类型

一般使用 HTML5 技术在线加载的视频,有 2 种加载形式:

  • 单独文件加载:单独的一个完整视频文件(后缀名一般为*.mp4)
  • 多片段文件加载:一般使用后缀名为*.m3u8 的列表文件,分别按进度依次载入数个加密或未加密的*.ts文件

如何获取下载链接及验证信息

浏览器打开视频页面,按下F12进入开发者工具,刷新页面,可以在network标签页看到访问的元素请求。在 Fiter 筛选栏输入关键词如mp4m3u8

*.m3u8列表文件为例

获取下载链接

在左侧找到目标文件,鼠标选中,在右侧详情栏General–>Request URL便是下载链接。复制链接备用,对于 m3u8列表文件,右键转到直接通过浏览器下载备用。
获取下载链接

获取Request Headers参数

找到Request Headers部分,即可看到有RefererUser-AgentCookie等数据,一般只需复制以上 3 个数据即可(RefererCookie可能不会同时存在,User-Agent一般推荐使用)复制备用。如果Cookie信息比较大可以单独保存为一个文件,如cookie.txt
获取RequestHeaders 参数

获取ts文件下载链接

使用文本编辑器打开m3u8列表文件,删除#开头的行, 并补全ts文件下载链接复制备用,也可另存为列表文件**list.txt,原m3u8列表文件在后续的文件解密合并时还需用到,也可重命名为index.m3u8**。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:18
#EXT-X-KEY:METHOD=QINIU-PROTECTION-10,IV=0x613694b311fb436b16f58b8c8f741ca2
#EXTINF:16.733333,
/5t2z9mIR2ZKG20c7w5PeHsrDNjA=/lqn2o_WGxPIjDV_idXAR9c-q6DFM/000000.ts
#EXT-X-KEY:METHOD=QINIU-PROTECTION-10,IV=0x005825f743583155e78af94c6c364190
#EXTINF:3.666667,
/5t2z9mIR2ZKG20c7w5PeHsrDNjA=/lqn2o_WGxPIjDV_idXAR9c-q6DFM/000001.ts
#EXT-X-KEY:METHOD=QINIU-PROTECTION-10,IV=0xb8941ace1e79b5c0acf7d81ec3924226
#EXTINF:17.866667,
.
.
.

补全整理后

1
2
3
https://xxxx/xxxx/5t2z9mIR2ZKG20c7w5PeHsrDNjA=/lqn2o_WGxPIjDV_idXAR9c-q6DFM/000000.ts
https://xxxx/xxxx/5t2z9mIR2ZKG20c7w5PeHsrDNjA=/lqn2o_WGxPIjDV_idXAR9c-q6DFM/000001.ts
...

列表文件中存在类似信息

1
#EXT-X-KEY:METHOD=AES-128,URI="https://....."

则ts 文件的密钥文件为这个URI链接的文件中,如果后续使用 ffmpeg命令进行解密时能自动获取则不需要下载,否则请提前下载并将URI内容改成本地密钥文件路径

使用 Aria2c 命令行下载

命令参数格式如下:

1
aria2c -c -s10 -k1M -x16 --enable-rpc=false -o '要保存的文件名' --user-agent="<User-Agent内容>" --referer="<访问来源>" "文件的下载地址(支持多个链接)"

1
aria2c -c -s10 -k1M -x16 --enable-rpc=false -o '要保存的文件名' --user-agent="<User-Agent内容>"  --header="Cookie: <你的cookie内容>" "文件的下载地址(支持多个链接)"

替换如上命令里的要保存的文件名<User-Agent内容> <访问来源>你的cookie内容文件的下载地址即可。

提示:

  1. 对于同时下载多个文件,可以使用--dir "下载路径"代替 -o '要保存的文件名'
  2. 对于同时下载多个文件,可以指定包含多个文件下载链接的列表文件,如之前的**list.txt**。使用--input-file=list.txt代替"文件的下载地址(支持多个链接)"
  3. 对于同时下载多个文件且下载链接存在规则性,也可使用-Z -P http://host/XXXX[000-100].ts代替"文件的下载地址(支持多个链接)"。详见:aria2c:参数化 URI
  4. 对于使用 cookie 文件可使用--load-cookies=<cookie 文件>代替--header="Cookie: <你的cookie内容>"

使用 AriaNG 下载

打在AriaNG管理页面–>Aria2设置–> HTTP 设置
自定义 User Agent(user-agent)设置为:<User-Agent内容>

新建 --> 黏贴下载链接 --> 选项 --> 勾选 Http

  • 请求来源(referer)设置为:<访问来源>
  • 自定义请求头(header)设置为:Cookie: <你的cookie内容>。注意:此处**Cookie:**字样也需要填入。

附:FFmpeg解码M3U8合并解密TS到MP4

参考:https://luluit.top/archives/2070.html

FFmpeg安装

macOS/Win 下可以去这里下载单文件版。当然macOS也可以使用brew安装(依赖包较多)。

1
brew install ffmpeg

解密合并

将 m3u8 列表文件(如:index.m3u8)、离线密钥和 ts 文件放在同一目录下,使用ffmpeg命令进行解密合并成单个 mp4文件:

一般情况:

1
ffmpeg -i index.m3u8 -c copy XXXX.MP4

对于使用在线密钥时:

1
ffmpeg -allowed_extensions ALL -protocol_whitelist https,tls,tcp,file,crypto -i index.m3u8 -c copy XXXX.MP4