公众号旧文
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
重启服务器后自动恢复,无需人工干预。
结语
很多时候,一个看起来复杂的互联网服务,核心代码并不多。
真正耗费时间的往往是排错、定位、验证、优化,而不是写代码本身。