1.原理介绍
本文中所介绍的视频下载方法也适用于在其它使用HLS协议的视频网站上下载视频。
在去年的n站版本更新后,通过一些较老的方式下载n站的视频时,会发现下载下来的是后缀名为.ts
的片段而不是整个视频。原因在于新版的H5播放器使用了HLS
协议。
使用HLS
协议传输视频时,客户端在加载视频之前,服务端会向客户端传输一个M3U8
文件。它相当于一个播放列表,客户端可以通过这个文件来依次加载视频片段,也就是被封装为TS
文件的视频。在开始播放视频时,服务端将会把封装好的TS
文件一个个地按照M3U8
文件规定的顺序传输给客户端。
大多数视频网站所使用的M3U8
文件中含有TS
文件的播放顺序以及每个TS
文件的地址,n站也不例外。所以如果可以搞到视频的M3U8
文件,就可以通过它来下载该视频的所有TS
文件,然后通过FFmpeg来将它们拼接成完整的视频。
说了这么多,不如直接试一下来得直观。由于我平时还是比较习惯用Windows系统,这里就以Win 10为例介绍使用FFmpeg下载n站视频的方法。
2.准备工作
首先需要做好以下准备:
- 下载FFmpeg,并且将它添加到环境变量中
- 确保电脑上有能够访问n站的工具
网上已经有很多介绍在Windows上下载FFmpeg的文章,因此这里就不再详细讲解,还请自行搜索相关教程。
另外,因为目前(2019年7月)n站无法在国内直接访问,所以准备一些特殊工具还是有必要的。
3.操作步骤
3.1.设置CMD代理
FFmpeg并没有设置代理相关的参数,所以只能给整个命令提示符设置代理来确保FFmpeg能够访问相应的链接。
按下Win+R
键,在弹出的运行窗口中输入cmd
后回车,打开命令提示符。
如果你使用的是小飞机的话,敲以下两条命令即可。这里设置的代理只在当前命令提示符窗口有效,注意不要手抖把它关掉。
set http_proxy=http://127.0.0.1:1080 set https_proxy=http://127.0.0.1:1080
设置完后可以通过下面的命令测试一下。
curl https://www.google.com
如果返回了一堆HTML
代码,就表示上面的设置是正确的并且已经生效了。
3.2.寻找M3U8文件
在浏览器中点开想要下载的视频所在的页面,按下F12
键打开审查元素,点击审查元素界面的Network
标签页,在搜索栏中输入“m3u8”后按回车。不出意外的话就可以找到几个M3U8
文件。
鼠标右键点击M3U8文件,在菜单中依次选择Copy
->Copy link address
复制M3U8文件的链接。
3.3.开始下载
链接复制完毕后,打开刚刚设置完成的命令提示符窗口,输入命令下载视频。请将引号中的paste.m3u8.link.here
替换成刚刚复制的M3U8
链接(点击鼠标右键即可粘贴),并且根据情况修改命令最后的文件名以及文件位置(这是拼接完成后的视频的文件名和所保存的位置)。
ffmpeg -i "paste.m3u8.link.here" -c copy D:\filename.mp4
举个例子,这里输入了以下命令:
ffmpeg -i "https://pc031aa9de6.dmc.nico/hlsvod/ht2_nicovideo/nicovideo-nm5988510_7c2ec41749c196f3d19a02b53e1c4ec7aa1262d7d881454ce7d0175725c1f69d/master.m3u8?ht2_nicovideo=40417529.oyeh6p_puouao_1qihyy4lgvexg" -c copy D:\video\hoshikuzu_utopia.mp4按回车后FFmpeg将会通过引号中的链接下载视频并且进行拼接,拼接好的视频会存放在
D:\video\
这个目录,文件名为hoshikuzu_utopia.mp4
。
稍等片刻,视频就下载完成了。在这个过程中不会留下任何TS
文件,所以无需进行清理。还请放心。
4.个人吐槽
和you-get
相比,通过这个方式来下载n站视频似乎更加稳定一点(?
不过依旧是一个需要用到命令行的方法,所以还是比较小众。如果不喜欢使用命令行的话不妨安装相关的浏览器插件来进行视频下载。
7 Comments
君铭十八 博主
大佬 你的方法教程都没问题 就是nico会限现在找不到m3u8文件 我尝试用了 Media download helper 这个插件 是能找到 但是我总感觉清晰度不是很够 720p扒下来是1080*720 30帧吗?
Omega 博主
@君铭十八
好久没逛n站,不是很清楚现在的情况。就很久之前的记忆来看,清晰度大概率没那么高。
君铭十八 博主
@Omega
有白金会员 然后直播回放3m 历史视频最高画质是720 目前就是这样 反正我是找不到其他插件捕捉m3u8了 瑟批也是有极限的 电脑苦手面对一堆代码头都大了哈哈 已经扒下来三个了 离线观看就是爽~
mikifuns 博主
thanks
顺带一提如果碰到大佬们直播的话…就只能用这种方法将就将就了….毕竟直播无论串流还是回放全是hls…..sad
Omega 博主
@mikifuns
学到了ww
差点忘记直播也是hls,这个方法也可以凑合着用~
mikifuns 博主
@Omega
岂止凑合用,想完整下载不断流的话也只能这么干…_(´ཀ`」 ∠)__
插件虽然方便但是一旦断流就全部白给了…还是这方法更靠谱,至少会重试
Omega 博主
@mikifuns
是的,这个方法虽然要点操作但是还是比较稳的