BilDowner 是一个纯 Rust 命令行 Bilibili / 抖音 / X 视频下载器,不包含前端页面。Bilibili 通过 x/player/wbi/playurl 获取 DASH 流,分别下载视频和音频,默认由内置 MP4 封装器逐样本合并 AVC/H.264 与 AAC 轨道;也可以显式选择 FFmpeg。两种方式都不进行有损重新编码。抖音通过分享页公开的 SSR 作品数据解析 MP4 播放流,优先下载无水印地址,并在不可用时自动回退到原始播放地址。X 下载器从官方 syndication JSON 解析 video.twimg.com MP4 变体,默认下载最高码率版本。
当前版本:1.1.0 Alpha。
请只下载你有权保存的内容。本工具不会绕过 DRM、付费或账号权限;接口返回的清晰度取决于当前账号本身具有的播放权限。
- 终端二维码登录,或手工导入 Cookie
- Windows 下使用 DPAPI 按当前 Windows 用户加密保存 Cookie
- 查看和选择分 P;支持 BV/AV 视频以及
ep/ss番剧、影视链接 - 支持
360p、480p、720p、1080p、1080p+、1080p60、4k、hdr、dolby、8k和原始qn - 可选择 AVC/H.264、HEVC/H.265 或 AV1;默认优先兼容性较好的 AVC
merged、separate、both三种输出模式- 视频与音频并行下载,支持
.part文件续传和 DASH 备用 CDN - 内置纯 Rust MP4 合并器,默认 AVC/H.264 + AAC 下载无需安装 FFmpeg;可通过
--ffmpeg显式切换 - 支持抖音短分享链接和
douyin.com/video/<作品 ID>链接,无需登录或额外插件 - 支持
x.com/twitter.com帖子视频,默认最高码率,也可用--quality限制分辨率
- 支持 edition 2024 的当前稳定版 Rust
- 默认不需要 FFmpeg;内置合并当前支持 AVC/H.264 + AAC
- HEVC/H.265、AV1 可使用
--mode separate保留原始流,或通过--ffmpeg合并
# 编译
cargo build --release
# 推荐:扫码登录
cargo run -- auth qr
# 检查登录状态
cargo run -- auth status
# 也可以从标准输入导入浏览器 Cookie,避免出现在命令历史中
Get-Clipboard | cargo run -- auth set
# 查看分 P、清晰度和编码
cargo run -- info "https://www.bilibili.com/video/BV1xx411c7mD"
cargo run -- info BV1xx411c7mD --page 1
cargo run -- info BV1xx411c7mD --page "1-3,5,7"
cargo run -- info "https://www.bilibili.com/bangumi/play/ss43164" --page 2
# 默认下载最高可用清晰度,同时保留分离流和合并 MP4
cargo run -- download BV1xx411c7mD
# 选择清晰度、分 P、编码和输出模式
cargo run -- download BV1xx411c7mD --page 2 --quality 1080p --codec avc --mode both
cargo run -- download BV1xx411c7mD --page "1-7" --quality 1080p
cargo run -- download BV1xx411c7mD --page "5,7" --quality 1080p
cargo run -- download BV1xx411c7mD --quality 4k --codec hevc --mode merged --ffmpeg
cargo run -- download BV1xx411c7mD --quality 720p --mode separate --output-dir .\downloads
cargo run -- download ep693247 --quality 1080p --mode both
# 查看并下载抖音分享视频(抖音为已合并的单个 MP4)
cargo run -- info "https://v.douyin.com/KyuVvC8wEu4/"
cargo run -- download "https://v.douyin.com/KyuVvC8wEu4/"
# 查看并下载 X 帖子中的主视频(公开帖子无需登录)
cargo run -- info "https://x.com/Kimi_Moonshot/status/2077521842080817296"
cargo run -- download "https://x.com/Kimi_Moonshot/status/2077521842080817296"
cargo run -- download "https://x.com/Kimi_Moonshot/status/2077521842080817296" --quality 1080p--page 支持单个序号(7)、闭区间(1-7)、逗号列表(5,7)及其组合。显式 --page 优先于 Bilibili 链接中的 p=;未指定时会使用链接中的分 P,链接也未指定时默认 P1。对没有分 P 的视频传入 --page 不会中止,而是忽略参数并显示警告。
输出模式:
merged:输出带音频的.mp4,成功后删除临时视频/音频流separate:输出.video.m4s与.audio.m4sboth:同时保留上述三种文件,也是默认值
默认使用内置合并器。需要 FFmpeg 时可显式启用,或指定自定义路径:
cargo run -- download BV1xx411c7mD --mode merged --ffmpeg
cargo run -- download BV1xx411c7mD --mode merged --ffmpeg C:\Tools\ffmpeg\bin\ffmpeg.exeCookie 默认保存在 %APPDATA%\BilDowner\cookie.dat,Windows 下通过 DPAPI 加密,只有保存它的 Windows 用户可以解密。可用 BILDOWNER_COOKIE_FILE 覆盖路径:
$env:BILDOWNER_COOKIE_FILE = 'D:\private\bildowner-cookie.dat'
cargo run -- auth status
cargo run -- auth clear- 使用
x/web-interface/view解析 BV/AV 号,使用pgc/view/web/season解析ep/ss剧集、标题和cid。 - 从
x/web-interface/nav获取当前 WBI 图片密钥,生成wts和w_rid签名,减少 CLI 请求被 412 拒绝的情况。 - 普通视频使用 WBI playurl,番剧/影视使用 PGC playurl,并通过
qn=<清晰度>&fnval=4048&fourk=1请求 DASH;如果接口标记为 DRM 流则明确拒绝下载。 - 从同一清晰度的
dash.video中按编码选择视频流,从dash.audio选择最高码率标准音频流。 - 下载时携带 Bilibili Referer、浏览器 User-Agent 和已保存 Cookie;主 CDN 失败时依次尝试备用地址。
- 默认合并时用纯 Rust 解析 fragmented MP4,复制 H.264/AAC 压缩样本、时间戳与关键帧信息,并重建普通 MP4 的
mdat和样本索引;传入--ffmpeg时改用 FFmpeg 的copy模式封装。 - 抖音链接先解析为作品 ID,再读取
www.douyin.com/share/video/<作品 ID>页面内的_ROUTER_DATA;下载器优先尝试play无水印地址,并以页面提供的playwm地址兜底。 - X 链接提取帖子 ID 后请求官方 syndication JSON,读取首个视频的 MP4 变体;默认按码率选择最高档,指定
--quality时选择不高于目标高度的最佳档位。Windows 使用系统 WinINet 网络路径,其他平台使用 Rustls。
站点接口可能变化;遇到问题时先运行 cargo run -- info <链接>。Bilibili 会给出当前账号实际可用的清晰度和编码,抖音会显示分享页公开的作品信息,X 会列出帖子首个视频的全部 MP4 档位。
本项目以 BSD 2-Clause License 开源,Copyright (c) 2026 SorMaze。