Win 10 使用FFmpeg下载niconico上的视频

发布于 2019-07-15  291 次阅读


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站视频似乎更加稳定一点(?

不过依旧是一个需要用到命令行的方法,所以还是比较小众。如果不喜欢使用命令行的话不妨安装相关的浏览器插件来进行视频下载。