youtube批量下载 上传到腾讯云cos

需求

看到有些技术视频可以批量下载并上传到cos,通过腾讯云cos批量下载工具 CosBrowser,再分享到国内的平台

前情回顾

昨天在下载视频的时候,VPN的流量消耗的很快,一个月就80G,真的消耗不起,找一下别的方案。

Freemake Video Downloader(免费版客户端工具会带水印,升级需要付费)

4K 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,几个脚本,用来完成任务。

项目地址

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的其他参数

视频格式

251webmaudio onlytiny46kwebm_dash container, opus @ 46k (48000Hz), 7.32MiB
140m4aaudio onlytiny129km4a_dash container, mp4a.40.2@129k (44100Hz), 20.51MiB
160mp4256x144144p18kmp4_dash container, avc1.4d400c@ 18k, 30fps, video only, 2.91MiB
243webm640x360360p54kwebm_dash container, vp9@ 54k, 30fps, video only, 8.68MiB
134mp4640x360360p60kmp4_dash container, avc1.4d401e@ 60k, 30fps, video only, 9.64MiB
136mp41280x720720p167kmp4_dash container, avc1.64001f@ 167k, 30fps, video only, 26.58MiB
137mp41920x10801080p309k, mp4_dash container, avc1.640028@ 309k, 30fps, video only, 49.02MiB
18mp4640x360360p153kavc1.42001E, 30fps, mp4a.40.2 (44100Hz), 24.35MiB
22mp41280x720720p296kavc1.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

参考项目

如何使用youtube-dl

youtube-dl 模板


作者:spike

分类: Python

创作时间:2023-08-13

更新时间:2024-12-09

联系方式放在中括号之中例如[[email protected]],回复评论在开头加上标号例如:#1