B站视频全自动分析:下载视频+音频 → Whisper时间轴字幕 → 关键帧画面分析 → 内容总结。当用户发送B站视频链接(bilibili.com或b23.tv短链)并想了解视频内容时触发。包括"帮我看看这个视频"、"这个视频讲了啥"、"分析一下这个视频"等场景。
B(bilibili-browse-videos).是一项面向实际任务的技能,主要用于SkillHub sult : bilibili-browse-videos;维护者: kilb / QClaw Agent。
从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
SkillHub slug:
bilibili-browse-videos维护者: kilb / QClaw Agent 变更日志: 见CHANGELOG.md
用户发送B站链接
│
▼
┌─────────────────┐
│ 1. 解析短链→BVID │ 支持 b23.tv 短链 / bilibili.com 长链 / 纯 BV号
└───────┬─────────┘
▼
┌─────────────────┐
│ 2. 下载视频+音频 │ bilibili-api-python 获取URL → aiohttp+Referer 下载
│ + 转WAV │ ffmpeg 转 16kHz mono WAV
│ + 提取关键帧 │ ffmpeg fps=0.5 每2秒1帧
└───────┬─────────┘
▼
┌─────────────────┐
│ 3. Whisper字幕 │ medium 模型,中文识别,带时间戳分段
└───────┬─────────┘
▼
┌─────────────────┐
│ 4. 画面分析 │ 选取6-11帧,image工具逐帧分析
└───────┬─────────┘
▼
┌─────────────────┐
│ 5. 综合总结 │ 字幕+画面 → 视频信息+完整字幕+画面描述+要点总结
│ → 飞书发送 │
└─────────────────┘
| 依赖 | 说明 |
|---|---|
| Python venv | ~/.qclaw/workspace/venv(优先)或 Conda base |
| bilibili-api-python | pip install bilibili-api-python (≥17.4) |
| openai-whisper | pip install openai-whisper,medium 模型已缓存本地 |
| ffmpeg | 自动检测:PATH > FFMPEG_PATH 环境变量 > 默认安装路径 |
| aiohttp | pip install aiohttp |
支持三种输入格式:
https://b23.tv/xxxxxhttps://www.bilibili.com/video/BV1xxxxxBV1xxxxximport urllib.request, re
def parse_bvid(text):
text = text.strip()
if re.match(r'^BVw+$', text):
return text
req = urllib.request.Request(text)
req.add_header("User-Agent", "Mozilla/5.0")
resp = urllib.request.urlopen(req)
m = re.search(r'BVw+', resp.url)
return m.group(0) if m else None
运行脚本:
python scripts/download_bili.py
脚本完成以下工作:
Video.get_download_url(0)Referer: https://www.bilibili.com,否则 403)fps=0.5 每2秒提取1帧 JPG文件命名规则:全部用 BVID,不用视频标题(标题含特殊字符会导致 ffmpeg 失败)
输出路径:~/.qclaw/workspace/bili_downloads/
| 文件 | 说明 |
|---|---|
{bvid}_video.m4s |
原始视频流 |
{bvid}_audio.m4s |
原始音频流 |
{bvid}.wav |
16kHz mono WAV |
frames_{bvid}/frame_001.jpg ... |
关键帧序列 |
缓存:已下载的文件不会重复下载(脚本检查文件是否存在)
运行脚本:
python scripts/transcribe.py
medium(精度与速度平衡,本地已缓存)zh(强制中文识别)01. 00:00.00 --> 00:02.80 字幕内容 02. 00:02.80 --> 00:04.48 字幕内容 ... 总段数: N
注意:medium 模型可能输出繁体字。如需简体可安装 opencc 转换。
用 image 工具分析关键帧。帧数选择策略:
| 视频时长 | 选取帧数 | 策略 |
|---|---|---|
| <15秒 | 全部 | 短视频帧少,全发 |
| 15-60秒 | 8-11帧 | 均匀间隔选取 |
| >60秒 | 6-8帧 | 选取关键时间点 |
# 帧选取示例:从N帧中均匀选8帧
import os
frames = sorted([f for f in os.listdir(frames_dir) if f.endswith('.jpg')])
step = max(1, len(frames) // 8)
selected = frames[::step][:8]
然后用 image 工具:
image(images=[frame1, frame3, ...], prompt="按顺序描述每帧画面内容,包括人物、场景、文字、UI元素等")
整合字幕和画面分析结果,输出结构化总结:
📺 视频信息 标题:xxx | UP主:xxx | 时长:xx秒 📝 完整字幕(时间轴) 01. 00:00.00 --> 00:02.80 xxx ... 🖼 画面内容 - 00:02 女性客服讲解王者荣耀亲密度恢复功能 - 00:08 游戏UI演示界面 ... 💡 内容要点 1. 要点一 2. 要点二 3. 要点三
通过 message 工具发送到飞书。
Referer: https://www.bilibili.com,否则返回 403/、:、?)会导致 ffmpeg 和文件系统错误~/.qclaw/workspace/venv,其次 Conda base| 问题 | 原因 | 解决方案 |
|---|---|---|
| 下载 403 | 未带 Referer 头 | 确认 headers 含 Referer: https://www.bilibili.com |
| ffmpeg 找不到 | 未安装或不在 PATH | 安装 ffmpeg 或设置 FFMPEG_PATH 环境变量 |
| Whisper 报错找不到 ffmpeg | 同上 | 脚本已自动检测并设置 PATH |
| 文件名乱码 | 视频标题含特殊字符 | 文件名统一用 BVID,不用标题 |
| GBK 编码错误 | Windows 控制台编码 | 设置 PYTHONIOENCODING=utf-8 |
| 下载速度慢 | B站限速 | 可尝试切换 CDN baseUrl |
相关专题
热门下载
相关下载
精品课程
共0课时 | 0人学习
共0课时 | 0人学习
共0课时 | 0人学习