搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

alexta69/metube

运维与部署

给 yt-dlp 提供自托管 Web 界面,把 YouTube 等站点的视频、音频、字幕和缩略图下载到自己的服务器。

15,211
1,137
Python
AGPL-3.0
创建于 6 年前

项目介绍

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 生成,更新于 ,以项目官方文档为准。

Hacker News 讨论

MeTube: Self-hosted YouTube downloader
▲ 327 · 164 条评论 · 2024年7月29日
Metube: Self-Hosted YouTube Downloader
▲ 2 · 0 条评论 · 2024年3月3日