哔哩下载姬(跨平台版)downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。
C#
316
578 commits
updated Sep 16, 2026
DownKyi Core 是基于哔哩下载姬 Windows 版与 Avalonia 的跨平台 B 站视频下载工具。项目使用 .NET 10、Avalonia 12、Microsoft Generic Host、Microsoft DI 与 CommunityToolkit MVVM,并重构了导航、下载状态、SQLite、HTTP、日志、aria2、FFmpeg 和应用生命周期。
DownKyi-*-win-x64.zip 或 DownKyi-*-win-x86.zipDownKyi-*-osx-arm64.dmg 或 DownKyi-*-osx-x64.dmg更新内容见 CHANGELOG.md。
.aria2、.download 等临时文件。发布包包含运行所需的 .NET、ffmpeg 和 aria2,不需要用户额外安装。Windows x64 与 Linux 使用 BtbN GPL FFmpeg build,macOS 使用同时提供 x64 / arm64 的静态 FFmpeg build;这些发布包会优先携带可用的硬件 encoder。Windows x86 仍保留兼容性 build,硬件加速不可用时会自动降级。
FFmpeg 合并策略遵循“效能优先,但成功率更重要”:优先无损 stream copy;只有必须重新编码时才自动检测 NVENC / QSV / AMF / VAAPI / VideoToolbox;如果 GPU encoder 不存在、驱动不可用或参数失败,程序会记录原因并回退到低 CPU 软编码。
默认数据目录:
%APPDATA%\DownKyi~/Library/Application Support/DownKyi$XDG_CONFIG_HOME/DownKyi,未设置时通常是 ~/.config/DownKyi常用子目录:
Media: 默认下载目录Logs: 应用日志和诊断日志Storage: SQLite 下载数据库Config: 设置与登录信息Cache: 图片和运行缓存Aria: aria2 session/log可选模式:
DOWNKYI_DATA_DIR 可指定完整数据根目录。DOWNKYI_PORTABLE=1,或在程序目录放置 portable / .portable / DownKyi.portable,可启用便携模式。flowchart TD
A["用户输入 BV/AV/番剧/收藏/历史入口"] --> B["SearchService 判断入口类型"]
B --> C["VideoInfoService / BangumiInfoService / CheeseInfoService"]
C --> D["IWbiKeyProvider 按需取得签名密钥"]
D --> E["BiliApi 请求视频详情、分 P、合集章节"]
E --> F["ViewModel 批次更新列表"]
F --> G{"解析范围"}
G -->|选中项| H["解析选中视频流"]
G -->|当前章节| I["解析当前章节"]
G -->|全部| J["顺序解析全部视频"]
H --> K["VideoStreamApi.GetVideoPlayUrl"]
I --> K
J --> K
K --> L["选择画质、音质、编码"]
L --> M["AddToDownloadService 建立下载任务"]
M --> N["DownloadTaskAdmissionService 建立 Domain task"]
N --> O["IDownloadTaskApplicationService 写入 SQLite"]
O --> P["DownloadTaskQueueGateway 直接排入 task id"]
P --> Q["DownloadOrchestrator 背景执行任务"]
flowchart TD
A["DownloadOrchestrator 有界队列"] --> B["DownloadPipeline 解析播放地址"]
B --> C{"ITransferBackend"}
C -->|aria2 / 自定义 aria2| D["Aria2TransferBackend"]
C -->|内置| E["BuiltinTransferBackend"]
D --> F["DownloadTaskStateWriter 保存 gid、临时文件、进度"]
E --> F
F --> G["DownloadArtifactWriter 处理封面 / 弹幕 / 字幕 / NFO"]
G --> H["字幕 JSON 转 SRT"]
G --> I["弹幕 protobuf 转 ASS"]
G --> J["FFmpeg 合并:一般媒体可 copy,多段 DURL 重编码并 GPU/CPU fallback"]
H --> K["输出 Media 文件"]
I --> K
J --> K
K --> L["任务完成,写入 downloaded 表"]
%APPDATA%\DownKyi\Media软件内可在关于页面打开日志目录或导出诊断日志。诊断日志用于快速排查:
导出的诊断日志会过滤大量普通调试噪音,并自动遮蔽敏感信息。
需要 .NET 10 SDK。
开始修改前先阅读:
AGENTS.md:Agent 与贡献者入口、禁止事项和常用命令。ARCHITECTURE.md:目前可执行拓扑与目标拓扑;两者尚未完全一致。src/DownKyi.Desktop/Composition/DesktopComposition.cs:Desktop 根组装;从这里进入相关模块的局部 composition、契约与构造函数。docs/refactoring-live-plan.md:只包含尚未完成的工作和发布阻塞项。docs/design-docs/module-boundary-naming-audit.md:可重现的模块边界与命名审查。dotnet restore
dotnet build .\DownKyi.sln -c Release --no-restore --no-incremental
pwsh .\script\test-solution.ps1 -Configuration Release -NoRestore -NoBuild
本机运行:
dotnet run --project .\DownKyi\DownKyi.csproj
开发时建议同时跑:
pwsh .\script\audit-module-boundaries.ps1 `
-OutputPath artifacts\architecture\module-boundary-audit.json
dotnet format .\DownKyi.sln --verify-no-changes --no-restore
dotnet package list --project .\DownKyi.sln --vulnerable --include-transitive
dotnet package list --project .\DownKyi.sln --deprecated
git diff --check
项目结构:
DownKyi: 只保留最小程序启动入口。src/DownKyi.Desktop: Avalonia App、Views、ViewModels、UI projections、平台服务、Host composition 与下载 runtime。src/DownKyi.Application: 下载 commands/queries、coordinators、desktop/lifecycle/logging contracts。src/DownKyi.Domain: DownloadTask aggregate、合法状态转换、value objects 与 typed results。src/DownKyi.Infrastructure: SQLite task store、Bilibili HTTP/buvid、clock、logging sink/retention/export。DownKyi.Core: headless Bilibili API、设置、aria2/FFmpeg/filesystem compatibility、字幕与弹幕处理。tests/DownKyi.Core.Tests: Core 层网络与工具逻辑测试。tests/DownKyi.Tests: UI 外围可抽取逻辑、下载流程与文件完整性测试。script: release workflow 使用的 aria2、FFmpeg、PupNet 和平台打包脚本。docs/maintenance.md: 依赖更新、外部 binary checksum、release tag 和回归 checklist。ARCHITECTURE.md: 当前依赖方向、兼容性不变量与局部 composition 入口。注意:Desktop/UI、Bilibili HTTP、SQLite 与 logging ownership 已实际迁移,不是空壳专案。aria2、FFmpeg、filesystem compatibility 仍主要位于 DownKyi.Core;剩余边界与风险以 ARCHITECTURE.md 和 docs/refactoring-live-plan.md 为准。
主要数据流:
SearchService 识别输入入口。*InfoService 读取 B 站详情、分 P、番剧或课程信息。VideoStream 解析音视频、字幕和弹幕资源。AddToDownloadService 经 admission service 建立 Domain task,由 Application service 写入 SQLite。DownloadOrchestrator 以有界 worker 调用 typed stages 和选定的 transfer backend。发布由 GitHub Actions 触发 tag 完成:
git tag -a v1.0.x -m "v1.0.x"
git push origin main
git push origin v1.0.x
当前 Windows 发布包使用正常 self-contained zip。由于 Avalonia、Xaml.Behaviors、反射序列化与原生媒体/SQLite 组件仍需完整保留,项目暂不发布 Windows -trimmed 包。
外部 binary 由 script/aria2.* 与 script/ffmpeg.* 固定来源、版本和 checksum。更新时请同步维护脚本与 docs/maintenance.md,并确认发布包仍包含跨平台 fallback。
Avalonia 的默认语言资源位于 src/DownKyi.Desktop/Languages/Default.axaml。资源 URI、XAML smoke test 与发布构建共同验证该路径,禁止恢复历史误拼 Languanges。
574 commits
4 commits
C#
95.7%
PowerShell
2.3%
Python
1.4%
哔哩下载姬(跨平台版)downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。
C#
316
578 commits
updated Sep 16, 2026
DownKyi Core 是基于哔哩下载姬 Windows 版与 Avalonia 的跨平台 B 站视频下载工具。项目使用 .NET 10、Avalonia 12、Microsoft Generic Host、Microsoft DI 与 CommunityToolkit MVVM,并重构了导航、下载状态、SQLite、HTTP、日志、aria2、FFmpeg 和应用生命周期。
DownKyi-*-win-x64.zip 或 DownKyi-*-win-x86.zipDownKyi-*-osx-arm64.dmg 或 DownKyi-*-osx-x64.dmg更新内容见 CHANGELOG.md。
.aria2、.download 等临时文件。发布包包含运行所需的 .NET、ffmpeg 和 aria2,不需要用户额外安装。Windows x64 与 Linux 使用 BtbN GPL FFmpeg build,macOS 使用同时提供 x64 / arm64 的静态 FFmpeg build;这些发布包会优先携带可用的硬件 encoder。Windows x86 仍保留兼容性 build,硬件加速不可用时会自动降级。
FFmpeg 合并策略遵循“效能优先,但成功率更重要”:优先无损 stream copy;只有必须重新编码时才自动检测 NVENC / QSV / AMF / VAAPI / VideoToolbox;如果 GPU encoder 不存在、驱动不可用或参数失败,程序会记录原因并回退到低 CPU 软编码。
默认数据目录:
%APPDATA%\DownKyi~/Library/Application Support/DownKyi$XDG_CONFIG_HOME/DownKyi,未设置时通常是 ~/.config/DownKyi常用子目录:
Media: 默认下载目录Logs: 应用日志和诊断日志Storage: SQLite 下载数据库Config: 设置与登录信息Cache: 图片和运行缓存Aria: aria2 session/log可选模式:
DOWNKYI_DATA_DIR 可指定完整数据根目录。DOWNKYI_PORTABLE=1,或在程序目录放置 portable / .portable / DownKyi.portable,可启用便携模式。flowchart TD
A["用户输入 BV/AV/番剧/收藏/历史入口"] --> B["SearchService 判断入口类型"]
B --> C["VideoInfoService / BangumiInfoService / CheeseInfoService"]
C --> D["IWbiKeyProvider 按需取得签名密钥"]
D --> E["BiliApi 请求视频详情、分 P、合集章节"]
E --> F["ViewModel 批次更新列表"]
F --> G{"解析范围"}
G -->|选中项| H["解析选中视频流"]
G -->|当前章节| I["解析当前章节"]
G -->|全部| J["顺序解析全部视频"]
H --> K["VideoStreamApi.GetVideoPlayUrl"]
I --> K
J --> K
K --> L["选择画质、音质、编码"]
L --> M["AddToDownloadService 建立下载任务"]
M --> N["DownloadTaskAdmissionService 建立 Domain task"]
N --> O["IDownloadTaskApplicationService 写入 SQLite"]
O --> P["DownloadTaskQueueGateway 直接排入 task id"]
P --> Q["DownloadOrchestrator 背景执行任务"]
flowchart TD
A["DownloadOrchestrator 有界队列"] --> B["DownloadPipeline 解析播放地址"]
B --> C{"ITransferBackend"}
C -->|aria2 / 自定义 aria2| D["Aria2TransferBackend"]
C -->|内置| E["BuiltinTransferBackend"]
D --> F["DownloadTaskStateWriter 保存 gid、临时文件、进度"]
E --> F
F --> G["DownloadArtifactWriter 处理封面 / 弹幕 / 字幕 / NFO"]
G --> H["字幕 JSON 转 SRT"]
G --> I["弹幕 protobuf 转 ASS"]
G --> J["FFmpeg 合并:一般媒体可 copy,多段 DURL 重编码并 GPU/CPU fallback"]
H --> K["输出 Media 文件"]
I --> K
J --> K
K --> L["任务完成,写入 downloaded 表"]
%APPDATA%\DownKyi\Media软件内可在关于页面打开日志目录或导出诊断日志。诊断日志用于快速排查:
导出的诊断日志会过滤大量普通调试噪音,并自动遮蔽敏感信息。
需要 .NET 10 SDK。
开始修改前先阅读:
AGENTS.md:Agent 与贡献者入口、禁止事项和常用命令。ARCHITECTURE.md:目前可执行拓扑与目标拓扑;两者尚未完全一致。src/DownKyi.Desktop/Composition/DesktopComposition.cs:Desktop 根组装;从这里进入相关模块的局部 composition、契约与构造函数。docs/refactoring-live-plan.md:只包含尚未完成的工作和发布阻塞项。docs/design-docs/module-boundary-naming-audit.md:可重现的模块边界与命名审查。dotnet restore
dotnet build .\DownKyi.sln -c Release --no-restore --no-incremental
pwsh .\script\test-solution.ps1 -Configuration Release -NoRestore -NoBuild
本机运行:
dotnet run --project .\DownKyi\DownKyi.csproj
开发时建议同时跑:
pwsh .\script\audit-module-boundaries.ps1 `
-OutputPath artifacts\architecture\module-boundary-audit.json
dotnet format .\DownKyi.sln --verify-no-changes --no-restore
dotnet package list --project .\DownKyi.sln --vulnerable --include-transitive
dotnet package list --project .\DownKyi.sln --deprecated
git diff --check
项目结构:
DownKyi: 只保留最小程序启动入口。src/DownKyi.Desktop: Avalonia App、Views、ViewModels、UI projections、平台服务、Host composition 与下载 runtime。src/DownKyi.Application: 下载 commands/queries、coordinators、desktop/lifecycle/logging contracts。src/DownKyi.Domain: DownloadTask aggregate、合法状态转换、value objects 与 typed results。src/DownKyi.Infrastructure: SQLite task store、Bilibili HTTP/buvid、clock、logging sink/retention/export。DownKyi.Core: headless Bilibili API、设置、aria2/FFmpeg/filesystem compatibility、字幕与弹幕处理。tests/DownKyi.Core.Tests: Core 层网络与工具逻辑测试。tests/DownKyi.Tests: UI 外围可抽取逻辑、下载流程与文件完整性测试。script: release workflow 使用的 aria2、FFmpeg、PupNet 和平台打包脚本。docs/maintenance.md: 依赖更新、外部 binary checksum、release tag 和回归 checklist。ARCHITECTURE.md: 当前依赖方向、兼容性不变量与局部 composition 入口。注意:Desktop/UI、Bilibili HTTP、SQLite 与 logging ownership 已实际迁移,不是空壳专案。aria2、FFmpeg、filesystem compatibility 仍主要位于 DownKyi.Core;剩余边界与风险以 ARCHITECTURE.md 和 docs/refactoring-live-plan.md 为准。
主要数据流:
SearchService 识别输入入口。*InfoService 读取 B 站详情、分 P、番剧或课程信息。VideoStream 解析音视频、字幕和弹幕资源。AddToDownloadService 经 admission service 建立 Domain task,由 Application service 写入 SQLite。DownloadOrchestrator 以有界 worker 调用 typed stages 和选定的 transfer backend。发布由 GitHub Actions 触发 tag 完成:
git tag -a v1.0.x -m "v1.0.x"
git push origin main
git push origin v1.0.x
当前 Windows 发布包使用正常 self-contained zip。由于 Avalonia、Xaml.Behaviors、反射序列化与原生媒体/SQLite 组件仍需完整保留,项目暂不发布 Windows -trimmed 包。
外部 binary 由 script/aria2.* 与 script/ffmpeg.* 固定来源、版本和 checksum。更新时请同步维护脚本与 docs/maintenance.md,并确认发布包仍包含跨平台 fallback。
Avalonia 的默认语言资源位于 src/DownKyi.Desktop/Languages/Default.axaml。资源 URI、XAML smoke test 与发布构建共同验证该路径,禁止恢复历史误拼 Languanges。
574 commits
4 commits
C#
95.7%
PowerShell
2.3%
Python
1.4%