需自行安装并配置 FFmpeg,否则无法正常下载;pip 安装要求 Python 3.11 及以上;用 Docker 运行时下载路径需通过 -v :/app 挂载指定

pip install yutto
yutto <url>README 未说明硬件要求,仅要求 Python 3.11 及以上并配置好 FFmpeg
yutto 是命令行 B 站视频下载器,支持投稿、番剧、课程等资源下载
用 Python 写的 B 站视频下载器,支持番剧、弹幕和多线程异步下载,跨平台可用,适合批量保存视频和弹幕。
核心能力
- 支持 av/BV 号、ep 号及纯 id 直接定位资源
- 用 -b/--batch 批量下载系列视频、md/ss 页面
- 可列出并选择视频流与音频流清晰度
- 自动生成 ASS 弹幕文件
- 支持 yutto.toml 配置文件与大会员登录
容易踩的坑
- v2.3.1最新正式版2026-08-28 · 2026-08-28 14:22 UTC
What's Changed
- 🧑💻 dx: trace fetch request lifecycle by @SigureMo in https://github.com/yutto-dev/yutto/pull/825
- 🐛 fix: stabilize transient fetch failures by @SigureMo in https://github.com/yutto-dev/yutto/pull/826
- ♻️ refactor: remove unused runtime event annotation contract by @SigureMo in https://github.com/yutto-dev/yutto/pull/832
- ✨ feat: expose selected media over RPC by @xnne-bot in https://github.com/yutto-dev/yutto/pull/831
- ✨ feat: align PGC resolve metadata with CLI listings by @xnne-bot in https://github.com/yutto-dev/yutto/pull/830
- 🐛 fix: improve terminal width detection for wide characters by @RinoPaw in https://github.com/yutto-dev/yutto/pull/838
- ⚡ perf: reuse UGC view page metadata by @RinoPaw in https://github.com/yutto-dev/yutto/pull/840
New Contributors
- @RinoPaw made their first contribution in https://github.com/yutto-dev/yutto/pull/838
Full Changelog: https://github.com/yutto-dev/yutto/compare/v2.3.0...v2.3.1
- v2.3.02026-08-22 · 2026-08-22 08:01 UTC
查看更新说明
What's Changed
- 📝 docs: refine docs persona and fix outdated param references by @SigureMo in https://github.com/yutto-dev/yutto/pull/657
- 📝 docs: update README FFmpeg docs link by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/661
- :memo: docs: update Copilot CLI user id in
AGENTS.mdby @ShigureNyako in https://github.com/yutto-dev/yutto/pull/662 - 🐛 fix: improve favourite video naming and multi-page batch logging by @xnne-bot in https://github.com/yutto-dev/yutto/pull/668
- 💄 feat: smoothing the speed display by @SigureMo in https://github.com/yutto-dev/yutto/pull/672
- 🏷️ types: move to ty by @SigureMo in https://github.com/yutto-dev/yutto/pull/619
- 🐛 fix: retry on non-2xx response and catch MaxRetryError in space API by @duchengyao in https://github.com/yutto-dev/yutto/pull/705
- ⚰️ refactor!: drop python3.10 support by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/717
- 💬 chore: update default
User-Agentby @ShigureNyako in https://github.com/yutto-dev/yutto/pull/718 - ✨ feat: add EAC3 audio codec support with MKV output format by @Discreater in https://github.com/yutto-dev/yutto/pull/724
- 📝 docs: remove bilili migration guide by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/727
- 👷 ci: parallelize latest release smoke tests by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/732
- 👷 ci: isolate latest release smoke test temp dirs by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/733
- 🔨 chore: move docs pnpm peer rules to workspace config by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/736
- 👷 ci: skip CodSpeed benchmarks on forks by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/737
- 🔧 chore: migrate pytest config to native TOML by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/741
- ⚡ perf: resolve batch ugc video lists concurrently by @xnne-bot in https://github.com/yutto-dev/yutto/pull/743
- ✨ feat: decouple the download core and add an experimental server mode by @SigureMo in https://github.com/yutto-dev/yutto/pull/748
- 🐛 fix: auto transcode audio for mp3/flac audio-only output by @MrXnneHang in https://github.com/yutto-dev/yutto/pull/756
- ✨ feat: add resolve verb and experimental resolve.start RPC by @MrXnneHang in https://github.com/yutto-dev/yutto/pull/757
- ✨ feat: stream item_listed while batch extraction is still running by @MrXnneHang in https://github.com/yutto-dev/yutto/pull/758
- ♻️ refactor: defer coroutine creation by @SigureMo in https://github.com/yutto-dev/yutto/pull/761
- ♻️ refactor: make resolve outcomes explicit by @SigureMo in https://github.com/yutto-dev/yutto/pull/762
- ♻️ refactor: replace aobject with explicit async factory by @SigureMo in https://github.com/yutto-dev/yutto/pull/763
- ♻️ refactor: unify request execution context by @SigureMo in https://github.com/yutto-dev/yutto/pull/770
- 🐛 fix: deduplicate CLI auth announcements by @SigureMo in https://github.com/yutto-dev/yutto/pull/771
- ♻️ refactor: canonicalize listing snapshots by @SigureMo in https://github.com/yutto-dev/yutto/pull/772
- ♻️ refactor: establish presentation boundary by @SigureMo in https://github.com/yutto-dev/yutto/pull/773
- ♻️ refactor: split download planning and execution by @SigureMo in https://github.com/yutto-dev/yutto/pull/774
- 🐛 fix: reap competing media size probes by @SigureMo in https://github.com/yutto-dev/yutto/pull/775
- ✨ feat: support abi3t wheels by @SigureMo in https://github.com/yutto-dev/yutto/pull/776
- 🧪 test: lock downloader migration contracts by @SigureMo in https://github.com/yutto-dev/yutto/pull/782
- ✨ feat: add bounded Haya downloader core by @SigureMo in https://github.com/yutto-dev/yutto/pull/783
- ✨ feat: add Haya HTTP and file adapters by @SigureMo in https://github.com/yutto-dev/yutto/pull/784
- ✨ feat: add experimental yutto-core backend by @SigureMo in https://github.com/yutto-dev/yutto/pull/785
- ♻️ refactor: make Haya the only me
- [email protected]2026-08-01 · 2026-08-01 19:04 UTC
查看更新说明
What's Changed
- ⚰️ refactor!: drop python3.10 support by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/717
- ✨ feat: support abi3t wheels by @SigureMo in https://github.com/yutto-dev/yutto/pull/776
Full Changelog: https://github.com/yutto-dev/yutto/compare/[email protected]@2.5.0
- [email protected]2026-06-13 · 2026-06-13 15:50 UTC
查看更新说明
What's Changed
- ⚡ perf(biliass): optimize biliass hot-path allocations by @SigureMo in https://github.com/yutto-dev/yutto/pull/658
- 🐛 fix(biliass): add trailing
&to\alphaoverride tag in ASS output by @Copilot in https://github.com/yutto-dev/yutto/pull/659
Full Changelog: https://github.com/yutto-dev/yutto/compare/[email protected]@2.4.0
- v2.2.02026-03-28 · 2026-03-28 13:28 UTC
查看更新说明
What's Changed
- 👷 ci: update benchmark mode to simulation and switch to python 3.14 by @SigureMo in https://github.com/yutto-dev/yutto/pull/613
- ✨ feat: add check for encrypted audio by @SigureMo in https://github.com/yutto-dev/yutto/pull/624
- 🏷️ types: update return types to use TypedDicts for bangumi, cheese, and ugc_video APIs by @SigureMo in https://github.com/yutto-dev/yutto/pull/626
- ✨ feat: support save auth info via
yutto loginby @SigureMo in https://github.com/yutto-dev/yutto/pull/642 - :recycle: refactor: adopt PEP 639 license metadata by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/647
- ♻️ refactor: use vite+ by @SigureMo in https://github.com/yutto-dev/yutto/pull/648
- 🔥 refactor!: remove MCP support by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/650
- 🛠️ workflow: add copilot setup steps and agent guide by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/652
- ♻️ refactor: align auth/login shared flow after #642 by @ShigureNyako in https://github.com/yutto-dev/yutto/pull/651
- ✨ feat: redesign auth CLI commands by @SigureMo in https://github.com/yutto-dev/yutto/pull/655
- 📝 docs: add video download skill and enhance auth handling by @SigureMo in https://github.com/yutto-dev/yutto/pull/656
New Contributors
- @ShigureNyako made their first contribution in https://github.com/yutto-dev/yutto/pull/647
Full Changelog: https://github.com/yutto-dev/yutto/compare/v2.1.1...v2.2.0
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
yutto
完整静态文档在这里喔 → yutto
[!TIP]
如果在使用过程中遇到问题,请通过 Issues 反馈功能正确性问题和功能请求,其他问题请通过 Discussions 反馈~
什么是 yutto?
yutto 是一个 B 站视频下载器,它可以帮助你下载 B 站上的投稿视频、番剧、课程等资源,支持单个视频下载、批量下载等功能,就像这样:
❯ yutto https://www.bilibili.com/video/BV1CTMHziEaB/
INFO 发现配置文件 yutto.toml,加载中……
大会员 成功以大会员身份登录~
投稿视频 《原神》动画短片——「尘间星旅」
INFO 开始处理视频 《原神》动画短片——「尘间星旅」
INFO 共包含以下 15 个视频流:
INFO * 0 [AVC ] [1920x1080] <1080P 高码率> #3
INFO 1 [HEVC] [1920x1080] <1080P 高码率> #3
INFO 2 [AV1 ] [1920x1080] <1080P 高码率> #3
INFO 3 [AVC ] [1920x1080] <1080P 高清> #3
INFO 4 [HEVC] [1920x1080] <1080P 高清> #3
INFO 5 [AV1 ] [1920x1080] <1080P 高清> #3
INFO 6 [AVC ] [1280x720 ] <720P 准高清> #3
INFO 7 [HEVC] [1280x720 ] <720P 准高清> #3
INFO 8 [AV1 ] [1280x720 ] <720P 准高清> #3
INFO 9 [AVC ] [ 852x480 ] <480P 标清 > #3
INFO 10 [HEVC] [ 852x480 ] <480P 标清 > #3
INFO 11 [AV1 ] [ 852x480 ] <480P 标清 > #3
INFO 12 [AVC ] [ 640x360 ] <360P 流畅 > #3
INFO 13 [HEVC] [ 640x360 ] <360P 流畅 > #3
INFO 14 [AV1 ] [ 640x360 ] <360P 流畅 > #3
INFO 共包含以下 3 个音频流:
INFO * 0 [MP4A] <320kbps >
INFO 1 [MP4A] < 64kbps >
INFO 2 [MP4A] <128kbps >
弹幕 ASS 弹幕已生成
INFO 开始下载……
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╸━━━━ 49.25 MiB/ 54.30 MiB 32.22 MiB/⚡
从安装开始~
包管理器一键安装啦
目前 yutto 已经可以通过部分包管理器直接安装~
使用 Homebrew 的用户可以尝试下下面的命令:
brew tap siguremo/tap
brew install yutto
Arch Linux 用户可以从 AUR(感谢 @ouuan)或 archlinuxcn 安装:
# 从 AUR 安装
yay -S yutto # 适用于 yay 用户
paru -S yutto # 适用于 paru 用户
# 或者从 archlinuxcn 安装
sudo pacman -S yutto
使用 Docker
你也可以尝试使用 docker 直接运行 yutto(具体如何运行需要参考下后面的内容~)
docker run --rm -it -v /path/to/download:/app siguremo/yutto <url> [options]
与直接运行 yutto 不同的是,这里的下载目标路径是通过 -v <path>:/app 指定的,也就是说 docker 里的 yutto 会将内容下载到 docker 里的 /app 目录下,与之相对应的挂载点 <path> 就是下载路径。你也可以直接挂载到 $(pwd),此时就和本机 yutto 的默认行为一致啦,也是下载到当前目录下~
pip/pipx/uv 安装
[!TIP]
在此之前请确保安装 Python3.11 及以上版本,并配置好 FFmpeg(参照 yutto 文档的“FFmpeg 下载与配置”)
pip install yutto
当然,你也可以通过 pipx/uv 来安装 yutto(当然,前提是你要自己先安装它)
pipx install yutto # 使用 pipx
uv tool install yutto # 或者使用 uv
pipx/uv 会类似 Homebrew 无感地为 yutto 创建一个虚拟环境,与其余环境隔离开,避免污染 pip 的环境,因此相对于 pip,pipx/uv 是更推荐的安装方式(uv 会比 pipx 更快些~)。
体验 main 分支最新特性
[!TIP]
这同样要求你自行配置 Python 和 FFmpeg 环境
有些时候有一些在 main 分支还没有发布的新特性或者 bugfix,你可以尝试直接安装 main 分支的代码,最快的方式仍然是通过 pip 安装,只不过需要使用 git 描述符
pip install git+https://github.com/yutto-dev/yutto@main # 通过 pip
pipx install git+https://github.com/yutto-dev/yutto@main # 通过 pipx
uv tool install git+https://github.com/yutto-dev/yutto.git@main # 通过 uv
主要功能
基本命令
yutto 的基本命令如下:
yutto <url>
你可以通过 yutto -h 查看详细命令参数。
如果你需要下载单个视频,只需要使用 yutto 加上这个视频的地址即可。它支持 av/BV 号以及相应带 p=n 参数的投稿视频页面,也支持 ep 号(episode_id)的番剧页面。
比如只需要这样你就可以下载《転スラ日記》第一话:
yutto https://www.bilibili.com/bangumi/play/ep395211
yutto 还支持直接使用能够唯一定位资源的 id 来作为 <url>,刚刚的功能与下面的简化后的命令功能是完全一样的
yutto ep395211
不过有时你可能想要批量下载很多剧集,因此 yutto 提供了用于批量下载的参数 -b/--batch,它不仅支持前面所说的单个视频所在页面地址(会解析该单个视频所在的系列视频),还支持一些明确用于表示系列视频的地址,比如 md 页面(media_id)、ss 页面(season_id)。
比如像下面这样就可以下载《転スラ日記》所有已更新的剧集:
yutto --batch https://www.bilibili.com/bangumi/play/ep395211
更多功能
yutto 还支持很多功能,限于篇幅不在 README 中展示,你可以前往 yutto 文档 查看更多详细内容~
Agent skill
如果你有趁手的 Agent,你也可以通过如下命令来安装 yutto 的 skill:
npx skills add https://github.com/yutto-dev/yutto --skill bilibili-video-download
其他应用
你也可以通过这些应用来使用 yutto
- KubeSpider: 一个多功能全局资源编排下载系统,支持下载、订阅各类资源网站~
Roadmap
2.0.0
- feat: 支持弹幕字体、字号、速度等设置
- feat: 配置文件支持
- feat: 配置文件功能优化,支持自定义配置路径
- docs: issue template 添加配置引导
- docs: 优化 biliass rust 重构后的贡献指南
future
- docs: 可爱的静态文档(WIP in #86)
- feat: 新的基于 toml 的任务列表
- refactor: 配置参数复用 pydantic 验证
- refactor: 针对视频合集优化路径变量
- refactor: 优化杜比视界/音效/全景声选取逻辑(Discussing in #62)
- refactor: 直接使用 rich 替代内置的终端显示模块
- feat: 更多批下载支持
- feat: 以及更加可爱~
参与贡献
请阅读 CONTRIBUTING.md