ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

B站视频离线保存指南:bilidown下载与FFmpeg合并实战

2026/9/20 16:03:17 拓冰建站 浏览量
B站视频离线保存指南:bilidown下载与FFmpeg合并实战 1. 为什么越来越多人开始折腾B站视频离线保存1.1 在线收藏的脆弱性你收藏夹里的视频真的属于你吗我自己的B站收藏夹里躺着大概两千多个视频从早期的鬼畜区经典到后来的知识区课程跨度差不多有七八年。前两年有一次想翻一个收藏了很久的冷门纪录片点进去发现“视频已失效”UP主账号也注销了。那一刻我才意识到收藏夹本质上只是一个书签视频文件从来不在我手里。这个感受相信很多人都有。你收藏了一个讲Python异步编程的教程想着以后慢慢看结果某天UP主因为各种原因删稿了你缓存了一部番剧准备通勤路上看结果版权到期下架缓存也跟着失效。在线内容的生命周期不由你控制这是所有流媒体平台的共同特征不是B站独有的问题。所以“离线观影”这件事的核心诉求其实很朴素把我想反复看的内容变成我本地硬盘上一个实实在在的文件。这个文件不会因为平台策略调整而消失不会因为网络波动而卡顿也不会因为会员到期而看不了。1.2 bilidown这类工具到底解决了什么问题bilidown是一个针对B站视频的下载工具它的定位很明确输入视频链接或BV号输出一个可以在本地播放器里直接打开的完整视频文件。听起来简单但实际用起来你会发现B站的视频分发机制比想象中复杂得多。B站网页端播放视频时并不是给你一个完整的mp4文件而是把视频流和音频流分开传输视频通常是m4s格式的碎片音频也是独立的m4s。你在网页上能正常观看是因为播放器在浏览器里实时把两路流合在一起了。但如果你直接去翻浏览器的缓存目录找到的只是一堆加密或半加密的碎片文件单独拿出来根本没法用。bilidown这类工具做的事情就是帮你完成“解析地址—分别下载视频流和音频流—合并成标准mp4”这一整套流程。它把原本需要手动折腾的步骤自动化了对于不想碰命令行的人来说这是最大的价值。1.3 适合哪些人参考这套方案我把使用者大致分成三类。第一类是“内容囤积型”看到好的教程、纪录片、演讲就想存下来硬盘里已经攒了几百G视频这类人对画质和批量处理有要求。第二类是“通勤观影型”主要需求是把番剧、电影下载到手机或平板路上没网也能看这类人更在意操作简单和文件体积。第三类是“素材收集型”做视频剪辑或二创的人需要从B站提取特定片段作为素材这类人对时间戳裁剪和格式转换有额外需求。不管你属于哪一类核心流程是一样的拿到视频地址下载视频流和音频流合并然后按需转码或裁剪。区别只在于你用什么工具、花多少时间、对画质有什么要求。2. 动手之前必须搞清楚的几个技术前提2.1 B站的视频流分发机制为什么不能直接右键另存为很多人第一次尝试下载B站视频时会习惯性地在网页上右键找“视频另存为”结果发现根本没有这个选项。这不是B站故意为难你而是现代流媒体平台的通用做法。B站采用的是DASHDynamic Adaptive Streaming over HTTP协议简单说就是把一个视频切成无数个小片段每个片段有不同清晰度的版本播放器根据你的网速实时选择最合适的片段来播放。你看到的“1080P”不是一个完整的1080P文件而是播放器从一堆不同码率的片段里挑出来的组合。这种机制的好处是播放流畅、自适应网速坏处是你没法直接拿到一个完整文件。视频流和音频流是分开的视频流里没有声音音频流里没有画面。你需要分别下载这两路流然后用工具把它们合并起来。注意B站不同清晰度对应的视频流地址是不同的1080P高码率、1080P、720P、480P各有各的地址。你选择下载哪个清晰度就要用对应的地址去请求。2.2 登录态与Cookie为什么有些视频解析出来是空地址这是新手最容易踩的坑。你兴冲冲地复制了一个视频链接丢进下载工具结果提示“解析失败”或者“地址为空”。十有八九是因为你没有提供登录态。B站对未登录用户的访问是有限制的。未登录状态下你只能拿到最低清晰度通常是360P或480P的视频流地址有些视频甚至完全不给地址。而登录之后你能拿到的清晰度取决于你的账号等级和是否开通大会员。1080P高码率需要登录4K和8K需要大会员。所以正确的做法是在浏览器里登录B站账号然后从开发者工具里把Cookie复制出来填到下载工具的配置里。这样工具在请求视频地址时就相当于带着你的登录身份去请求能拿到的清晰度就和你网页上看到的一样。提示Cookie是有有效期的一般几天到几周不等。如果之前用得好好的突然解析失败了第一件事就是重新获取Cookie。2.3 视频流与音频流的格式关系m4s到底是什么m4s是B站用来封装视频和音频片段的容器格式本质上它是基于ISO Base Media File FormatISOBMFF的和mp4算是亲戚。你可以把m4s理解成“被切碎的mp4片段”单独一个片段可能只有几秒钟的内容。当你用下载工具请求视频地址时B站返回的通常是一个m4s文件的URL。这个m4s文件里可能包含完整的视频流所有片段拼在一起也可能只是一个片段取决于你请求的方式。大多数下载工具会请求一个完整的视频流文件下载下来是一个大的m4s然后和音频m4s合并。合并的原理并不复杂视频m4s里有视频轨道音频m4s里有音频轨道用一个支持多轨道的容器比如mp4把它们装在一起就行了。FFmpeg是干这个活最常用的工具一条命令就能搞定。2.4 清晰度、码率与文件体积的取舍逻辑下载之前你得想清楚一件事你到底需要多高的画质。这不是越高越好因为文件体积会成倍增长。我拿一个10分钟的知识区视频做过测试不同清晰度的文件体积大概是这样的清晰度分辨率大致码率10分钟文件体积480P854x480约0.8Mbps约60MB720P1280x720约1.5Mbps约110MB1080P1920x1080约3Mbps约220MB1080P高码率1920x1080约6Mbps约450MB4K3840x2160约15Mbps约1.1GB如果你只是通勤路上在手机上看720P完全够用文件小、下载快、省空间。如果你是做视频剪辑素材那建议直接上1080P高码率或4K因为后期还要二次压缩源文件质量越高越好。如果是收藏经典番剧或电影1080P高码率是比较平衡的选择。3. bilidown实操全流程从链接到本地文件3.1 工具获取与环境准备bilidown是一个开源项目你可以在GitHub上找到它的源码和发布版本。它提供了Windows、macOS和Linux的预编译包下载对应平台的压缩包解压就能用不需要额外安装Python环境。如果你习惯用命令行也可以直接clone源码然后运行。项目本身是Python写的依赖不算多主要是requests、ffmpeg-python之类的库。不过对于大多数用户来说直接用打包好的可执行文件最省事。注意下载工具时务必从官方仓库或可信渠道获取不要随便在网上搜一个“bilidown下载”就点进去。第三方打包的版本有可能被植入恶意代码尤其是需要你输入账号密码的那种绝对不要用。除了bilidown本身你还需要确保系统里有FFmpeg。bilidown在合并视频流和音频流时会调用FFmpeg如果系统PATH里找不到ffmpeg命令合并步骤会失败。Windows用户可以把ffmpeg.exe放到bilidown同目录下或者添加到系统环境变量里。macOS用户用brew install ffmpeg就行Linux用户用包管理器安装。3.2 获取视频链接与BV号几种不同的输入方式bilidown支持多种输入方式最常用的是直接粘贴视频链接。你在B站网页上打开一个视频地址栏里类似https://www.bilibili.com/video/BV1xx411c7mD这样的链接直接复制粘贴到bilidown的输入框里就行。如果你在手机上看到喜欢的视频可以点分享按钮复制链接发到电脑上再粘贴。B站的分享链接通常是短链bilidown也能识别它会自动跳转解析。还有一种情况是你只知道BV号比如别人口头告诉你的。BV号是B站视频的唯一标识格式是“BV”开头加一串字符。你可以直接把BV号粘贴进去bilidown会自动补全成完整链接。对于多P视频一个稿件里有多个分Pbilidown通常支持选择下载哪一P或者全部下载。如果你要下载整个合集建议先看看合集里有多少P避免一次性下载太多导致磁盘空间不够。3.3 配置Cookie与清晰度选择前面说了Cookie的重要性这里说具体怎么操作。在浏览器里登录B站后按F12打开开发者工具切换到“网络”标签页刷新一下页面找到任意一个请求在请求头里找到Cookie字段把整段内容复制出来。这段Cookie通常很长包含SESSDATA、bili_jct、DedeUserID等字段。你不需要理解每个字段的含义整段复制就行。bilidown的配置界面里一般有一个“Cookie”输入框粘贴进去保存即可。清晰度选择方面bilidown会列出当前账号能获取到的所有清晰度选项。如果你登录了大会员账号会看到4K和8K的选项。选择你需要的清晰度然后点击下载。提示如果你只是想下载一个视频试试水建议先用720P跑一遍完整流程确认工具能正常工作、FFmpeg能正常合并再换成高清晰度下载大文件。3.4 下载与合并bilidown背后的自动化流程点击下载之后bilidown在后台做的事情大致是这样的第一步解析视频页面提取出视频流和音频流的真实地址。这一步需要带上你配置的Cookie否则拿不到高清晰度地址。第二步分别下载视频流和音频流。视频流通常是一个较大的m4s文件音频流较小。下载速度取决于你的网络和B站服务器的响应速度一般能跑满带宽。第三步调用FFmpeg合并。bilidown会构造一条类似这样的命令ffmpeg -i video.m4s -i audio.m4s -c copy output.mp4-c copy的意思是直接复制流不做重新编码这样合并速度极快几秒钟就能完成而且画质无损。合并完成后你会得到一个标准的mp4文件可以用任何播放器打开。第四步清理临时文件。bilidown通常会自动删除下载的m4s碎片文件只保留最终的mp4。如果你需要保留原始流文件可以在设置里关掉自动清理。3.5 批量下载与命名规则设置如果你要下载一个UP主的整个系列视频一个个复制链接太慢了。bilidown支持批量输入你可以把多个链接每行一个粘贴进去它会依次解析和下载。命名规则也很重要。默认情况下bilidown可能用BV号作为文件名但BV号对你来说没有意义。你可以在设置里自定义命名模板比如“{UP主名}-{视频标题}-{清晰度}.mp4”。这样下载下来的文件一目了然找起来方便。对于多P视频建议在命名模板里加上分P序号比如“{视频标题}-P{分P序号}.mp4”否则多个分P下载下来会互相覆盖。注意视频标题里可能包含斜杠、冒号等特殊字符这些字符在文件名里是非法的。好的下载工具会自动替换这些字符但如果你的命名模板里手动加了特殊字符可能会导致保存失败。4. 那些官方文档不会告诉你的踩坑经验4.1 解析失败的五种常见原因与排查顺序解析失败是最高频的问题我总结了一个排查顺序按这个顺序走基本能定位到原因排查项可能原因解决方法Cookie是否有效登录态过期重新获取Cookie并更新视频是否可访问地区限制或稿件失效在浏览器里确认能否正常播放清晰度是否可选账号权限不足降低清晰度或开通大会员网络是否正常DNS污染或连接超时切换网络环境重试工具版本是否过旧B站接口变更更新到最新版本我遇到最多的情况是Cookie过期。有时候B站会悄悄让你的登录态失效但网页上你还能看视频因为浏览器里有其他缓存机制但下载工具拿到的Cookie已经无效了。这时候重新登录一次B站重新复制Cookie就能解决。4.2 合并后音画不同步原因与修复方法音画不同步是第二常见的问题。你下载了一个视频合并之后发现声音比画面快了半秒或者慢了半秒。这种情况通常是因为视频流和音频流的时间戳基准不一致。FFmpeg在合并时默认会尽量对齐时间戳但有时候B站返回的视频流和音频流起始时间有微小差异。解决方法是用FFmpeg的-async参数做音频重采样或者用-itsoffset手动调整偏移量。ffmpeg -i video.m4s -itsoffset 0.5 -i audio.m4s -c copy output.mp4上面这条命令的意思是让音频延迟0.5秒开始。具体偏移多少需要你试几次一般0.1到0.5秒之间。还有一种可能是视频流本身有问题比如下载过程中网络中断导致文件不完整。这种情况只能重新下载。4.3 大会员视频与充电专属视频的处理边界大会员视频只要你登录了大会员账号下载流程和普通视频没有区别。但充电专属视频也就是UP主设置的“充电才能看”的视频情况不同这类视频的访问权限和普通视频不一样下载工具不一定能直接解析。从技术角度说充电视频的地址请求需要额外的鉴权参数这些参数和你的充电状态绑定。如果你确实充电了理论上可以拿到地址但工具是否支持就是另一回事了。而且这类视频通常有更严格的访问控制下载难度较大。我的建议是对于充电专属视频优先在B站客户端内观看。如果确实需要离线保存先确认工具是否明确支持这类视频不要盲目尝试。4.4 下载速度优化多线程与分段下载的取舍bilidown默认可能是单线程下载速度取决于你到B站服务器的连接质量。如果你觉得速度不理想可以看看工具是否支持多线程下载。多线程的原理是把一个文件分成多个段同时下载不同段最后拼起来。理论上线程越多速度越快但实际上受限于B站服务器的限速策略和你的带宽。我实测下来4到8个线程是比较合理的范围再多提升不明显反而容易触发服务器的限流。另外下载时段也有影响。晚上高峰期B站服务器负载高下载速度可能不如凌晨或上午。如果你要下载大文件可以挑个人少的时间段。4.5 存储规划下载下来的视频怎么管理下载一时爽硬盘火葬场。我见过太多人下载了几百G视频结果硬盘满了又舍不得删最后只能再买一块硬盘。我的做法是按内容类型分目录教程类放一个目录番剧类放一个目录素材类放一个目录。每个目录里再按UP主或系列分子目录。文件名统一用“标题-清晰度”的格式方便搜索。另外建议定期清理。有些视频你下载的时候觉得会看实际上再也没打开过。可以设一个规则下载后三个月没看过的考虑删掉或者转移到冷存储比如外置硬盘。5. 从下载到观看离线视频的后续处理5.1 格式转换什么时候需要转码什么时候不需要bilidown合并出来的mp4文件绝大多数播放器都能直接播放不需要转码。但有两种情况你可能需要转码第一种是设备兼容性问题。比如某些老旧的电视或车机只支持特定的编码格式比如H.264 Baseline Profile而B站的视频可能是H.265或AV1编码。这时候需要用FFmpeg转成兼容格式。ffmpeg -i input.mp4 -c:v libx264 -profile:v baseline -c:a aac output.mp4第二种是文件体积太大你想压缩一下。比如4K视频在手机上看没必要可以转成1080P体积能缩小到四分之一左右。提示转码是有损的会损失画质。如果原文件你打算长期保存建议保留原始版本转码版本另外存一份用于移动设备。5.2 字幕处理内嵌字幕与外挂字幕的选择B站视频的字幕通常是外挂的也就是单独的ass或srt文件。bilidown是否自动下载字幕取决于工具版本和设置。如果你需要字幕可以在下载时勾选“下载字幕”选项。外挂字幕的好处是可以随时开关、调整样式、修改内容。坏处是文件多了容易丢而且有些播放器不自动加载同名字幕。如果你要把视频发给别人外挂字幕可能会丢失。内嵌字幕就是把字幕烧进画面里优点是走到哪都能显示缺点是没法关闭而且转码会损失画质。我的建议是自己收藏就保留外挂字幕要分享给别人就内嵌。5.3 在手机、平板、电视上播放的最佳实践手机和平板上播放推荐用VLC或MX Player这类支持广泛格式的播放器。把视频文件传到设备里用播放器打开就行。如果设备支持OTG也可以直接插U盘播放。电视上播放稍微麻烦一点。如果你的电视是智能电视可以装一个支持局域网播放的App比如Kodi然后在电脑上开一个共享文件夹电视通过局域网访问。这样不需要把文件拷来拷去。另一种方案是用投屏。但投屏本质上是把手机上的画面镜像到电视手机不能熄屏而且画质可能打折。对于长时间观看还是本地播放更靠谱。5.4 建立个人离线库的长期维护思路如果你打算长期做离线收藏建议建立一个简单的索引。可以用Excel或Notion做一个表格记录每个视频的标题、UP主、下载日期、清晰度、文件路径。这样你想找某个视频时搜一下表格就知道在哪个硬盘的哪个目录。另外定期备份很重要。硬盘是会坏的尤其是机械硬盘用久了可能出现坏道。重要的视频建议至少存两份一份在电脑里一份在外置硬盘里。如果特别重要可以考虑云存储但视频文件通常很大云存储成本不低。我自己的做法是教程类和素材类视频存两份番剧类存一份因为番剧通常还能在其他渠道找到。这样既保证了重要内容的安全又不会让备份成本失控。6. 关于离线观影这件事的一些个人体会折腾B站视频下载这件事说到底是在对抗一种不确定性。你喜欢的视频可能明天就没了你收藏的教程可能下个月就失效了你缓存的内容可能因为版权到期而无法播放。把视频存到本地是一种最朴素的“拥有感”。但我也想说下载不是目的观看才是。我见过太多人包括我自己陷入“下载了就等于看了”的幻觉硬盘里攒了几百G视频真正看完的不到十分之一。所以现在我的做法是只下载那些我确定会反复看的内容比如某个讲得很好的课程、某部想收藏的纪录片、某个做视频时要用的素材片段。其他的就让它在收藏夹里待着吧需要的时候再说。工具只是工具bilidown也好其他下载器也好它们帮你把视频从云端搬到本地但看不看、怎么用还是取决于你自己。希望这篇内容能帮你少走一些弯路把时间花在真正有价值的内容上。