1. 项目概述Bolly一个为B站视频下载而生的利器最近在折腾一些视频素材发现B站上有很多高质量的创作者内容无论是技术教程、生活Vlog还是创意短片都很有参考和收藏价值。但有时候网络不稳定或者想离线观看、进行二次创作剪辑就需要一个可靠的下载工具。市面上工具不少但要么功能单一要么操作复杂要么就是广告满天飞。直到我发现了triangle-int/bolly这个开源项目它彻底改变了我的工作流。Bolly这个名字听起来就有点意思像是“Bilibili”和“Hollywood”的结合体暗示着它处理视频的“专业范儿”。这是一个用Go语言编写的命令行工具核心目标就一个高效、稳定、功能丰富地下载Bilibili的视频。对于像我这样经常需要处理视频素材的博主、内容创作者或者单纯想收藏视频的爱好者来说它简直是个宝藏。你不用再忍受网页端各种限制也不用担心第三方在线解析网站的安全性和稳定性问题。Bolly把下载的控制权完全交还给你通过几条简单的命令就能搞定从普通视频到大会员专享、从单P到整个合集的所有内容并且支持最高画质和音质的选择。它的出现解决了一个很实际的痛点我们如何以一种程序员友好、可脚本化、且尊重版权仅限个人合理使用的方式获取我们需要的视频内容。接下来我就结合自己这段时间的深度使用经验从设计思路到实操细节再到避坑指南为你完整拆解Bolly这个工具。2. 核心功能与设计理念解析2.1 为什么选择命令行工具你可能会问现在图形化工具那么多为什么还要用命令行这正是Bolly设计上的高明之处。首先极致的高效与自动化。对于需要批量下载系列教程、UP主全部视频的场景图形化工具需要你一次次地点击、粘贴。而Bolly只需要你写好一个包含所有视频ID的文本文件一行命令就能自动排队下载甚至可以结合cron任务实现定时抓取更新。其次资源占用极低。没有复杂的GUI界面Bolly作为一个单纯的二进制可执行文件运行起来几乎不占内存在服务器或低配设备上也能流畅运行非常适合作为后端服务集成。最后稳定与透明。命令行工具排除了图形界面可能带来的兼容性和渲染问题所有操作日志、错误信息都直接输出在终端里哪里出了问题一目了然调试起来非常方便。2.2 核心能力全景图Bolly绝非一个简单的“下载器”。经过我的梳理它的核心能力主要体现在以下几个维度全面的资源覆盖不仅支持普通的AV号/BV号视频还支持番剧Season与课程输入番剧的ssid季节ID或epid剧集ID可以下载整季或单集。用户空间所有视频通过UP主的mid用户ID可以遍历下载其发布的所有视频。收藏夹与播单输入收藏夹ID或播单ID即可下载其中全部内容。频道Channel支持下载特定频道下的视频合集。精细化的下载控制画质与音质选择支持从流畅到4K、杜比视界如果源有等多种画质以及不同码率的音频流。你可以指定“--quality 120”来下载1080P高码率或者“--quality 80”下载1080P 60帧。多P视频与分集处理自动识别多P视频可以单独下载某一P也可以批量下载全部。对于番剧同样支持单集或全集下载。下载范围限定支持通过“--start-page”和“--end-page”参数只下载用户空间或收藏夹中特定页码的视频避免一次性请求过多。增强的实用功能信息探测在不下载的情况下使用“--info”参数可以快速查看视频的标题、作者、分P信息、所有可用的音视频流及其编码、分辨率、码率等详细信息。这在决定下载哪种画质时非常有用。Cookie集成这是下载大会员专享、高画质视频或私密视频的关键。Bolly支持通过“--cookies”参数指定从浏览器导出的cookies.txt文件从而以登录状态访问资源。多线程与断点续传利用Go语言的高并发特性Bolly可以实现多线程分段下载大幅提升速度。并且支持断点续传网络中断后重新执行命令即可继续不必重头开始。自定义输出可以指定下载目录、自定义文件名模板包含标题、UP主、分P序号等变量。2.3 技术栈选型背后的考量项目选用Go语言开发这是一个非常务实且高效的选择。高性能并发是Go的天然优势对于需要同时处理多个视频流解析、分段下载的任务来说Go的goroutine模型比传统线程轻量得多能更好地利用多核CPU实现高速下载。跨平台编译特性使得开发者能轻松编译出Windows、macOS、Linux等主流系统的可执行文件用户无需配置复杂的运行时环境真正做到开箱即用。强大的标准库与丰富的网络生态让处理HTTP请求、解析JSON数据、管理文件系统等操作变得异常简洁。此外单一二进制文件的部署方式也极大地简化了分发和安装流程。这些特性共同支撑起了Bolly稳定、快速、易用的用户体验。3. 从零开始环境准备与安装部署3.1 系统环境与依赖检查Bolly本身是静态编译的二进制文件理论上没有任何额外的运行时依赖。但在实际使用前我建议你做好以下准备操作系统Windows 10/11 macOS 10.14 或主流的Linux发行版如Ubuntu 20.04, CentOS 7均可。我的主要测试环境是macOS Ventura和Windows 11 WSL2下的Ubuntu。网络环境确保能正常访问Bilibili主站及其CDN节点。某些高画质资源可能需要更好的网络带宽。存储空间根据你要下载的视频数量和画质预留足够的磁盘空间。一个10分钟的1080P 60帧视频体积可能在300MB到800MB之间。命令行终端Windows用户建议使用PowerShell 7 或 Windows TerminalmacOS和Linux用户使用系统自带的终端即可。3.2 多种安装方式详解Bolly提供了几种安装方式你可以根据自身情况选择。方式一直接下载预编译二进制文件推荐新手这是最快捷的方式。前往项目的GitHub Releases页面找到最新版本。你会看到针对不同系统的压缩包例如bolly_windows_amd64.zip(Windows 64位)bolly_darwin_amd64.tar.gz(macOS Intel芯片)bolly_darwin_arm64.tar.gz(macOS Apple Silicon芯片)bolly_linux_amd64.tar.gz(Linux 64位)下载对应压缩包解压后就能得到一个名为bollyWindows下为bolly.exe的可执行文件。实操心得我习惯在用户目录下创建一个Tools文件夹专门存放这些绿色软件。然后把这个文件夹的路径添加到系统的PATH环境变量中。这样我就可以在任意位置的终端里直接输入bolly命令来运行它了。添加PATH变量的方法网上教程很多这里不赘述。方式二通过Go工具链从源码安装适合开发者如果你本地已经配置好了Go开发环境Go 1.19安装会更加简单。go install github.com/triangle-int/bollylatest执行后Go会自动下载、编译并将可执行文件安装到$GOPATH/bin或$GOBIN目录下。同样请确保该目录已在你的PATH中。方式三使用包管理器macOS/Linux对于macOS用户如果安装了Homebrew可以通过添加第三方tap来安装brew tap triangle-int/tap brew install bollyLinux用户如果使用Arch系可能有AUR包可供安装。3.3 验证安装与获取帮助安装完成后打开终端输入以下命令验证bolly --version如果成功输出版本号如bolly version 1.2.0说明安装成功。接下来强烈建议你浏览一下帮助文档bolly --help这会列出所有可用的命令和全局参数。你可以看到bolly [OPTIONS] VIDEO_URL_OR_ID是基本的使用格式。每个命令如info也有自己的帮助可以通过bolly info --help查看。4. 核心操作流程与实战演练理论讲得再多不如动手操作一遍。下面我将以几个最典型的场景为例带你走完完整的下载流程。4.1 场景一下载单个视频AV/BV号这是最基础的操作。假设我们要下载这个视频https://www.bilibili.com/video/BV1xx411c7mD。步骤1获取视频信息在决定下载前先看看有什么可用的资源。bolly info BV1xx411c7mD或者直接用完整URLbolly info “https://www.bilibili.com/video/BV1xx411c7mD”命令执行后终端会输出一个结构清晰的列表包含视频标题、作者、简介以及最重要的——所有可用的音视频流。你会看到类似下面的信息Title: 【4K珍藏】XXXXXX Author: 某UP主 Video Streams: [120] 高清 1080P (H.264) - 大小: ~450MB [116] 高清 1080P 60帧 (H.264) - 大小: ~680MB [112] 高清 1080P (H.265) - 大小: ~380MB [80] 高清 1080P 60帧 (H.265) - 大小: ~550MB [64] 高清 720P (H.264) - 大小: ~220MB Audio Streams: [30280] 高品质音频 (AAC) - 大小: ~50MB [30232] 标准音频 (AAC) - 大小: ~30MB这里的[120],[116]等就是画质代码。数字越大通常画质越好但未必比如112是HEVC编码的1080P体积更小。你需要根据你的需求和设备解码能力来选择。例如想在手机上看选116或8060帧更流畅想节省空间且设备支持HEVC选112。步骤2执行下载假设我们选择画质代码1161080P 60帧和音频代码30280高品质。下载命令如下bolly -q 116 -a 30280 BV1xx411c7mD-q 116: 指定视频画质代码。-a 30280: 指定音频音质代码。如果不指定-aBolly会自动选择默认的最高品质音频。执行命令后Bolly会开始解析链接、获取流信息然后启动多线程下载。你会看到实时进度条、下载速度、已用时间等信息。下载完成后视频和音频文件会自动合并使用ffmpegBolly已内置相关逻辑并在当前目录生成一个最终的文件如【4K珍藏】XXXXXX.mp4。注意事项默认情况下文件会保存在你运行命令的当前目录。你可以使用-o参数指定输出目录如-o ~/Videos/Bilibili。使用-f参数可以自定义文件名例如-f “{title} - {owner}”其中{title}和{owner}是模板变量。4.2 场景二使用Cookie下载大会员或高画质内容很多高码率、杜比视界或大会员专享视频在不登录的状态下是无法获取下载链接的。这时就需要用到Cookie。步骤1获取Cookie文件你需要从浏览器中导出当前登录B站后的Cookie。以Chrome浏览器为例可以安装“Get cookies.txt”这类扩展程序。安装后访问B站并确保已登录然后点击扩展图标将Cookie导出为cookies.txt文件。将其保存到一个安全的位置例如~/.config/bolly/cookies.txt。安全提示Cookie文件包含了你的登录凭证务必妥善保管不要分享给他人或上传到任何公开场合。步骤2在下载命令中指定Cookie在下载命令中加入--cookies参数指向你的Cookie文件。bolly --cookies ~/.config/bolly/cookies.txt -q 120 BV1xx411c7mD现在Bolly就能以你的会员身份访问资源成功获取高画质流了。4.3 场景三批量下载UP主全部视频或某个合集这是Bolly自动化能力的集中体现。假设你想下载UP主mid123456的所有视频。方法A直接使用--mid参数bolly --mid 123456这条命令会开始遍历该UP主的所有视频并依次下载。你可以用--start-page和--end-page来控制范围比如只下载前3页bolly --mid 123456 --start-page 1 --end-page 3方法B结合文件列表进行更精细的控制有时你可能需要下载一个特定播单playlist id或收藏夹favorite id。可以先获取到这些合集里所有视频的ID列表。使用info命令查看播单信息或者手动整理出ID列表保存到一个文本文件list.txt中每行一个ID或URL。BV1xx411c7mD av123456789 https://www.bilibili.com/video/BV1yy411d8nF使用-i参数指定输入文件进行批量下载。bolly -i list.txt -q 112Bolly会读取list.txt中的每一行依次下载指定画质的视频。这种方式非常适合管理自己的下载队列。实操心得批量下载时建议在命令中加入--output指定一个独立的目录避免文件混杂。另外可以使用--thread参数调整并发数默认为4在网络条件好且硬盘IO性能强的情况下如NVMe SSD可以适当调高如8或16以提升总体速度但不宜过高以免对B站服务器造成过大压力或被限制。5. 高级技巧与配置文件管理当使用频率变高每次输入一长串参数会很麻烦。Bolly支持配置文件可以让你设置默认选项。5.1 创建与使用配置文件Bolly会默认在以下位置查找配置文件config.yamlUnix-like系统macOS/Linux:$HOME/.config/bolly/config.yamlWindows:%APPDATA%\bolly\config.yaml你可以手动创建这个文件。一个基础的配置示例如下# ~/.config/bolly/config.yaml output: “~/Videos/Bilibili” # 默认下载目录 quality: 112 # 默认视频画质代码 (1080P HEVC) audio-quality: 30280 # 默认音频音质代码 cookies: “~/.config/bolly/cookies.txt” # 默认Cookie文件路径 thread: 8 # 默认下载线程数 retry: 3 # 失败重试次数 file-name-pattern: “{title}” # 默认文件名模板保存后之后运行命令时这些选项就会自动生效。命令行中显式指定的参数会覆盖配置文件中的设置。5.2 文件名模板的灵活运用file-name-pattern参数非常强大它允许你自定义输出文件的命名规则。支持的变量包括{title}: 视频标题{owner}: UP主名称{bvid}: BV号{avid}: AV号{page}: 分P序号{quality}: 画质描述例如设置-f “{owner} - {title}”下载的文件名就会是“某UP主 - 视频标题.mp4”。这能让你的媒体库变得非常整洁有序。5.3 与媒体管理软件联动下载下来的视频你可能希望导入到像Jellyfin、Plex、Infuse这样的媒体库软件中。为了让这些软件正确识别元数据如封面、简介Bolly在下载时会尝试将视频的封面、描述等信息写入到MP4文件的“元数据标签”中。但并非所有播放器都支持读取这些内嵌标签。一个更通用的做法是利用Bolly下载后再使用专门的工具如tinyMediaManager根据文件名尤其是包含UP主和标题的文件名去互联网上刮削更完整的元数据和海报。将Bolly作为可靠的“内容获取”环节整合进你自己的媒体管理流水线这才是发挥其最大价值的方式。6. 常见问题排查与解决方案实录在实际使用中你可能会遇到一些问题。下面是我遇到过的一些典型情况及其解决方法。6.1 下载速度慢或卡在某个进度原因分析可能是网络问题、B站CDN节点问题或者线程数设置不合理。解决方案检查网络尝试用浏览器直接播放该视频看是否同样缓冲缓慢。更换网络环境如果使用移动网络尝试切换到Wi-Fi或反之。调整线程数使用--thread 1尝试单线程下载排除多线程可能导致的连接不稳定问题。如果单线程正常再逐步增加线程数测试。稍后重试有时是B站服务器临时负载高可以过一段时间再试。6.2 提示“未找到视频流”或“需要大会员”原因分析最可能的原因是Cookie未设置或已过期。对于高画质如4K、杜比视界、1080P高码率和部分番剧必须使用有效的登录Cookie。解决方案确认Cookie有效性在浏览器中访问B站确认账号处于登录状态且能正常播放目标画质的视频。重新导出Cookie使用浏览器扩展重新导出cookies.txt文件旧的Cookie可能已失效。检查命令参数确保在下载命令中正确使用了--cookies /path/to/cookies.txt参数且路径无误。尝试更低画质如果不追求高画质可以尝试下载无需会员的流畅或720P画质如-q 64。6.3 合并音视频时失败FFmpeg错误原因分析Bolly内部调用FFmpeg进行音视频合并。失败可能是由于下载的音视频流不完整、文件损坏或者系统缺少必要的FFmpeg库尽管Bolly尝试内置。解决方案检查下载文件在输出目录中查找.video和.audio结尾的临时文件。如果它们大小异常小如几KB说明下载可能未完成。重新下载删除不完整的临时文件重新执行下载命令。Bolly支持断点续传会重新下载缺失的部分。手动合并如果临时文件看起来正常可以尝试手动使用FFmpeg合并。首先确保系统安装了FFmpeg然后执行ffmpeg -i “video_file.video” -i “audio_file.audio” -c copy “output.mp4”报告Issue如果问题持续可以保留临时文件和完整的命令行输出日志到项目的GitHub仓库提交Issue帮助开发者定位问题。6.4 批量下载时某个视频失败导致中断原因分析默认情况下Bolly遇到错误会停止。在批量下载长列表时我们希望它能跳过错误继续下一个。解决方案使用--skip参数。当某个视频下载失败时Bolly会记录错误并继续处理列表中的下一个视频。bolly -i list.txt --skip所有成功和失败的任务都会在最后有一个总结报告。6.5 在Windows PowerShell中执行文件名乱码原因分析PowerShell的默认编码可能与Bolly输出的Unicode字符如中文不匹配。解决方案尝试在Windows Terminal或CMD中运行命令。或者在PowerShell中执行命令前先运行chcp 65001将控制台代码页改为UTF-8。使用-f参数指定一个纯英文的文件名模板避免中文。问题现象可能原因排查步骤与解决方案速度极慢/无速度1. 网络问题2. 线程数过高被限速3. 资源热度低CDN无缓存1. 测试网络切换环境2. 降低--thread数 (如设为1或2)3. 尝试下载其他热门视频对比提示“access denied”或“403”1. Cookie失效或未提供2. IP地址被临时限制1. 更新Cookie文件2. 等待一段时间再试或更换网络IP下载完成但无法播放1. 音视频合并失败2. 播放器不支持该编码格式1. 检查是否有.video/.audio临时文件尝试手动合并2. 尝试使用VLC、PotPlayer等万能播放器或转换格式命令执行报“command not found”Bolly可执行文件不在系统PATH中1. 使用完整路径执行如./bolly2. 将Bolly所在目录添加到系统PATH环境变量7. 总结与最佳实践建议经过这段时间的深度使用Bolly已经成了我处理B站视频素材的标配工具。它的强大之处在于将复杂的功能封装在了简洁的命令行接口之下既满足了极客对效率和自动化的追求又通过清晰的文档和提示让新手也能快速上手。最后分享几条我个人总结的最佳实践希望能帮你用得更加顺手Cookie管理是核心专门建立一个文件夹存放你的cookies.txt并在配置文件中设置好路径。定期如每月更新一次Cookie避免因过期导致下载失败。切勿将此文件上传至任何公开的Git仓库或网盘。善用信息探测info命令在批量下载前先对列表中的头几个视频执行info确认目标画质和音质可用避免下载到一半才发现大会员资源无法获取。建立项目化下载目录不要把所有视频都堆在“下载”文件夹。我习惯按主题或UP主建立文件夹然后在配置文件中设置output目录为一个基础路径实际下载时再用-o参数指定到具体项目文件夹。例如基础路径是~/Media/Bilibili某个系列教程就下载到~/Media/Bilibili/Go语言教程下。理性使用批量下载虽然Bolly支持批量但请尊重创作者和平台。不要用于大规模爬取避免在短时间内发起大量请求这既可能对你的账号造成风险也可能给B站服务器带来不必要的压力。合理安排下载任务间隔进行。关注项目更新开源项目是不断迭代的。时不时去GitHub页面看看是否有新版本发布新版本通常会修复已知问题、增加对新功能如B站新推出的编码格式的支持甚至提升下载稳定性。工具的本质是提升效率。Bolly正是这样一个将复杂过程简化的优秀工具。把它融入到你的内容收集、学习或创作流程中相信它能为你节省大量时间让你更专注于内容本身。如果在使用过程中发现了新的技巧或遇到了独特的问题也欢迎在社区里分享交流。