使用aria2下载视频文件
某些网站的视频文件即使获取了下载链接也是无法使用第三方工具下载,主要原因是服务器端需对Cookie
或者referer
等验证,故使用第三方下载工具时需要提交该信息。
工具
- chrome浏览器
- aria2
- AriaNG: 一个aria2 web UI
视频文件类型
一般使用 HTML5 技术在线加载的视频,有 2 种加载形式:
- 单独文件加载:单独的一个完整视频文件(后缀名一般为
*.mp4
) - 多片段文件加载:一般使用后缀名为
*.m3u8
的列表文件,分别按进度依次载入数个加密或未加密的*.ts
文件
如何获取下载链接及验证信息
浏览器打开视频页面,按下F12进入开发者工具,刷新页面,可以在network
标签页看到访问的元素请求。在 Fiter 筛选栏
输入关键词如mp4
或m3u8
以*.m3u8
列表文件为例
获取下载链接
在左侧找到目标文件,鼠标选中,在右侧详情栏General
–>Request URL
便是下载链接。复制链接备用,对于 m3u8列表文件,右键转到
直接通过浏览器下载备用。
获取Request Headers
参数
找到Request Headers
部分,即可看到有Referer
、User-Agent
、Cookie
等数据,一般只需复制以上 3 个数据即可(Referer
和Cookie
可能不会同时存在,User-Agent
一般推荐使用)复制备用。如果Cookie
信息比较大可以单独保存为一个文件,如cookie.txt
。
获取ts文件下载链接
使用文本编辑器打开m3u8列表文件
,删除#
开头的行, 并补全ts文件
下载链接复制备用,也可另存为列表文件**list.txt
,原m3u8列表文件
在后续的文件解密合并时还需用到,也可重命名为index.m3u8
**。
1 | #EXTM3U |
补全整理后
1 | https://xxxx/xxxx/5t2z9mIR2ZKG20c7w5PeHsrDNjA=/lqn2o_WGxPIjDV_idXAR9c-q6DFM/000000.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内容
、文件的下载地址
即可。
提示:
- 对于同时下载多个文件,可以使用
--dir "下载路径"
代替-o '要保存的文件名'
。 - 对于同时下载多个文件,可以指定包含多个文件下载链接的列表文件,如之前的**
list.txt
**。使用--input-file=list.txt
代替"文件的下载地址(支持多个链接)"
。 - 对于同时下载多个文件且下载链接存在规则性,也可使用
-Z -P http://host/XXXX[000-100].ts
代替"文件的下载地址(支持多个链接)"
。详见:aria2c:参数化 URI - 对于使用 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
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 |