【Docker推荐】metube 视频下载

youtube-dl 的 Web GUI(使用yt-dlp fork)具有播放列表支持。允许您从 YouTube 和许多其他网站下载视频。

写在开头

   meTube 是一个开源的在线视频平台,旨在为用户提供一个简洁、快速、安全的 YouTube 视频下载和播放体验。

  Github项目地址 –> 链接直达


Docker 安装

使用Docker安装

1
docker run -d -p 8081:8081 -v /path/to/downloads:/downloads ghcr.io/alexta69/metube

使用Docker compose安装

1
2
3
4
5
6
7
8
9
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_OPTIONSOUTPUT_TEMPLATE 是两个非常重要的配置项,分别用于调整 youtube-dl 下载行为和设置文件名的生成规则。

YTDL_OPTIONS 示例

YTDL_OPTIONS:用于在 meTube 中为 youtube-dl 配置下载选项和后处理步骤,可以包括字幕语言、文件权限、视频格式转换等设置。

1
2
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:定义下载的视频文件命名规则,允许用户通过格式化字符串插入视频的元数据(如标题、上传者、日期等)来定制文件名。

1
2
3
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)。

最终的文件名可能会是如下格式:

1
PlaylistName by Uploader - 001 of 10 - Uploader - VideoTitle - 2024-12-01.mp4

使用

  
填写视频网站链接即可开始下载视频到服务器/download文件夹下