需求
看到有些技术视频可以批量下载并上传到cos,通过腾讯云cos批量下载工具 CosBrowser,再分享到国内的平台
前情回顾
昨天在下载视频的时候,VPN的流量消耗的很快,一个月就80G,真的消耗不起,找一下别的方案。
Freemake Video Downloader(免费版客户端工具会带水印,升级需要付费)
这2款批量下载工具是需要付费的,费用还不低,盲猜是把youtube-dl和ffpmeg包装起来做成工具盈利。
想法
先申请一台国外的主机,windows的,再使用youtube-dl下载视频,然后通过百度云同步到磁盘,国内再用百度云同步一下
价格
腾讯云新加坡一台机器是300-400之间(每月),ucloud的新加坡设备是160多(一年),但是流量费用是单独计算的,一个GB是0.7元,这2个费用都太高了,承受不起。后来ucloud的客服联系我报价包年的服务器费用,新加坡的大概是5k不到,比腾讯云的新加坡的便宜一点。
换个策略
使用github actions下载,此作者已经实现,问题是如果不使用lfs,不能下载单文件超大的视频。
再换个策略
用github codespace下载视频传输到腾讯cos,使用cos客户端同步工具,同步文件夹,虽然这个也要钱,但是只有流量的费用,这个费用已经非常低了,可以承受,唯一的缺点就是github codespace的速度,这个好像不是github的问题,是youtube-dl的问题,跟它的下载机制有关系。所以我觉的最好的就是这种方式了。现在可以批量的搬运视频了。
测算一下一天最低搬运多少容量的视频(单线程情况),youtube-dl一秒是50kb左右,50x60x60x24/1024 /1024 = 4.1GB。使用python执行多线程并发下载,可以成倍提高速度,提高github codespace的时间使用效率。免费的空间一个月只有180个小时的时长。
我觉得这个方式可行,所以开发了yt_cos_batch,几个脚本,用来完成任务。
项目地址
常用的youtube-dl命令
## 下载1080p的视频文件,1080p的mp4文件是没有声音
python -m youtube_dl -f 137 --verbose https://www.youtube.com/watch?v=nqJfEK8yAUo
## 下载m4a音频文件,用于和1080p文件使用ffmpeg合并
python -m youtube_dl -x https://www.youtube.com/watch?v=nqJfEK8yAUo --verbose
## 如果视频有字幕就下载指定的字幕(未测试)
python -m youtube_dl -f 137 --verbose --sub-lang zh-Hant,en --write-sub --convert-subs srt https://www.youtube.com/watch?v=nqJfEK8yAUo
## 如果视频没有字幕,就下载生成的字幕
python -m youtube_dl -f 136 https://www.youtube.com/watch?v=nqJfEK8yAUo --write-auto-sub --skip-download
## 下载播放列表(未测试)
python -m youtube_dl -o ‘%(playlist)s/%(playlist_index)s – %(title)s.%(ext)s’ https://www.youtube.com/playlist?list=PLumqm-XDIBr1tduTDECpjF_l33IVupKAN
如何快速获取youtube的下载列表
播放列表的链接如下:
https://www.youtube.com/playlist?list=PLuskKJW0FhJcF-YxKIRj4IyGVjJEGEkSZ
打开chrome的控制台,复制下面代码,粘贴后回车,到chrome的下载里面得到links.txt文件
var links = [];
var anchorTags = document.getElementsByTagName('a');
for (var i = 0; i < anchorTags.length; i++) {
var href = anchorTags[i].getAttribute('href');
var id = anchorTags[i].getAttribute('id');
if (href && href.startsWith('/watch?v=') && id === 'video-title') {
links.push(href);
}
}
console.save = function(data, filename) {
if (!data) {
console.error('Console.save: No data specified');
return;
}
if (!filename) filename = 'console.txt';
if (typeof data === "object") {
data = JSON.stringify(data, undefined, 4);
}
var blob = new Blob([data], {type: 'text/plain'});
var e = document.createEvent('MouseEvents');
var a = document.createElement('a');
a.download = filename;
a.href = window.URL.createObjectURL(blob);
a.dataset.downloadurl = ['text/plain', a.download, a.href].join(':');
e.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
};
console.save(links, 'links.txt');
下载的1080p文件如何批量和m4a音频合并
yt_cos_batch 项目中有一个merge.py文件,使用这个脚本可以批量的合并视频文件和音频文件为新的mp4文件,本机需要安装ffmpeg环境,运行速度取决于电脑性能。
youtube-dl的其他参数
视频格式
| 251 | webm | audio only | tiny | 46k | webm_dash container, opus @ 46k (48000Hz), 7.32MiB |
|---|---|---|---|---|---|
| 140 | m4a | audio only | tiny | 129k | m4a_dash container, mp4a.40.2@129k (44100Hz), 20.51MiB |
| 160 | mp4 | 256x144 | 144p | 18k | mp4_dash container, avc1.4d400c@ 18k, 30fps, video only, 2.91MiB |
| 243 | webm | 640x360 | 360p | 54k | webm_dash container, vp9@ 54k, 30fps, video only, 8.68MiB |
| 134 | mp4 | 640x360 | 360p | 60k | mp4_dash container, avc1.4d401e@ 60k, 30fps, video only, 9.64MiB |
| 136 | mp4 | 1280x720 | 720p | 167k | mp4_dash container, avc1.64001f@ 167k, 30fps, video only, 26.58MiB |
| 137 | mp4 | 1920x1080 | 1080p | 309k | , mp4_dash container, avc1.640028@ 309k, 30fps, video only, 49.02MiB |
| 18 | mp4 | 640x360 | 360p | 153k | avc1.42001E, 30fps, mp4a.40.2 (44100Hz), 24.35MiB |
| 22 | mp4 | 1280x720 | 720p | 296k | avc1.64001F, 30fps, mp4a.40.2 (44100Hz) (best) |
字幕相关参数
--list-subs:列出可下載的所有字幕--write-sub:儲存字幕--write-auto-sub: 儲存自動翻譯的字幕,限 youtube 可以使用--embed-sub:將字幕合併至影片中,需搭配 –write-sub 參數使用--all-subs:下載所有字幕--sub-format:下載的字幕格式,如果原影片沒有指定的字幕格式會去下載其他格式的字幕--sub-lang:選擇要下載的字幕語言,用逗號分隔,例如:zh_TW,ja--convert-subs:將下載的字幕轉換成其他格式,目前支援 srt|ass|vtt|lrc