| 功能 | 说明 |
|---|---|
| 🌍 跨平台支持 | Windows、macOS、Linux 全平台支持 |
| 🎥 多平台下载 | 哔哩哔哩(普通视频、番剧、课程、直播回放) |
| ⚡ 高速下载 | 多线程分块下载 + Aria2c 支持 |
| 🎨 智能流选择 | 自动选择最佳视频和音频流 |
| 🔐 认证支持 | 二维码登录(Web/TV)、Cookie、Access Token |
| 📦 批量下载 | 收藏夹、UP主空间、合集、系列 |
点击展开查看完整功能列表
- ✅ 多分P视频支持(支持选择特定分P或范围)
- ✅ 自动混流(FFmpeg / MP4Box)
- ✅ 支持 AVC/HEVC/AV1 编码
- ✅ 杜比视界和杜比全景声支持
- ✅ Hi-Res 无损音频(FLAC)支持
- ✅ 清晰度和编码格式优先级设置
- ✅ 交互式清晰度选择模式
- ✅ 章节信息提取和嵌入
- ✅ 字幕下载和转换(JSON → SRT)
- ✅ 弹幕下载(XML/ASS 格式)
- ✅ 封面图片下载
- ✅ 番剧下载(ep/ss 链接)
- ✅ 课程下载(cheese 链接)
- ✅ 二维码登录(Web端和TV端)
- ✅ Cookie 认证支持(下载会员内容)
- ✅ TV/APP API 支持(无水印片源)
- ✅ 国际版 API 支持
- ✅ 灵活的配置文件支持(TOML格式)
- ✅ 自定义输出文件名模板
- ✅ 详细的下载进度显示
- ✅ FFmpeg 版本检测(杜比视界兼容性)
- ✅ 内置多线程下载器
- ✅ Aria2c 下载支持(更快的下载速度)
- ✅ 模块化、可扩展的架构
- ✅ 异步 I/O 高性能设计
- ⬜ MP4Box 混流支持(完整实现)
- ⬜ 更多视频平台支持(YouTube、爱奇艺等)
- ⬜ GUI 界面
- ⬜ 下载队列管理
从 GitHub Releases 下载适合你系统的预编译版本:
- Windows:
rvd-x86_64-pc-windows-msvc.zip - macOS:
rvd-x86_64-apple-darwin.tar.gz/rvd-aarch64-apple-darwin.tar.gz - Linux:
rvd-x86_64-unknown-linux-gnu.tar.gz
下载后解压并将可执行文件添加到系统 PATH。
cargo install rvd方式三:从源码编译
- Rust 1.70 或更高版本
- Git
# 克隆仓库
git clone https://github.com/SpenserCai/rust-video-downloader.git
cd rust-video-downloader
# 编译发布版本
cargo build --release
# 可执行文件位于 target/release/rvdcargo install --path .RVD 需要 FFmpeg 来进行视频混流。请确保已安装:
| 平台 | 安装命令 |
|---|---|
| macOS | brew install ffmpeg |
| Ubuntu/Debian | sudo apt install ffmpeg |
| Windows | 从 FFmpeg 官网 下载 |
💡 提示: 如果需要杜比视界支持,建议使用 FFmpeg 5.0 或更高版本
# 1. 从 GitHub Releases 下载最新版本(推荐)
# 访问: https://github.com/SpenserCai/rust-video-downloader/releases
# 下载适合你系统的预编译版本并解压
# 或使用 cargo 安装
cargo install rvd
# 2. 下载你的第一个视频
rvd "https://www.bilibili.com/video/BV1xx411c7mD"
# 3. 完成!视频已下载到当前目录下载单个视频(使用默认设置):
# 使用完整 URL
rvd "https://www.bilibili.com/video/BV1xx411c7mD"
# 或直接使用 BV 号
rvd BV1xx411c7mD
# 或使用 av 号
rvd av170001🎯 指定清晰度和编码
指定清晰度优先级(按顺序尝试):
rvd BV1xx411c7mD -q "1080P,720P,480P"指定编码格式优先级:
rvd BV1xx411c7mD -c "hevc,avc,av1"同时指定清晰度和编码:
rvd BV1xx411c7mD -q "1080P,720P" -c "hevc,avc"🖱️ 交互式选择
使用交互式模式手动选择清晰度和编码:
rvd BV1xx411c7mD -i程序会列出所有可用的视频流和音频流供你选择。
📑 下载特定分P
# 下载第 1 个分P
rvd BV1xx411c7mD -p 1
# 下载多个分P
rvd BV1xx411c7mD -p "1,2,5"
# 下载分P范围
rvd BV1xx411c7mD -p "1-5"
# 下载所有分P
rvd BV1xx411c7mD -p ALL🔐 二维码登录(推荐)
RVD 支持通过扫描二维码登录获取认证凭证,无需手动复制Cookie。
# 临时登录
rvd --login-qrcode
# 保存凭证以供后续使用
rvd --login-qrcode --config-file config.toml登录成功后,凭证会保存到 auth.toml 文件中。
TV端登录可以获取无水印片源:
rvd --login-tv --config-file config.toml| 平台 | 显示方式 |
|---|---|
| Unix/Linux/macOS | 终端中以彩色方块显示 |
| Windows PowerShell | Unicode字符显示 |
| 备选方案 | 保存为 qrcode.png 图片文件 |
- 程序生成二维码并显示在终端
- 使用哔哩哔哩手机APP扫描二维码
- 在手机上确认登录
- 程序自动获取凭证并保存(如果指定了配置文件)
🔑 手动认证
除了二维码登录,也可以手动提供认证信息。
使用 Cookie:
rvd BV1xx411c7mD --cookie "SESSDATA=your_sessdata_here"使用 Access Token(用于 TV/APP API):
rvd BV1xx411c7mD --access-token "your_token_here"💡 提示: 认证信息也可以保存在配置文件中,避免每次输入。
📁 自定义输出路径
rvd BV1xx411c7mD -o "downloads/<videoTitle>.mp4"| 变量 | 说明 | 示例 |
|---|---|---|
<videoTitle> |
视频标题 | "我的视频" |
<pageNumber> |
分P编号 | "1" |
<pageNumberWithZero> |
分P编号(补零) | "01" |
<pageTitle> |
分P标题 | "第一集" |
<quality> |
清晰度 | "1080P 高清" |
<codec> |
编码格式 | "AVC" |
<uploader> |
UP主名称 | "UP主" |
<uploaderMid> |
UP主 mid | "123456" |
<bvid> |
BV号 | "BV1xx411c7mD" |
<cid> |
视频 cid | "123456" |
<date> |
上传日期 | "2024-01-01" |
# 单P视频
rvd BV1xx411c7mD -o "<videoTitle>_<quality>.mp4"
# 多P视频(自动创建文件夹)
rvd BV1xx411c7mD -o "<videoTitle>/P<pageNumberWithZero>_<pageTitle>.mp4"
# 按UP主分类
rvd BV1xx411c7mD -o "<uploader>/<videoTitle>.mp4"⚙️ 其他常用选项
rvd BV1xx411c7mD --info-only# 跳过字幕下载
rvd BV1xx411c7mD --skip-subtitle
# 跳过封面下载
rvd BV1xx411c7mD --skip-cover
# 跳过混流(保留分离的视频和音频文件)
rvd BV1xx411c7mD --skip-muxrvd BV1xx411c7mD -t 8rvd BV1xx411c7mD -vrvd BV1xx411c7mD --ffmpeg-path /path/to/ffmpeg⚡ 使用 Aria2c 加速下载
Aria2c 是一个强大的下载工具,通常比内置下载器更快,特别是对于大文件。
| 平台 | 安装命令 |
|---|---|
| macOS | brew install aria2 |
| Ubuntu/Debian | sudo apt install aria2 |
| Windows | 从 aria2 官网 下载 |
# 启用 aria2c 下载
rvd BV1xx411c7mD --use-aria2c
# 指定 aria2c 路径(如果不在 PATH 中)
rvd BV1xx411c7mD --use-aria2c --aria2c-path /path/to/aria2c
# 自定义参数(例如减少连接数以避免被限速)
rvd BV1xx411c7mD --use-aria2c --aria2c-args "-x8 -s8 -j8"| 参数 | 说明 |
|---|---|
-x16 |
每个服务器最多16个连接 |
-s16 |
分割成16个部分下载 |
-j16 |
最多同时下载16个文件 |
-k5M |
最小分割大小5MB |
[aria2c]
enabled = true
# path = "/usr/local/bin/aria2c" # 可选
# args = "-x8 -s8 -j8" # 可选配置文件说明
RVD 支持使用配置文件来设置默认选项。配置文件使用 TOML 格式。
RVD 会按以下顺序查找配置文件:
- 当前目录的
rvd.toml ~/.config/rvd/config.toml
你也可以使用 --config-file 参数指定配置文件路径。
创建 rvd.toml:
# 默认清晰度优先级
default_quality = ["1080P", "720P", "480P"]
# 默认编码优先级
default_codec = ["hevc", "avc", "av1"]
# 下载线程数
thread_count = 8
# 单P视频输出文件名模板
output_template = "<videoTitle>_<quality>"
# 多P视频输出文件名模板
multi_output_template = "<videoTitle>/P<pageNumberWithZero>_<pageTitle>"
# 认证信息(也可以使用独立的 auth.toml 文件)
[auth]
cookie = "SESSDATA=your_sessdata_here"
# access_token = ""
# refresh_token = ""
# expires_at = 1234567890
# mid = 123456
# 外部工具路径
[paths]
ffmpeg = "/usr/local/bin/ffmpeg"
# Aria2c 下载配置(可选)
[aria2c]
enabled = false
# path = "/usr/local/bin/aria2c"
# args = "-x8 -s8 -j8"💡 提示: 配置文件中的设置会被命令行参数覆盖。
使用二维码登录后,凭证会保存到独立的 auth.toml 文件中:
# 认证凭证文件
# 警告:此文件包含敏感信息,请勿分享或提交到版本控制系统
cookie = "SESSDATA=xxx; bili_jct=xxx; DedeUserID=xxx; DedeUserID__ckMd5=xxx; sid=xxx"
access_token = "xxx" # TV/APP 登录时使用
refresh_token = "xxx" # 用于刷新 access_token
expires_at = 1234567890 # 过期时间戳(可选)
mid = 123456 # 用户ID(可选)- Unix/Linux/macOS系统上,
auth.toml文件权限会自动设置为0600(仅所有者可读写) - 建议将
auth.toml添加到.gitignore中,避免意外提交 - 凭证有效期通常为几个月,过期后需要重新登录
📺 下载番剧和课程
# 通过 ep 链接下载单集
rvd "https://www.bilibili.com/bangumi/play/ep123456"
# 通过 ss 链接下载整季
rvd "https://www.bilibili.com/bangumi/play/ss12345"
# 下载特定集数
rvd ep123456 -p "1,2,3"rvd "https://www.bilibili.com/cheese/play/ep123456"📦 批量下载
# 下载收藏夹中的所有视频
rvd "https://space.bilibili.com/{mid}/favlist?fid={fav_id}"
# 下载UP主空间的所有视频
rvd "https://space.bilibili.com/{mid}"
# 下载合集
rvd "https://www.bilibili.com/medialist/play/ml{media_id}"
# 下载系列
rvd "https://space.bilibili.com/{mid}/channel/seriesdetail?sid={series_id}"💬 下载弹幕
# 下载 ASS 格式弹幕(默认,可直接嵌入视频)
rvd BV1xx411c7mD --download-danmaku
# 下载 XML 格式弹幕(原始格式)
rvd BV1xx411c7mD --download-danmaku --danmaku-format xml🔌 使用不同 API 模式
# 使用 TV API(获取无水印片源)
rvd BV1xx411c7mD --use-tv-api
# 使用 APP API(支持杜比音频)
rvd BV1xx411c7mD --use-app-api
# 使用国际版 API
rvd BV1xx411c7mD --use-intl-api🎬 杜比视界和杜比全景声支持
RVD 支持下载杜比视界(Dolby Vision)视频和杜比全景声(Dolby Atmos)音频,以及 Hi-Res 无损音频(FLAC)。
当视频包含杜比音视频流时,RVD 会自动识别并在流选择时显示:
rvd BV1xx411c7mD -q "杜比视界,4K 超清,1080P"| 格式 | Quality ID | 说明 |
|---|---|---|
| 杜比视界 | 126 | 需要支持 HDR 的显示器 |
| HDR 真彩 | 125 | HDR10 格式 |
| E-AC-3 (Dolby) | - | 杜比全景声音频 |
| FLAC (Hi-Res) | - | 无损音频 |
⚠️ 重要: 杜比视界需要 FFmpeg 5.0 或更高版本才能正确处理元数据。
检查 FFmpeg 版本:
ffmpeg -version如果版本低于 5.0,RVD 会显示警告并建议升级。
| 平台 | 升级命令 |
|---|---|
| macOS | brew upgrade ffmpeg |
| Ubuntu/Debian | sudo add-apt-repository ppa:savoury1/ffmpeg5 && sudo apt update && sudo apt install ffmpeg |
| Windows | 从 FFmpeg 官网 下载最新版本 |
如果无法升级 FFmpeg,可以使用 MP4Box 进行混流:
rvd BV1xx411c7mD --use-mp4box📝 注意: MP4Box 的完整集成仍在开发中。
# 下载杜比视界视频
rvd BV1xx411c7mD -q "杜比视界,4K 超清,1080P"
# 使用 TV API 获取更高质量的流
rvd BV1xx411c7mD --use-tv-api -q "杜比视界"
# 下载杜比全景声音频
rvd BV1xx411c7mD -c "E-AC-3,FLAC,M4A"
# 交互式选择(可以看到所有可用的音视频流)
rvd BV1xx411c7mD -i点击查看完整参数列表
rvd [OPTIONS] <URL>
| 参数 | 说明 | 示例 |
|---|---|---|
<URL> |
视频 URL 或 ID | BV1xx411c7mD, av170001, ep123456 |
| 参数 | 说明 | 示例 |
|---|---|---|
-q, --quality |
清晰度优先级(逗号分隔) | "1080P,720P,480P" |
-c, --codec |
编码格式优先级 | "hevc,avc,av1" |
-p, --pages |
选择特定分P或集数 | "1", "1,2,5", "1-5", "ALL" |
-i, --interactive |
交互式清晰度选择模式 | - |
| 参数 | 说明 | 示例 |
|---|---|---|
-o, --output |
输出文件路径或模板 | "<videoTitle>_<quality>.mp4" |
--skip-subtitle |
跳过字幕下载 | - |
--skip-cover |
跳过封面下载 | - |
--skip-mux |
跳过混流 | - |
| 参数 | 说明 | 默认值 |
|---|---|---|
-t, --threads |
下载线程数 | 4 |
--use-aria2c |
使用 aria2c 下载 | - |
--aria2c-path |
aria2c 可执行文件路径 | - |
--aria2c-args |
自定义 aria2c 参数 | - |
| 参数 | 说明 |
|---|---|
--cookie |
Cookie 字符串 |
--access-token |
Access Token |
--login-qrcode |
二维码登录(Web模式) |
--login-tv |
二维码登录(TV模式) |
| 参数 | 说明 |
|---|---|
--use-tv-api |
使用 TV API(无水印片源) |
--use-app-api |
使用 APP API(杜比音频) |
--use-intl-api |
使用国际版 API |
| 参数 | 说明 |
|---|---|
--info-only |
仅显示视频信息 |
--download-danmaku |
下载弹幕文件 |
--danmaku-format |
弹幕格式(xml/ass) |
--config-file |
指定配置文件路径 |
--ffmpeg-path |
FFmpeg 可执行文件路径 |
--use-mp4box |
使用 MP4Box 混流 |
-v, --verbose |
启用详细日志 |
-h, --help |
显示帮助信息 |
-V, --version |
显示版本信息 |
8K 超高清, 杜比视界, HDR 真彩, 4K 超清, 1080P 60帧, 1080P 高码率, 1080P 高清, 720P 60帧, 720P 高清, 480P 清晰, 360P 流畅
avc (H.264), hevc (H.265), av1, E-AC-3 (Dolby), FLAC (Hi-Res)
模块化架构
RVD 采用分层架构设计,各层职责清晰:
┌─────────────────────────────────────┐
│ CLI 层 │ 命令行参数解析和用户交互
├─────────────────────────────────────┤
│ 应用层 │ 协调各模块完成下载任务
├─────────────────────────────────────┤
│ 平台层 │ 特定视频平台的实现(可扩展)
├─────────────────────────────────────┤
│ 核心层 │ 下载、混流、进度跟踪功能
├─────────────────────────────────────┤
│ 工具层 │ HTTP 客户端、配置管理、文件操作
└─────────────────────────────────────┘
可扩展设计
通过 Platform trait 定义统一接口,添加新平台支持无需修改核心代码:
#[async_trait]
pub trait Platform: Send + Sync {
fn can_handle(&self, url: &str) -> bool;
async fn parse_video(&self, url: &str, auth: Option<&Auth>) -> Result<VideoInfo>;
async fn get_streams(&self, video_id: &str, cid: &str, auth: Option<&Auth>) -> Result<Vec<Stream>>;
async fn get_subtitles(&self, video_id: &str, cid: &str) -> Result<Vec<Subtitle>>;
fn get_cover(&self, video_info: &VideoInfo) -> String;
fn name(&self) -> &str;
}性能优化
- ⚡ 多线程分块下载: 充分利用带宽
- 💾 流式写入: 避免内存占用过大
- 🔄 智能重试机制: 提高下载成功率
- 🚀 异步 I/O: 提升并发性能
- 📦 Aria2c 集成: 可选的高性能下载引擎
构建项目
# 开发构建
cargo build
# 发布构建(优化)
cargo build --release运行测试
# 运行所有测试
cargo test
# 运行特定测试
cargo test test_parse_video_info
# 显示测试输出
cargo test -- --nocapture代码质量检查
# Clippy 检查
cargo clippy -- -D warnings
# 代码格式化
cargo fmt
# 格式检查(不修改文件)
cargo fmt -- --check项目结构
src/
├── cli/ # 命令行参数解析
├── app/ # 应用协调逻辑
├── auth/ # 认证模块
│ ├── login.rs # 登录管理器
│ ├── qrcode.rs # 二维码显示
│ ├── storage.rs # 凭证存储
│ ├── types.rs # 认证类型定义
│ └── providers/ # 认证提供者
│ ├── bilibili.rs # 哔哩哔哩认证
│ └── mod.rs # 签名管理器
├── platform/ # 平台特定实现
│ ├── bilibili/ # 哔哩哔哩平台
│ └── trait.rs # 平台接口定义
├── core/ # 核心功能
│ ├── downloader.rs # 下载引擎
│ ├── muxer.rs # 混流器
│ ├── progress.rs # 进度跟踪
│ ├── subtitle.rs # 字幕处理
│ ├── danmaku.rs # 弹幕处理
│ └── chapter.rs # 章节处理
├── utils/ # 工具模块
│ ├── http.rs # HTTP 客户端
│ ├── config.rs # 配置管理
│ └── file.rs # 文件操作
├── error.rs # 错误类型定义
├── types.rs # 数据结构定义
└── main.rs # 程序入口
FFmpeg 相关
请确保 FFmpeg 已安装并在系统 PATH 中,或使用 --ffmpeg-path 参数指定路径。
| 平台 | 安装命令 |
|---|---|
| macOS | brew install ffmpeg |
| Ubuntu/Debian | sudo apt install ffmpeg |
| Windows | 从 FFmpeg 官网 下载 |
下载相关
可以尝试:
- 增加线程数:
rvd <url> -t 8 - 使用 Aria2c:
rvd <url> --use-aria2c
程序会自动重试 3 次。如果仍然失败,请:
- 检查网络连接
- 尝试使用认证信息
- 使用
-v参数查看详细日志
需要提供有效的认证凭证:
# 推荐:使用二维码登录
rvd --login-qrcode --config-file config.toml
# 或手动提供 Cookie
rvd <url> --cookie "SESSDATA=..."认证相关
推荐方式(最简单):
rvd --login-qrcode --config-file config.toml手动获取Cookie:
- 在浏览器中登录 bilibili.com
- 打开开发者工具(F12)
- 在 Application/Storage > Cookies 中找到 SESSDATA
- 复制其值使用
是的,Cookie 有效期通常为几个月。过期后需要重新登录。
| 登录方式 | 命令 | 用途 |
|---|---|---|
| Web端登录 | --login-qrcode |
获取Cookie,适用于普通下载 |
| TV端登录 | --login-tv |
获取access_token,访问TV端API,获取无水印片源 |
程序会同时保存二维码为 qrcode.png 图片文件,可以打开图片扫描。
使用 --config-file 参数时,凭证会保存到同目录下的 auth.toml 文件中。不指定配置文件时,凭证仅在本次会话有效。
| 版本 | 状态 | 主要功能 |
|---|---|---|
| v0.2.0 | ✅ 已完成 | 番剧、课程、批量下载、弹幕、TV/APP API |
| v0.2.5 | ✅ 已完成 | 二维码登录、认证模块、凭证存储 |
| v0.2.7 | ✅ 当前版本 | Aria2c 支持、杜比视界/全景声、Hi-Res 音频 |
| v0.3.0 | 🚧 计划中 | MP4Box 混流、凭证自动刷新、性能优化 |
| v1.0.0 | 📋 长期目标 | 多平台支持、GUI 界面、下载队列、断点续传 |
查看详细路线图
- 番剧和课程下载支持
- 批量下载功能(收藏夹、UP主空间、合集、系列)
- 弹幕下载(XML/ASS 格式)
- TV/APP/国际版 API 支持
- 章节信息提取和嵌入
- 二维码登录(Web端和TV端)
- 完整的认证模块架构
- 安全的凭证存储(独立auth.toml文件)
- 跨平台二维码显示支持
- Aria2c 下载引擎支持
- 杜比视界和杜比全景声支持
- Hi-Res 无损音频(FLAC)支持
- FFmpeg 版本检测
- MP4Box 混流支持(完整实现)
- 凭证自动刷新
- 性能优化和内存使用改进
- 更多视频平台支持
- 完整的 BBDown 功能对等
- 多平台支持(YouTube、爱奇艺等)
- GUI 界面
- 下载队列管理
- 断点续传支持
欢迎提交 Issue 和 Pull Request!
在提交 PR 前,请确保:
- ✅ 代码通过
cargo test - ✅ 代码通过
cargo clippy - ✅ 代码已格式化
cargo fmt
如果你发现了 bug 或有功能建议,请在 GitHub Issues 中提交。
本项目采用 MIT License 开源协议。
本项目仅供个人学习、研究和非商业性用途。用户在使用本工具时,需自行确保遵守相关法律法规,特别是与版权相关的法律条款。开发者不对因使用本工具而产生的任何版权纠纷或法律责任承担责任。
- BBDown - 设计思路参考
- bilibili-API-collect - API 文档参考
- Rust 社区的优秀开源项目
如果这个项目对你有帮助,请给它一个 ⭐️
Made with ❤️ by RVD Contributors