/KouShare-dl

KouShare-dl是一个用于从“蔻享学术”视频网站下载视频和课件、录制直播的命令行工具。

Primary LanguageGoThe UnlicenseUnlicense

KouShare-dl

License Build Status Go Report Card Github All Releases

KouShare-dl 是一个使用 Cobra 开发的用于从 “蔻享学术” 视频网站下载视频和课件的 CLI 工具。

您可以在常见的操作系统(Windows,macOS 和 Linux 的各个发行版)里使用该命令行工具。该工具已被发布至公有领域,因此您可以按照您的想法自由使用它,如对它进行修改、重新发布等操作。

目录

功能

它目前具有如下功能

  • 登录蔻享账户,且一周内免登录

  • 获取视频的详细信息

  • 下载单个蔻享视频或整个系列的视频

  • 下载清晰度为标清、高清和超清的视频(需要登录)

  • 下载已购买且在有效期内的付费视频(需要登录)

  • 继续上一次的视频下载

  • 定时录制直播间

  • 继续上一次的直播间录制

  • 下载单个课件或整个系列的课件

它无法做到的事情

  • 下载未购买的付费视频

"功能支持"表格

类型 是否支持系列下载 是否支持单独下载 是否支持断点续传 是否支持不同清晰度的下载 是否支持付费产品下载
视频 ✔️ ✔️ ✔️ ✔️
直播 ✔️ ✔️
课件 ✔️ ✔️ ✔️

(✔️表示支持该功能,❌表示不支持该功能,➖表示该功能不存在,⭕表示部分支持该功能)

编译

如果您是 Windows 平台用户,可以直接下载 Releases 中的可执行文件ks.exe。 否则,您需要下载源代码自行编译。

使用方法

您需要通过命令行或终端进入该程序所在的文件夹,才能执行相关命令。

Windows平台为例,若可执行程序ks.exe位于C:\Users\lenovo\Downloads\路径下,您每次使用时需要通过快捷键Win+R打开“运行”对话框,输入CMD后回车打开命令行窗口。在命令行窗口中输入以下命令:

cd C:\Users\lenovo\Downloads\
ks -v

若出现ks version v0.7字样,则说明可以正常使用。接下来您可以继续输入 KouShare-dl 程序的命令来进行交互。比如,输入ks help并回车,您就可以看到 KouShare-dl 程序的帮助信息了。

命令简介

KouShare-dl 程序的命令具有下面的格式:

  ks [command] <flag>

其中[command]为必选命令,<flag>为可选参数。

可使用的 command 命令:

  help        查看某个具体命令的更多帮助信息
  info        获取视频的基本信息
  login       通过短信验证码获取“蔻享学术”登陆凭证
  logout      退出登陆
  merge       合并下载的视频片段文件
  record      录制指定直播间ID的直播
  save        保存指定vid的视频(vid为视频网址里最后面的一串数字)
  slide       下载指定vid的视频对应的课件

可使用的 flag 参数:

  -@, --at         指定时间,格式为"2006-01-02 15:04:05"
  -a, --autoMerge  指定是否自动合并下载的视频片段文件
  -h, --help       查看帮助信息
  -n, --name       指定输出文件的名字
  -p, --path       指定保存文件的路径(若不指定,则默认为该程序当前所在的路径)
  -q, --quality    指定下载视频的清晰度(high为超清,standard为高清,low为标清,不指定则默认为超清)
      --qpdf-bin   指定qpdf的bin文件夹所在的路径(注:该flag无简写形式)
  -s, --series     指定是否下载整个系列的文件
  -v, --version    查看版本号

需要注意的是,对于每个 command 命令,仅有部分 flag 参数是可用且有效的。可以通过ks help [command]来查看某个命令的详细描述及其可用的 flag 参数。

示例

一、登录账户与注销登陆

登录蔻享账户并不是使用流程中的必须操作,但登录蔻享账户后可以下载更高清晰度的视频和下载已购买的付费视频,获取视频的基本信息时还可以获取到更多详细的内容。

1.1 登录蔻享账户

使用下面的命令登录蔻享账户:

ks login [phone number]

其中[phone number]参数为 11 位手机号码。该命令执行后,手机会收到 6 位短信验证码,在命令行中继续输入短信验证码后回车即可登录。登录成功后会在当前路径下生成一个用于保存登录凭证的 Token 隐藏文件,Token 有效期为一周,因此一周内无需再次登录即可保持登录状态。

重复运行该命令会自动更新登陆凭证。登录凭证过期后重新登陆即可。

1.2 注销登录状态

如果想注销登录状态,可以使用这条命令:

ks logout

手动删除程序所在路径下的.token文件与该命令的执行效果相同。

二、查看视频信息

查看视频信息使用ks info [vid]命令。info命令没有 flag 。

执行该命令后会返回指定 vid 的视频的详细信息,包括标题、讲者、单位、日期、时长、体积、类别、系列、分组以及视频简介等。

几点说明:

  • 非登录状态下,“体积”仅展示标清清晰度下的视频大小;登录状态下,“体积”展示最高清晰度下的视频大小。

  • 若“体积”为0MB [未知],则说明该视频是未购买的(或未在购买有效期内的)付费视频,此时 KouShare-dl 无法获取该视频的体积信息。

  • 若“系列”不为空,说明该视频是属于某个系列的视频,比如某精品公开课中的一节课。

您可以试一试下面的例子:

ks info 7304

建议下载视频和课件前使用info命令确认视频的信息是否正确。

三、下载视频

每个蔻享学术视频都有唯一对应的 id,即 vid。 在蔻享学术网站进入某个视频的播放页面后,该页面网址的最后的数字部分即为该视频的 vid。例如,在下面的网址中,7412是该视频的 vid。

https://www.koushare.com/video/videodetail/7412

下载视频使用ks save [vid] <flags>命令。与save对应的 flag 有三个:

简写形式 完整形式 说明 类型 默认值
-p --path 指定保存视频的路径 String 当前所在路径
-q --quality 指定下载视频的清晰度 String 超清
-s --series 指定是否下载系列视频 Bool

多个 flag 可以不分顺序地叠加使用,但Bool类型的 flag 宜放在最后使用。关于命令中 flag 的详细使用语法,可以参考这里的描述

3.1 使用默认参数下载视频

使用save时不加任何 flag ,程序就会使用save的所有 flag 的默认值进行下载。

例如,在登录状态下要默认下载 vid 为7552的视频,可以运行下面这条命令:

  ks save 7552

该命令执行完毕后,程序所在的路径下会出现一个.mp4格式的超清视频文件,这就是下载下来的 vid 为7552的蔻享视频。

3.2 下载视频至指定文件夹

若要指定保存视频的位置,可以加上-p参数,并为其指定一个新值(如D:\temp\)以覆盖默认值(当前所在路径),如下所示:

  ks save 7552 -p D:\temp\

这里的-p--path的简写形式,而-p D:\temp\--path=D:\temp\是等价的,因此上一条命令也可以等价地修改为:

ks save 7552 --path=D:\temp\

若指定的文件夹不存在,程序会创建该文件夹以保存视频。若遇到Access is denied的错误提示,则说明权限不足,此时您需要使用更高的权限来运行 KouShare-dl。

3.3 下载某个系列的所有视频

系列下载需要指定-s参数,-s--series参数是Bool型 flag,使用时无需指定具体的值。

您需要知道所要下载的系列视频中任意一个视频的 vid。以“中物院研究生院精品公开课之《高等量子力学》公开课程”系列为例,可以使用下面这条命令下载该系列的所有视频:

ks save 7304 -s

程序会使用该系列的名字创建一个文件夹用以存放下载的视频。7304是该系列第一个视频的 vid,可被替换为该系列任意视频的 vid。

若要同时指定保存视频的位置(如D:\temp\),可以运行该命令:

ks save 7552 -p D:\tmp\ -s

3.4 下载不同清晰度的视频

使用-q--quality参数来指定下载视频的清晰度。该 flag 的值只有high(超清)、standard(高清)和low(标清)三种。示例如下:

ks save 7304 -q high
ks save 7304 -q standard
ks save 7304 --quality=low

需要注意的是:

  • 非登录状态下,-q--quality参数无效。这是因为非登录状态下仅能下载标清视频。
  • 若您指定的该 flag 的值并不在以上三种值之内,程序会判定要下载的清晰度为标清。
  • 登录状态下,若您要下载的视频没有您指定的清晰度,程序会选择次于您指定清晰度的清晰度进行视频的下载。

四、录制直播与合并视频片段

每个蔻享直播间都有唯一对应的 id,即 roomID。 在蔻享学术网站进入某个直播间的页面后,该页面网址的最后的数字部分即为该直播间的房间号。例如,在下面的网址中,676216是该直播间的 roomID。

https://www.koushare.com/lives/room/676216

录制直播使用ks record [roomID] <flags>命令。与record对应的 flag 有三个:

简写形式 完整形式 说明 类型 默认值
-@ --at 开播时间,格式为"2006-01-02 15:04:05" String 立即开始录制
-a --autoMerge 指定是否自动合并下载的视频片段文件 Bool
-p --path 指定保存录制视频的路径 String 当前所在路径

合并下载的.ts视频片段使用ks merge <directory> <flags> 命令。与merge对应的 flag 有一个:

简写形式 完整形式 说明 类型 默认值
-n --name 指定合并后文件的名字,格式xxx.ts String recorded Video File.ts

4.1 对指定直播间进行录制

录制直播时不需要处于登录状态下。假如您想要录制房间号为751111的直播间,可以运行该命令:

  ks record 751111 -a

执行命令后程序会立即开始录制。但如果此时尚未开播,您会收到直播未按时开始或已结束的提示,随后程序会自动退出。因此,推荐将该命令用于录制已开始直播的直播间。

如果直播尚未开始,但您知道准确的开播时间,那么可以用-@参数指定开播时间,如:

  ks record 751111 -@="2021-07-15 18:30:00" -a

运行这条命令后会立即启动倒计时,到指定的开播时间后 KouShare-dl 会以1080p的清晰度自动开始录制直播,直播结束时会自动停止录制。

注:若到指定的开播时间后直播间仍未开播,程序会自动退出。

4.2 合并录制的视频片段

在观看直播时,直播视频是以一个个小文件(即一些时长较短的视频片段)的方式传输给用户的。在上一个示例中,指定-a参数后,KouShare-dl 会自动合并下载的直播视频片段为一个.ts文件(一种视频文件,可被视频播放器直接播放)。

有时直播时间过长,自动合并后得到的文件体积较大,不便于传输,可以在录制直播时不指定-a参数,这样下载下来的直播片段不会自动合并。您可以在传输后使用merge命令手动合并.ts视频片段:

  ks merge <directory> <flags>

其中<directory>参数为存放视频片段文件的文件夹的路径,若为空则默认为程序当前所在路径。

示例如下:

ks merge
ks merge D:\temp\直播录制 -n 课程.ts
ks merge -n output.ts

五、下载课件

下载课件使用ks slide [vid] <flags>命令。与slide对应的 flag 有三个:

简写形式 完整形式 说明 类型 默认值
-p --path 指定保存课件的路径 String 当前所在路径
--qpdf-bin 指定qpdf的bin文件夹所在的路径 String 不使用qpdf
-s --series 指定是否下载整个系列的所有课件 Bool

5.1 下载单个课件和系列课件

下载课件时不需要处于登录状态下。假如您想要下载为 vid 为7405的视频关联的课件,可以运行该命令:

ks slide 7405

使用info命令查看 vid 为7405的视频信息,可以发现该视频的“系列”不为空,说明该视频还有其它相关视频。

假如您想下载这个系列视频的所有课件,可以使用-s参数:

ks slide 7405 -s

同样地,7405可以被替换为同系列任意视频的 vid。

5.2 优化 pdf 文件【实验性功能】

该功能当前并不稳定,不推荐使用。

如果想要使用--qpdf-bin标志,需先下载 qpdf包 并进行解压操作,然后在命令行或终端中指定 qpdf 包的 bin 文件夹所在的路径,如:

ks slide 7405 --qpdf-bin=C:\Downloads\qpdf-10.1.0\bin\

FAQ

KouShare-dl 下载视频时是并行下载吗?

不是并行下载。

下载系列视频时因网络波动导致下载中断该怎么办?

再次运行您上一次使用的下载命令,KouShare-dl 会自动跳过已下载完成的视频,并继续完成您的下载。 录制直播意外中断时同理。

下载视频的过程中遇到因被占用而导致文件重命名失败的错误应该如何处理?

错误信息通常为:rename 文件名.tmp 文件名.mp4: The process cannot access the file because it is being used by another process.您可以耐心等待至下载结束后,手动将重命名失败的.tmp文件的后缀改为.mp4;或者重新运行您上一次使用的下载命令,KouShare-dl 会再次尝试重命名这些.tmp文件。

鸣谢

特别感谢 JetBrains 提供的 GoLand 等 IDE 的授权。 特别感谢为 KouShare-dl 预览版本测试各项功能的小伙伴们。