写点什么

BBDown:高效便捷的哔哩哔哩视频下载工具

作者:qife122
  • 2025-11-27
    福建
  • 本文字数:3052 字

    阅读完需:约 10 分钟

BBDown:高效便捷的哔哩哔哩视频下载工具

项目描述

BBDown 是一个免费且便捷高效的哔哩哔哩下载/解析软件,支持命令行操作和 HTTP API 服务。该项目采用 C#开发,提供完整的 B 站视频解析和下载解决方案,支持多种视频格式、多线程下载、弹幕下载等丰富功能。

功能特性

  • 多平台解析:支持 Web 端、TV 端、APP 端和国际版 API 解析模式

  • 多种下载方式:支持普通下载、aria2c 下载和多线程下载

  • 格式支持:支持 HEVC、AV1、AVC 等多种视频编码格式

  • 画质选择:提供丰富的画质优先级设置,支持 8K、杜比视界等高清格式

  • 弹幕处理:支持 XML 和 ASS 格式的弹幕下载

  • API 服务:内置 HTTP 服务器,提供完整的 RESTful API 接口

  • 批量下载:支持收藏夹、合集、系列列表等批量下载功能

  • 交互式选择:提供交互式清晰度选择界面

安装指南

通过 Dotnet Tool 安装

如果你本地有 dotnet 环境,使用如下命令即可安装使用:


dotnet tool install --global BBDown
复制代码

更新 BBDown

dotnet tool update --global BBDown
复制代码

系统要求

  • .NET 运行时环境

  • 混流需要外部程序:ffmpeg 或 mp4box

  • 杜比视界需要 ffmpeg 5.0 以上或新版 mp4box

下载地址

使用说明

基础使用

BBDown <url> [options]
复制代码

常用参数示例

# 仅显示视频信息而不下载BBDown "BV1qt4y1X7TW" --only-show-info
# 使用TV端API解析BBDown "BV1qt4y1X7TW" --use-tv-api
# 设置编码优先级BBDown "BV1qt4y1X7TW" --encoding-priority "hevc,av1,avc"
# 多线程下载BBDown "BV1qt4y1X7TW" --multi-thread
# 使用aria2c下载BBDown "BV1qt4y1X7TW" --use-aria2c
复制代码

API 服务器模式

启动服务器模式后,BBDown 会在本地启动 HTTP 服务,提供以下 API 接口:

获取任务列表

curl http://localhost:58682/get-tasks/
复制代码

添加下载任务

curl -X POST -H 'Content-Type: application/json' -d '{"Url": "BV1qt4y1X7TW"}' http://localhost:58682/add-task
复制代码

下载到指定目录

curl -X POST -H 'Content-Type: application/json' -d '{"Url": "BV1qt4y1X7TW", "FilePattern": "/Downloads/<videoTitle>[<dfn>]"}' http://localhost:58682/add-task
复制代码

核心代码

下载任务管理

public class DownloadTask{    public string Aid { get; set; } = default!;    public string Url { get; set; } = default!;    public long TaskCreateTime { get; set; }    public string? Title { get; set; }    public string? Pic { get; set; }    public long? VideoPubTime { get; set; }    public long? TaskFinishTime { get; set; }    public double Progress { get; set; }    public double DownloadSpeed { get; set; }    public double TotalDownloadedBytes { get; set; }    public bool IsSuccessful { get; set; }}
public class DownloadTaskCollection{ public List<DownloadTask> Running { get; set; } = new(); public List<DownloadTask> Finished { get; set; } = new(); public DownloadTaskCollection(List<DownloadTask> running, List<DownloadTask> finished) { Running = running; Finished = finished; }}
复制代码

多线程下载实现

public static class BBDownDownloadUtil{    public class DownloadConfig    {        public bool UseAria2c { get; set; } = false;        public string Aria2cArgs { get; set; } = string.Empty;        public bool ForceHttp { get; set; } = false;        public bool MultiThread { get; set; } = false;        public DownloadTask? RelatedTask { get; set; } = null;    }
private static async Task RangeDownloadToTmpAsync(int id, string url, string tmpName, long fromPosition, long? toPosition, Action<int, long, long> onProgress, bool failOnRangeNotSupported = false) { // 实现范围下载和进度回调 DateTimeOffset? lastTime = File.Exists(tmpName) ? new FileInfo(tmpName).LastWriteTimeUtc : null; using var fileStream = new FileStream(tmpName, FileMode.OpenOrCreate); fileStream.Seek(0, SeekOrigin.End); // 下载逻辑实现... }}
复制代码

视频解析器工厂

public static class FetcherFactory{    public static IFetcher CreateFetcher(string aidOri, bool useIntlApi)    {        IFetcher fetcher = new NormalInfoFetcher();                if (aidOri.StartsWith("cheese"))        {            fetcher = new CheeseInfoFetcher();        }        else if (aidOri.StartsWith("ep"))        {            fetcher = useIntlApi ?                 new IntlBangumiInfoFetcher() : new BangumiInfoFetcher();        }        else if (aidOri.StartsWith("mid"))        {            fetcher = new SpaceVideoFetcher();        }        // 更多解析器类型...                return fetcher;    }}
复制代码

进度条显示

public class ProgressBar : IDisposable, IProgress<double>{    private const int blockCount = 40;    private readonly TimeSpan animationInterval = TimeSpan.FromSeconds(1.0 / 8);    private const string animation = @"|/-\";
public void Report(double value) { // 确保进度值在0-1范围内 value = Math.Max(0, Math.Min(1, value)); Interlocked.Exchange(ref currentProgress, value); }
public void Report(double value, long bytesCount) { value = Math.Max(0, Math.Min(1, value)); Interlocked.Exchange(ref currentProgress, value); Interlocked.Exchange(ref downloadedBytes, bytesCount); } // 进度显示和速度计算实现...}
复制代码

配置文件解析

internal static class BBDownConfigParser{    public static void HandleConfig(List<string> newArgsList, RootCommand rootCommand)    {        try        {            var configPath = newArgsList.Contains("--config-file")                ? newArgsList.ElementAt(newArgsList.IndexOf("--config-file") + 1)                : Path.Combine(Program.APP_DIR, "BBDown.config");                            if (File.Exists(configPath))            {                // 配置文件读取和解析逻辑                var configArgs = File                    .ReadAllLines(configPath)                    .Where(s => !string.IsNullOrEmpty(s) && !s.StartsWith('#'))                    .SelectMany(s => ParseConfigLine(s));                                // 命令行参数优先级 > 配置文件优先级            }        }        catch (Exception)        {            LogError("配置文件读取异常,忽略");        }    }}
复制代码


BBDown 项目提供了完整的哔哩哔哩视频下载解决方案,从视频解析到下载管理,再到进度跟踪和文件混流,每个环节都经过精心设计和实现,确保了软件的稳定性和易用性。更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)


公众号二维码


办公AI智能小助手


公众号二维码


网络安全技术点滴分享


用户头像

qife122

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
BBDown:高效便捷的哔哩哔哩视频下载工具_bilibili_qife122_InfoQ写作社区