公众号旧文

YouTube 下载站正式上线

作者:胖子阅读 —

折腾了一晚上,我把自己的 YouTube 下载站正式上线了:

https://youtube.19900429.xyz

图片

输入 YouTube 视频链接

点击下载按钮

等待几秒

直接下载 MP4 文件

无需安装软件,无需登录账号。

一、为什么要自己搭?

网上的下载站大多有几个问题:

第一种:广告太多

第二种:速度慢

第三种:说不准什么时候失效

所以我干脆自己搭一个

二、技术架构很简单

整个系统只有几个组件:

用户浏览器
      ↓
youtube.19900429.xyz
      ↓
Cloudflare Tunnel
      ↓
Flask
      ↓
yt-dlp
      ↓
YouTube

1、Flask 负责提供网页和 API

用户打开网页:

youtube.19900429.xyz

实际上访问的是 Flask。

2、yt-dlp 负责真正下载视频。

这是目前最强大的开源视频下载工具之一。

支持:

  • YouTube
  • Bilibili
  • Twitter(X)
  • Twitch
  • 数百个视频网站

我的站目前只开放 YouTube。

3、Cloudflare Tunnel 负责公网访问。

传统方案:

公网
 ↓
开放80端口
 ↓
Nginx
 ↓
Flask

而我的方案:

公网
 ↓
Cloudflare
 ↓
Tunnel
 ↓
Flask

服务器根本不用开放端口,安全性更高。

三、VPS 配置有多低?

这台机器只有:

1核 CPU
1GB 内存
5GB SSD

属于典型的乞丐版 VPS。

四、部署过程并不顺利

刚开始部署的时候:

Flask 正常、网页正常、API 正常,但 yt-dlp 一直卡住。

日志停留在:

[youtube] Downloading webpage

再也不往下走。

最开始怀疑:

  • Flask 有问题
  • yt-dlp 版本有问题
  • YouTube 接口变了
  • Cookie 失效

结果都不是。

最后通过 strace 定位发现是服务器 IPv6 出站异常。

yt-dlp 优先走 IPv6,连接一直超时。

于是程序看起来像死机一样。

最终解决方案只有一行:

--force-ipv4

问题瞬间消失。

用户输入链接:

https://www.youtube.com/watch?v=jNQXAC9IVRw

系统自动:

解析视频
↓
下载视频
↓
合并音视频
↓
生成MP4
↓
提供下载链接

整个过程自动完成。

五、目前有哪些限制?

1、单任务模式

同一时间只允许一个下载任务

这样不会把小 VPS 压垮。

2、自动清理

下载完成后 1 小时自动删除

避免磁盘被占满。

3、空间检查

剩余空间不足拒绝下载

保护服务器稳定运行。

六、这次最大的收获

不是下载站本身,而是完整体验了一次:

需求
↓
开发
↓
调试
↓
排错
↓
上线
↓
运维

的全过程。

最终系统变成:

用户浏览器
      ↓
youtube.19900429.xyz
      ↓
Cloudflare Tunnel
      ↓
cloudflared.service
      ↓
Flask
      ↓
yt-dlp
      ↓
YouTube

systemd
 ├─ cloudflared.service
 └─ ytdlp.service

重启服务器后自动恢复,无需人工干预。

结语

很多时候,一个看起来复杂的互联网服务,核心代码并不多。

真正耗费时间的往往是排错、定位、验证、优化,而不是写代码本身。