写在开头

   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 的用户 ID1000
GID运行 meTube 的组 ID1000
UMASKmeTube 使用的 umask 值022
DEFAULT_THEMEUI 的默认主题(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_PREFIXWeb 服务器的基本路径/
PUBLIC_HOST_URL完成文件的下载链接基础 URL本地 URL
HTTPS是否启用 HTTPS (需要证书文件和密钥文件)false
CERTFILEHTTPS 证书文件路径
KEYFILEHTTPS 密钥文件路径
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_TXTrobots.txt 文件路径


YTDL_OPTIONS && OUTPUT_TEMPLATE

  在 meTube 的环境变量配置中,YTDL_OPTIONSOUTPUT_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 工具添加视频的章节信息。

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文件夹下