管人存档机

最近购入了一台伊拉克成色的lto5磁带机,就想着做一下星街存档的冷备份。然而手头的劣质机场不仅稳定性极差,连续下载必然被警告请求过多。于是为了解决视频信息归档,间隔时间下载之类奇奇怪怪的功能,便萌生了自造轮子的想法–不过说到底也就是一个yt-dlp的自动调用脚本罢了。毕竟一个从来没有正儿八经写过完整程序的门外汉也实在难以写出更精美的玩意儿。


项目地址

https://github.com/elfofmaxwell/ytb-archiver

依赖

请确保yt-dlp已经正确安装。同时,若想下载较高清晰度视频,ffmpeg也需要正确安装。由于本脚本并未实质发布,所以您需要获取并使用自己的youtube api调用权限(详情请见Obtaining authorization credentials);您需要下载json格式密钥,将其重命名为secrets.json,并置于工作目录之内。为了通过谷歌api授权,您需要google-api-python-clientgoogle-auth-oauthlib;二者皆可通过pip安装。

一键管理脚本

初次使用请初始化配置。可以运行

1
python one-click.py init

以交互式初始化配置,也可以事先修改config.json并通过以下命令初始化:

1
python one-click.py init --file

初始化成功后,运行以下命令以开始任务:

1
python one-click.py start

或使用以下命令指定下载某个频道的内容:

1
python one-click.py start <channel ID>

注意指定频道下载并不会将频道添加入配置文件中,下次使用并不会自动更新此频道内容。

开始任务后,首先会向youtube api发出请求以获得频道所有视频的信息列表。之后会启动yt-dlp下载视频,默认下载格式为webm。视频的最终路径为:

1
<提供的下载路径>/downloads/by_upload_date/<上传日期>/<标题 [视频ID]>.webm

若在下载途中退出,下次启动时会从未完成的视频继续下载。在最新的视频下载成功后,一个脚本将自动检查是否所有视频都以成功下载,并列出失败视频的ID,可以通过附带的download_with_id.py脚本手动重新批量下载。若想在全部视频完成前启动完整性检查,可以直接运行completeness_check.py脚本。

手动更新配置文件

使用文本编辑器打开config.json,在第一对中括号内添加频道ID,每个频道需要带有引号,多个频道在引号外用逗号分隔;在download_path项目后输入用引号包围的项目下载路径;在slow_mode_time项目后输入以慢速模式运行时每个视频请求的间隔时间(秒),不填默认为600秒,不启用慢速模式填0.

手动下载:download_with_id.py

若有视频因网络等原因未能正常完成下载,可以手动调用此脚本根据ID重新下载。此脚本首先会询问下载路径,可以直接指定路径下载,若所有视频均来源于同一频道且此频道已经经过初始化/有下载记录,则可输入频道ID以下载至此频道对应的下载目录,若留空则下载至工作目录。

单独运行其余脚本

get_video_id.py

拉取给定频道所有上传视频的信息。

必要参数:<channel id>

输出:./video_lists/<channel id>_list.json, 记录该频道所有视频的标题,上传日期,视频ID。

download_w_list.py

根据前脚本拉取的列表下载视频。

必要参数: <channel id>, 必须为第一位参数

可选参数:

--edit-checkpoint: 手动修改目前下载点(交互)

--init-checkpoint: 预设该频道的下载路径,可选跟参数:<下载路径>

--log: 输出下载错误记录至download_logs/_download.log, 可选跟参数: append [不清除前次记录]

--slow: 慢速模式,默认每次下载间隔10分钟,可选参数:间隔时间(秒)

-q: 静默模式,开始下载时不询问下载路径

-y: 自动模式,不询问是否下载下一个视频

输出:下载视频,下载点记录,下载错误记录

completeness_check.py

检查前脚本下载的视频是否全部完成。

必要参数:<channel id>, 必须为第一位参数

可选参数:

<开始位点>(位置参数):从列表的此位点开始检查,默认为0

<结束位点>(位置参数):检查到列表的此位点为止,默认为最后下载的视频。

查看评论