B 站视频下载
适用场景
用户提供 B 站视频链接(含 https://www.bilibili.com/video/BVxxxx 或短链),要求下载为本地 mp4 文件。
关键前置(必读)
- 运行环境:用隔离的 Python venv 执行脚本,不要污染系统环境。
- 解释器:
C:\Users\sky\.workbuddy\binaries\python\envs\default\Scripts\python.exe - 若该 venv 不存在,先创建:
C:\Users\sky\.workbuddy\binaries\python\versions\3.13.12\python.exe -m venv C:\Users\sky\.workbuddy\binaries\python\envs\default
- 解释器:
- 依赖自包含:脚本会自动
pip install yt-dlp与imageio-ffmpeg,并把 ffmpeg 二进制缓存为ffmpeg.exe,无需手动装 ffmpeg。 - B 站是 DASH 分离流:视频、音频是分开的,必须用 ffmpeg 合并。脚本已处理(yt-dlp 合并 + 分离分片兜底合并)。
- stdout 可能不回显:本环境 Bash 的
rm/tail/cat/grep常缺失。脚本会把结果同时写入输出目录的download_result.txt,用 Read 工具确认结果,不要依赖终端回显。 - 删除文件用 Python(
os.remove)或 PowerShell(Remove-Item),别用 Bash 的rm。
步骤
1. 取出下载链接
从用户消息中提取完整 B 站 URL(保留 ?vd_source= 等参数无妨,也可删掉)。
2. 运行下载脚本
在 Agent 工具里执行(用隔离 venv 的 python,不要在 Bash 里裸跑 python):
<venv_python> <skill_dir>/download_bilibili.py "<B站URL>" --out <输出目录>
参数:
url(必填):视频链接--out:输出目录,默认./bilibili_downloads--quality:清晰度,默认bv*+ba/b(最佳视频+最佳音频)。需要限速/降清晰度可改bv[height<=720]+ba/b--cookies:cookie 文件路径,仅当视频提示"需登录/版权限制"时才需要
3. 确认结果
读取 <输出目录>/download_result.txt:
OK|<完整路径>|<大小>MB→ 成功,用 present_files 展示该 mp4ERROR|...→ 失败,按提示排查(多为网络/需要 cookies/链接失效)
4. 清理(可选)
成功后可删除 download_result.txt 及任何残留的 *.f3*.mp4/*.f3*.m4a 分片(正常情况下脚本已自动清理)。
格式统一(重要)
脚本在合并后会自动把成品统一转码/封装为 H.264 + AAC 的 mp4:
- 若 B 站源已是 H.264 + AAC(最常见),直接保留,不做重编码。
- 若源是 H.265/HEVC、AV1 等手机兼容性差的编码,自动重编码为 H.264 + AAC(文件体积可能变大,属正常)。
- 目的:保证下载到手机后任意播放器都能直接打开,避免"无法解析"。
- 无需在下载时额外操作,这是默认行为。
常见问题
- 只下到无声/无画面的分片:说明 ffmpeg 未被 yt-dlp 识别,脚本的兜底合并会补上;若仍有问题检查
~/.workbuddy/binaries/ffmpeg/ffmpeg.exe是否存在。 - 提示"会员/版权/地区限制":该视频需要登录态,让用户提供 cookies.txt(
--cookies传入)。 - 下载整个合集/ playlist:默认已加
--no-playlist只下当前单集;如要下整集去掉该参数并在 URL 用合集页。 - 手机打不开 / 无法解析:旧版本可能下载到 HEVC/AV1 编码;升级后的 skill 已默认转 H.264+AAC,重新下载即可。若仍异常,检查文件是否完整。
产出
- 输出目录下的
<视频标题>.mp4(完整音视频,已统一为 H.264+AAC 手机通用格式) - 用 present_files 把 mp4 展示给用户