写在开头
meTube
是一个开源的在线视频平台,旨在为用户提供一个简洁、快速、安全的 YouTube 视频下载和播放体验。
Github项目地址 --> 链接直达
Docker 安装
使用Docker安装
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube
使用Docker compose安装
services:
metube:
image: ghcr.io/alexta69/metube
container_name: metube
restart: unless-stopped
ports:
- "8081:8081"
volumes:
- ./downloads:/downloads
主要环境变量
环境变量 | 描述 | 默认值 |
---|---|---|
UID | 运行 meTube 的用户 ID | 1000 |
GID | 运行 meTube 的组 ID | 1000 |
UMASK | meTube 使用的 umask 值 | 022 |
DEFAULT_THEME | UI 的默认主题(light、dark 或 auto) | auto |
DOWNLOAD_DIR | 视频下载存储路径 | /downloads (Docker 镜像中) |
AUDIO_DOWNLOAD_DIR | 音频文件下载存储路径 | DOWNLOAD_DIR |
DOWNLOAD_DIRS_INDEXABLE | 是否允许下载目录在 Web 服务器上被索引 | false |
CUSTOM_DIRS | 是否启用自定义下载目录 | true |
CREATE_CUSTOM_DIRS | 是否允许自动创建不存在的目录 | true |
STATE_DIR | 队列持久化文件的存储路径 | /downloads/.metube (Docker) |
TEMP_DIR | 中间下载文件的存储路径 | /downloads (Docker 镜像中) |
DELETE_FILE_ON_TRASHCAN | 是否在从 UI 删除已下载文件时删除服务器上的文件 | false |
URL_PREFIX | Web 服务器的基本路径 | / |
PUBLIC_HOST_URL | 完成文件的下载链接基础 URL | 本地 URL |
HTTPS | 是否启用 HTTPS (需要证书文件和密钥文件) | false |
CERTFILE | HTTPS 证书文件路径 | 无 |
KEYFILE | HTTPS 密钥文件路径 | 无 |
PUBLIC_HOST_AUDIO_URL | 音频下载文件的下载链接基础 URL | 本地 URL |
OUTPUT_TEMPLATE | 视频下载文件的文件名模板 | %(title)s.%(ext)s |
OUTPUT_TEMPLATE_CHAPTER | 分章下载文件的文件名模板 | %(title)s - %(section_number)s %(section_title)s.%(ext)s |
OUTPUT_TEMPLATE_PLAYLIST | 播放列表下载文件的文件名模板 | %(playlist_title)s/%(title)s.%(ext)s |
DEFAULT_OPTION_PLAYLIST_STRICT_MODE | 是否默认启用严格播放列表模式 | false |
DEFAULT_OPTION_PLAYLIST_ITEM_LIMIT | 播放列表下载项目的最大数量 | 0(无上限) |
YTDL_OPTIONS | 传递给 youtube-dl 的额外选项,格式为 JSON | 无 |
YTDL_OPTIONS_FILE | 加载的 YTDL_OPTIONS JSON 文件路径 | 无 |
ROBOTS_TXT | robots.txt 文件路径 | 无 |
YTDL_OPTIONS && OUTPUT_TEMPLATE
在 meTube
的环境变量配置中,YTDL_OPTIONS
和 OUTPUT_TEMPLATE
是两个非常重要的配置项,分别用于调整 youtube-dl 下载行为和设置文件名的生成规则。
YTDL_OPTIONS
示例
YTDL_OPTIONS
:用于在 meTube
中为 youtube-dl
配置下载选项和后处理步骤,可以包括字幕语言、文件权限、视频格式转换等设置。
environment:
- 'YTDL_OPTIONS={"writesubtitles":true,"subtitleslangs":["en","-live_chat"],"updatetime":false,"postprocessors":[{"key":"Exec","exec_cmd":"chmod 0664","when":"after_move"},{"key":"FFmpegEmbedSubtitle","already_have_subtitle":false},{"key":"FFmpegMetadata","add_chapters":true}]}'
解释:
- writesubtitles: true:启用下载视频的字幕。
- subtitleslangs: ["en", "-live_chat"]:下载英文字幕,并排除 "live_chat"(直播聊天)字幕,
-
用于排除特定的字幕。 - updatetime: false:下载视频时不更新文件的修改时间。
postprocessors:定义了下载后的处理步骤:
- Exec:执行一个命令,这里指定了在文件移动后执行
chmod 0664
命令来修改文件权限。 - FFmpegEmbedSubtitle:如果视频已经有字幕,且未嵌入字幕,则使用 FFmpeg 工具将字幕嵌入到视频中。
- FFmpegMetadata:使用 FFmpeg 工具添加视频的章节信息。
- Exec:执行一个命令,这里指定了在文件移动后执行
OUTPUT_TEMPLATE
示例
OUTPUT_TEMPLATE
:定义下载的视频文件命名规则,允许用户通过格式化字符串插入视频的元数据(如标题、上传者、日期等)来定制文件名。
environment:
- 'OUTPUT_TEMPLATE=%(playlist_title&Playlist |)S%(playlist_title|)S%(playlist_uploader& by |)S%(playlist_uploader|)S%(playlist_autonumber& - |)S%(playlist_autonumber|)S%(playlist_count& of |)S%(playlist_count|)S%(playlist_autonumber& - |)S%(uploader,creator|UNKNOWN_AUTHOR)S - %(title|UNKNOWN_TITLE)S - %(release_date>%Y-%m-%d,upload_date>%Y-%m-%d|UNKNOWN_DATE)S.%(ext)s'
解释:
- %(playlist_title|):如果视频属于一个播放列表,则使用播放列表的标题。如果没有播放列表,则不显示任何内容。
|
后面的内容表示默认值。 - %(playlist_uploader& by |):如果播放列表有上传者信息,则在上传者名称前加上 "by"。如果没有上传者信息,则什么也不显示。
- %(playlist_autonumber& - |):如果视频属于播放列表并有自动编号,则在编号前加上一个连字符 " - "。
- %(uploader,creator|UNKNOWN_AUTHOR):如果有上传者信息,则使用上传者的名字;否则使用 "UNKNOWN_AUTHOR"。
- %(title|UNKNOWN_TITLE):如果视频有标题,则使用视频标题;否则使用 "UNKNOWN_TITLE"。
- %(release_date>%Y-%m-%d,upload_date>%Y-%m-%d|UNKNOWN_DATE):如果视频有发布日期,则使用该日期(格式为
YYYY-MM-DD
)。如果没有发布日期,则使用上传日期。如果两者都没有,则显示 "UNKNOWN_DATE"。 - %(ext)s:视频的扩展名(如
.mp4
或.mkv
)。
最终的文件名可能会是如下格式:
PlaylistName by Uploader - 001 of 10 - Uploader - VideoTitle - 2024-12-01.mp4
使用
填写视频网站链接即可开始下载视频到服务器/download
文件夹下