yt-dlp TUI - 给 yt-dlp 加一个终端界面

yt-dlp TUI - 给 yt-dlp 加一个终端界面

yt-dlp TUI

一个给 yt-dlp 做的终端用户界面。

yt-dlp 是一个强大的视频下载工具,但日常使用时经常会遇到一串琐碎操作:先记命令参数,查格式 ID,判断视频和音频是否需要合并,下载播放列表前还要想清楚哪些条目要保留。yt-dlp TUI 把这些步骤收进一个 Textual 界面里,让下载前的检查、选择和执行过程都更直观。

yt-dlp TUI 开始页面,包含 URL 输入、保存目录、格式列表和侧边栏导航

下载前先看清楚

Start 页面粘贴 URL 后,应用会先解析视频或播放列表信息。单个视频可以查看可用格式,并从 yt-dlp 返回的格式 ID 中选择需要的版本。遇到播放列表时,则可以先展开条目,勾选真正想下载的内容,再加入队列。

这一步很重要。很多下载任务并不是“把全部内容抓下来”这么简单,尤其是课程、合集、直播回放或包含重复条目的列表。先预览再入队,能减少下载后的清理成本。

处理视频和音频合并

很多站点会把高分辨率视频和音频分成不同流。直接选择一个纯视频格式时,如果没有额外处理,下载下来的文件可能没有声音。

yt-dlp TUI 会在适用时自动把纯视频格式组合成 FORMAT_ID+bestaudio/best,再交给 FFmpeg 合并。用户仍然可以选择格式,但不用每次都手写组合参数。

这个设计保留了 yt-dlp 的灵活性,也降低了常见错误的概率。

下载进度和日志

下载中的任务会集中显示在 Downloading 页面。界面里有文本进度条、速度、ETA,以及实时的 yt-dlp 原始输出。

yt-dlp TUI 下载中页面,显示任务进度、速度、ETA 和原始 yt-dlp 输出

我觉得保留原始输出是一个很实用的选择。TUI 可以让常规状态更容易扫一眼看懂,但遇到限速、解析失败、格式不可用或网络问题时,yt-dlp 自己的输出仍然是最可靠的诊断信息。

每个任务的日志也会写入应用的用户数据目录。完成、失败和中断任务会保存在每用户 JSON 历史记录里,之后可以打开已下载文件、在文件管理器中定位文件,或者复制文件路径。

中断后继续

下载任务很容易被网络、终端关闭或机器重启打断。

yt-dlp TUI 会记录中断任务,并在重启后把它们标记为失败。用户可以从 Completed 页面继续下载,底层使用的是 yt-dlp--continue 能力。

这里的处理方式比较朴素,但符合工具直觉:不假装中断任务仍在运行,也不丢掉它们,而是把恢复入口留在历史记录里。

独立管理下载引擎

项目还把 yt-dlp 和 FFmpeg 的安装、更新放进了设置流程。

用户可以在应用里从 GitHub 安装 yt-dlp,并选择 stablenightly 渠道。应用会在后台检查更新,发现新版本后提示处理。Windows 上还支持从 GitHub 安装 FFmpeg,用于自动合并分离的视频和音频流。

这让 TUI 应用和下载引擎保持相对独立:界面本身可以通过 PyPI 安装,而 yt-dlp 与 FFmpeg 可以按自己的节奏更新。

代理支持

下载工具绕不开网络环境问题。

yt-dlp TUI 支持配置可选的 HTTP(S) 代理,并把它用于引擎安装、更新检查、元数据解析和实际下载。这样代理配置不需要散落在命令行参数里,也不必每次手动输入。

技术栈

项目结构以 Python 终端应用为主:

  • 语言:Python 3.11+
  • TUI 框架:Textual
  • 下载引擎:yt-dlp
  • 媒体合并:FFmpeg
  • 包管理与开发:uv
  • 测试与检查:pytest、ruff
  • 数据记录:每用户 JSON 历史记录与任务日志

当前以 Windows 作为主要支持平台;FFmpeg 自动安装目前面向 Windows x64。

适合场景

我觉得它适合这些场景:

  • 经常使用 yt-dlp,但不想每次都手写完整命令
  • 下载前需要查看格式 ID、分辨率和可用流
  • 只想下载播放列表里的部分条目
  • 希望在终端里集中查看进度、速度、ETA 和原始日志
  • 希望独立安装和更新 yt-dlp、FFmpeg
  • 需要在下载和解析时统一配置 HTTP(S) 代理

和所有下载工具一样,它应该只用于你有权保存的内容。项目本身也明确说明:它与 yt-dlp 项目没有关联。

安装

推荐用 uvx 直接运行最新发布版本:

uvx yt-dlp-tui

也可以从 PyPI 安装:

pip install yt-dlp-tui
yt-dlp-tui

从源码运行:

git clone https://github.com/z4none/yt-dlp-tui.git
cd yt-dlp-tui
uv sync --all-groups
uv run yt-dlp-tui

本地开发检查:

uv sync --all-groups
uv run ruff check .
uv run pytest -q

链接

View project link