alexta69/metube
运维与部署给 yt-dlp 提供自托管 Web 界面,把 YouTube 等站点的视频、音频、字幕和缩略图下载到自己的服务器。
项目介绍
MeTube 是 yt-dlp 的自托管 Web 前端。把 YouTube 或其他受支持站点的链接粘贴进网页,服务器就会把视频、音频、字幕和缩略图下载到你指定的目录。它支持单个视频、播放列表和整个频道,也能订阅频道或播放列表,新发布的内容会自动进入下载队列 Subscriptions 指南。
它面向希望在自有硬件上跑一个浏览器下载器、又不想每天记命令行参数的人。每次下载可以选画质、格式和目标文件夹,管理员则可以统一配置 yt-dlp 选项和命名预设。
快速使用
推荐用 Docker 部署。先准备一个存放下载文件的主机目录,然后启动镜像并映射端口和下载卷:
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
对应的 Compose 服务写法:
services:
metube:
image: ghcr.io/alexta69/metube
container_name: metube
restart: unless-stopped
ports:
- "8081:8081"
volumes:
- /path/to/downloads:/downloads
浏览器打开 http://<host>:8081,粘贴链接即可。镜像支持 amd64 和 arm64,同时在 Docker Hub 以 alexta69/metube 发布。启动前把 /path/to/downloads 换成真实的主机路径。
配置通过环境变量完成,docker run 用 -e NAME=value,Compose 写在 environment: 下。例如让每次下载都抓取英德字幕:
environment:
- 'YTDL_OPTIONS={"writesubtitles": true, "subtitleslangs": ["en", "de"], "updatetime": false}'
运行与权限
容器以 PUID/PGID 写文件,两者默认都是 1000,旧名 UID/GID 也有效。CHOWN_DIRS 默认开启,启动时把下载、状态和临时目录的所有者改为该用户;关掉它时该用户必须已有访问权限。UMASK 默认 022。
目录默认都在 /downloads 下:它同时是下载目录、下载过程中的临时目录,以及状态目录 /downloads/.metube 的父目录。状态目录保存队列、历史、订阅和上传的 cookies。AUDIO_DOWNLOAD_DIR 可以把纯音频下载单独存放,DOWNLOAD_DIR 可以整体改路径。把临时目录放在内存盘上速度更快,但中断的下载无法续传。
下载并发由 MAX_CONCURRENT_DOWNLOADS 控制,默认 3,多出的任务排队等待。输出文件名使用 yt-dlp 的输出模板,普通视频、播放列表条目、频道条目和按章节拆分各有默认模板 输出模板说明。
yt-dlp 选项与边界
yt-dlp 设置是 JSON 对象,键名用 yt-dlp 的 API 选项名而不是命令行参数名;项目提供了两者之间的转换脚本 选项名转换。设置分三层,越具体越优先:全局的 YTDL_OPTIONS 或 YTDL_OPTIONS_FILE、在高级选项里选择的命名预设、以及界面里针对单次下载的覆盖项。覆盖项默认关闭(ALLOW_YTDL_OPTIONS_OVERRIDES),因为开启后用户可以在容器里执行命令,文档限定只对可信用户开放 yt-dlp 选项指南。
项目有意只做下载,到此为止。打标签和媒体库整理交给 beets、MusicBrainz Picard 或 Lidarr 这类工具,把音频目录指过去即可 范围说明。
网络与安全
Web 服务默认监听 0.0.0.0:8081。HOST、PORT 和 URL_PREFIX 用于改绑定地址和反向代理子路径;配置 CERTFILE 和 KEYFILE 后也可以直接提供 HTTPS 反向代理示例。CORS_ALLOWED_ORIGINS 默认为空,浏览器扩展或书签脚本跨站调用 MeTube 时才需要设置 发送链接。
SSRF 防护默认开启。ALLOW_PRIVATE_ADDRESSES 会关闭它,只有 Fake-IP 类代理客户端需要,普通代理不需要 FAQ 说明。代码采用 AGPL-3.0 许可证。
保持 yt-dlp 更新
站点经常变动,yt-dlp 发布频繁。每个 yt-dlp 稳定版发布后都会自动构建新的 MeTube 镜像,因此需要定期更新容器;文档建议用 Watchtower 自动完成。设置 YTDL_NIGHTLY_UPDATE_TIME(HH:MM 格式)可以改用 yt-dlp 每夜构建,并在每天该时间升级和重启 README 相关段落。
故障排查
大多数下载失败是 yt-dlp 的问题,不是 MeTube 本身。推荐的排查方式是进入容器直接用 yt-dlp 跑同一个链接,再把可用的选项搬进 YTDL_OPTIONS:
docker exec -ti metube sh
cd /downloads
yt-dlp <url>
常见问题收在 Troubleshooting FAQ;提问去 Discussions,可复现的缺陷提交到 issues。
HotRepo 点评
HotRepo 没有该仓库的 GitHub 日榜名次或 Star 采样记录,能参考的只有讨论记录。2024 年 7 月的一篇 Hacker News 帖子获得 327 分、164 条评论 讨论帖,但讨论大多转向了相邻工具,而不是实测 MeTube:有人推荐用 Tube Archivist 做索引和全文搜索 评论,回复里有人更偏好 Pinchflat 的单容器部署 回复,还有人担心依赖数据库的归档工具不该让数据库比数据先消失 评论。也有人问下载器为什么需要服务器,回复指出本机或本地容器也可以充当服务器,桌面端另有替代品 评论。结合 README 来看,这些讨论把 MeTube 的定位框定为一个带订阅、只负责下载的 yt-dlp Web 外壳,而不是媒体库。数据口径说明:这些帖子发布于 2024 年,描述的可能是较早版本。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。