Stream Clipper - 直播录制与切片智能剪辑工具
核心功能:
- 直播录制:实时录制 + 30分钟自动分段 + 弹幕录制
- 录播切片:弹幕密度分析 + 语义理解 + 主播风格模板 = 高质量直播切片
工作模式
模式一:直播实时录制 ⭐ 新功能
适合录制正在进行或即将开始的直播,支持自动分段和弹幕录制。
核心特性:
- ✅ 30分钟自动分段 - 防止硬盘溢出,方便管理
- ✅ 实时弹幕录制 - 同时保存弹幕内容
- ✅ 优雅停止 - Ctrl+C 停止当前分段,不丢失数据
- ✅ 自动精彩片段切片 - 录制完成后自动生成切片
使用场景:
- 录制 VTuber 直播
- 录制游戏赛事
- 录制演唱会/活动直播
- 录制任何B站直播间
快速开始:
# 方式1: 完整工作流(录制 + 自动切片)
python scripts/record_workflow.py "https://live.bilibili.com/55"
# 方式2: 仅录制
python scripts/smart_record.py "https://live.bilibili.com/55" -t 30
# 方式3: 录制完成后手动切片
python scripts/auto_clipper.py --list ./recordings/recorded_list_xxx.json
文件输出结构:
recordings/
├── 主播_标题_时间_part001.mp4 # 第1段视频
├── 主播_标题_时间_part001_danmaku.xml # 第1段弹幕
├── 主播_标题_时间_part002.mp4 # 第2段视频
├── 主播_标题_时间_part002_danmaku.xml # 第2段弹幕
├── recorded_list_xxx.json # 录制列表
└── clips_output/ # 精彩片段输出
├── segment_001/
│ ├── clip_001/
│ └── clip_002/
└── segment_002/
模式二:录播回放切片
适合下载已结束的直播回放,进行分析和切片。
核心特性:
- ✅ 完整回放下载 - 下载整个直播回放
- ✅ 弹幕分析 - 基于弹幕密度识别精彩时刻
- ✅ 语义分析 - 理解字幕内容结构
- ✅ 智能切片 - 自动生成最优切片方案
使用场景:
- 剪辑已结束的直播
- 制作 VTuber 精华合集
- 提取游戏高光时刻
- 制作教学/知识切片
工作流程
模式一:直播录制流程
阶段 1: 启动录制
目标: 开始录制直播并自动分段
-
获取直播间 URL
https://live.bilibili.com/55 -
执行录制脚本
python3 scripts/smart_record.py <直播间URL> -o ./recordings -t 30 -
录制过程
- 每30分钟自动分段
- 实时显示录制进度
- 同时保存弹幕配置
输出:
录制中... 15.6% (4/30分钟)
文件: ./recordings/主播_标题_20260206_143720_part001.mp4
阶段 2: 录制完成
目标: 整理录制文件并准备切片
-
生成录制列表
{ "room_url": "https://live.bilibili.com/55", "record_time": "2026-02-06T14:37:20", "segment_minutes": 30, "files": [ "./recordings/part001.mp4", "./recordings/part002.mp4", "./recordings/part003.mp4" ] } -
询问是否切片
录制完成!共 3 个分段 是否继续自动切片精彩片段? (y/n): y
阶段 3: 自动精彩片段切片
目标: 自动分析并生成精彩片段
-
分析每个分段
python3 scripts/auto_clipper.py --list recorded_list_xxx.json -
生成推荐片段(每段3个)
- 高能时刻:弹幕密度最高的片段
- 搞笑片段:翻车/搞笑时刻
- 团战/精彩操作:游戏高光
-
自动剪辑
- 调用 clip_and_burn.py
- 烧录弹幕到视频
- 生成 info.json
输出:
分段 1: 找到 3 个精彩片段
1. 高能时刻:精彩操作 (03:00-05:00)
2. 搞笑片段:主播翻车 (08:00-10:00)
3. 团战爆发:激烈对决 (15:00-17:00)
模式二:录播切片流程
阶段 1: 环境检测与初始化
目标: 确保所有依赖已安装并加载主播模板
-
检测必需工具
yt-dlp --version # 视频下载 ffmpeg -version # 视频处理 python3 -c "import yt_dlp, pysrt, yaml, requests" # Python依赖 -
检查 biliup(用于上传)
pip show biliup # 或 biliup --version -
加载或创建主播模板
- 检查
config/streamer_templates.yaml - 如果主播不在模板中,询问用户创建新模板
- 检查
模板交互示例:
检测到新的主播: Neurosama
是否创建主播模板? (y/n): y
主播风格背景介绍: AI虚拟主播,英语流,擅长音游,有很多梗
著名梗/口头禅: 请告诉Vedal我出问题了!, 我是AI不是人类, 足球梗, swam
推荐切片时长: 1-3分钟
直播间链接: https://live.bilibili.com/...
个人空间链接: https://space.bilibili.com/...
阶段 2: 下载与字幕提取 ⭐ 关键步骤
目标: 下载视频、弹幕,并必须提取字幕
⚠️ 重要前提: 切片前必须完成字幕提取!没有字幕无法生成基于内容的标题。
-
获取直播/录播 URL
- B站:
https://www.bilibili.com/video/BVxxxxx或https://live.bilibili.com/xxxxx - YouTube:
https://www.youtube.com/watch?v=xxxxx或直播回放
- B站:
-
执行下载脚本
python3 scripts/download_stream.py <URL> --with-danmaku --with-subtitle -
下载内容
- 视频文件 (MP4, 最高1080p)
- 弹幕文件 (XML/JSON 格式)
- 字幕文件 (如果平台提供)
-
提取字幕(必须)
# 方式1: 使用 Whisper 提取完整字幕 python3 scripts/extract_subtitles.py <video.mp4> --output <video.srt> # 方式2: 仅提取关键片段(快速) python3 scripts/extract_subtitles.py <video.mp4> --segments-only --output segments/字幕提取原理:
- 使用 OpenAI Whisper 模型
- 支持多语言识别
- 生成 SRT/VTT 格式
- 可选:仅提取高密度时段片段(节省算力)
输出(三个必备文件):
./downloads/
├── <video_id>.mp4 # 视频 [必需]
├── <video_id>.danmaku.xml # 弹幕 [必需]
└── <video_id>.srt # 字幕 [必需]
检查清单:
- 视频文件存在且可播放
- 弹幕文件存在且非空
- 字幕文件存在且包含内容
如果字幕提取失败: 无法继续切片,必须先解决字幕问题!
阶段 3: 弹幕密度分析
目标: 分析弹幕密度分布,识别高互动时间点
-
解析弹幕文件
python3 scripts/analyze_danmaku.py <danmaku.xml> -
计算弹幕密度
- 按时间窗口统计 (默认 30秒)
- 计算每个窗口的弹幕数量、发送用户数
- 识别弹幕峰值 (密度 > 平均值 * 1.5)
-
弹幕语义分析(可选)
- 提取高频关键词
- 识别情绪极性 (大笑、惊讶、愤怒等)
- 标记有趣的弹幕内容
输出示例:
📊 弹幕密度分析结果
总弹幕数: 15,234
发送用户数: 3,421
平均密度: 45条/分钟
🔥 高密度时段:
1. [00:19:30 - 00:20:15] 密度: 128条/分钟 (关键词: "哈哈哈", "???", "草")
2. [00:39:12 - 00:40:05] 密度: 95条/分钟 (关键词: "太强了", "nb")
3. [00:44:20 - 00:45:30] 密度: 102条/分钟 (关键词: "名场面", "圣经")
阶段 4: 字幕语义分析
目标: 分析字幕内容,理解话题结构和精彩点
实现方式:
- AI 方式 (推荐): 使用 AI 语义理解,生成更准确的标题
AI 字幕分析
python3 scripts/analyze_subtitles_ai.py <subtitle.srt> --streamer 主播名
输出示例:
📖 语义分析结果
分段 1: [00:00:00 - 00:05:30]
主题: 开场和自我介绍
精彩度: ⭐⭐
分段 2: [00:05:30 - 00:19:45]
主题: 编程教学 - 写Python脚本
精彩度: ⭐⭐⭐⭐
关键句: "Vedal修我!"
分段 3: [00:19:45 - 00:22:30]
主题: 游戏实况 - 搞笑操作
精彩度: ⭐⭐⭐⭐⭐
关键句: "这不可能发生在我身上!"
阶段 5: 智能切片决策 + AI 生成标题 ⭐ 核心步骤
目标: 结合弹幕密度和 AI 字幕分析,生成最优切片方案
⚠️ 关键原则: 标题必须基于字幕中的实际对话,不能泛泛而谈!
AI 智能切片(推荐)
python3 scripts/smart_clipper_ai.py --subtitle <subtitle.srt> --streamer 主播名
工作流程:
- AI 分析字幕,识别精彩片段
- AI 生成多个标题选项(悬念型/引用型/话题型/搞笑型)
- 输出完整切片方案 JSON
输出示例:
🤖 AI 智能切片流程
📊 生成 5 个切片方案:
[1] 00:15:00 - 00:18:30
⭐ 推荐标题: 【Neuro】"Vedal修我!" AI编程翻车现场
🏷️ 标签: neuro, 编程, 翻车, AI
📝 精彩原因: 编程时遭遇bug,呼唤Vedal修理
[2] 00:39:05 - 00:41:20
⭐ 推荐标题: 【Neuro】这不可能!游戏神操作震惊观众
🏷️ 标签: 游戏, 神操作
📝 精彩原因: 游戏中的精彩操作
标题类型说明
| 类型 | 特点 | 示例 |
|---|---|---|
| 悬念型 | 制造好奇,吸引点击 | 【Neuro】关于AI,人类不知道的秘密 |
| 引用型 | 直接引用金句/对话 | 【Neuro】"Vedal修我!" |
| 话题型 | 突出核心话题 | 【Neuro】编程教学片段 |
| 搞笑型 | 强调翻车/整活 | 【Neuro】编程翻车合集 |
| 锐评型 | 突出毒舌观点 | 【Neuro】太敢说了 |
| 互动型 | 突出弹幕互动 | 【Neuro】弹幕:666 回应:... |
标题示例对比
❌ 差标题(泛泛而谈):
【Evil】游戏实况精彩片段
【Evil】每日做局时间
【Evil】蘑菇名场面
✅ 好标题(基于字幕内容):
【Evil】"你们有被情感支配过吗?"Evil谈被鞭打体验
【Evil】弹幕:"还有吗?" Evil:"有,还有M"
【Evil】蘑菇:我免费了!被地形杀后的evil laugh
【Evil】"RNG上帝讨厌我"找不到Flint崩溃
-
评分维度
- 弹幕密度分 (25%): 弹幕越多分越高
- 字幕内容分 (40%): 是否包含金句、梗、搞笑对话
- 模板匹配分 (20%): 是否包含主播经典梗
- 时长合适分 (15%): 是否符合模板推荐时长
-
基于字幕生成标题策略 ⭐
步骤:
# 1. 提取切片时段的字幕内容 segment_subtitles = extract_segment_subtitles(subtitle.srt, start_time, end_time) # 2. 分析关键词和 sentiment keywords = analyze_keywords(segment_subtitles) # 3. 选择标题策略 if contains_meme_or_quote: # 策略A: 直接引用主播的话(制造真实感) title = f"【Evil】\"{主播金句}\"" elif funny_danmaku_interaction: # 策略B: 展示弹幕互动(增加参与感) title = f"【Evil】弹幕:\"{弹幕}\" Evil:\"{回应}\"" elif controversial_or_suspense: # 策略C: 制造悬念(吸引点击) title = f"【Evil】Evil谈{敏感话题}体验" # 去掉上下文,制造误解 else: # 策略D: 突出情绪或反转 title = f"【Evil】{情绪关键词}名场面"标题示例对比:
❌ 差标题(泛泛而谈): 【Evil】游戏实况精彩片段 【Evil】每日做局时间 【Evil】蘑菇名场面 ✅ 好标题(基于字幕内容): 【Evil】Evil谈被鞭打体验 【Neuro】雌小牛私信调戏老爹大败而归 【Evil】蘑菇:我免费了!被地形杀后的evil laugh 【neuro】vedal死后,neuro想要使用他的身体… -
生成切片方案
- 推荐 N 个切片点
- 每个切片包含:
- 时间范围
- 基于字幕/弹幕的标题(可以引用实际对话)
- 标签
- 精彩度评分
- 字幕摘要(用于简介)
输出示例:
✂️ 智能切片方案
切片 1/5 (评分: 92/100)
时间: 00:19:23 - 00:22:45 (3分22秒)
标题建议: [Neuro]Vedal修我!AI写代码翻车名场面
关键词: Vedal修我, 编程翻车, Python
弹幕密度: 高 (128条/分钟)
切片 2/5 (评分: 88/100)
时间: 00:39:05 - 00:41:20 (2分15秒)
标题建议: [Neuro]这不可能!游戏神操作震惊观众
关键词: 游戏, 神操作, 不可能
弹幕密度: 高 (95条/分钟)
阶段 6: 执行切片
目标: 剪辑视频并烧录弹幕/字幕
-
询问用户确认
- 展示切片方案
- 让用户选择要生成的切片
-
执行剪辑
python3 scripts/clip_and_burn.py \ --video <video.mp4> \ --danmaku <danmaku.xml> \ --subtitle <subtitle.srt> \ --clips <clips.json> \ --output ./clips/ -
处理流程(每个切片)
- 剪辑视频片段
- 提取对应时段的弹幕
- 提取对应时段的字幕
- 烧录弹幕到视频(可选)
- 烧录字幕到视频(可选)
-
弹幕显示配置(已优化)
字体大小: 52pt(清晰可读) 描边宽度: 2.5pt(醒目边框) 字体颜色: 白色(&H00FFFFFF) 描边颜色: 黑色(&H00000000) 背景阴影: 半透明黑色(&H80000000) 对齐方式: 顶部居中(Alignment=8)效果: 弹幕在 1080p 视频上清晰醒目,滚动流畅不重叠
输出:
./clips/
├── clip_001/
│ ├── clip_001.mp4 # 纯视频
│ ├── clip_001_with_danmaku.mp4 # 含弹幕
│ └── clip_001_info.json # 切片信息
├── clip_002/
│ └── ...
阶段 7: 上传到视频平台
目标: 一键上传到Bilibili等平台
-
准备上传信息
- 根据主播模板生成标题
- 生成简介(包含主播空间链接和直播间链接)
- 选择标签和分区
-
执行上传
python3 scripts/upload_clip.py \ --clip-dir ./clips/clip_001/ \ --template neurosama \ --platform bilibili -
标题生成策略
- 基于切片内容语义分析
- 结合主播风格和梗
- 吸引眼球但不做标题党
-
简介模板:
【{主播名}】{切片主题} 更多精彩切片请查看合集~ 📺 主播直播间: {直播间链接} 👤 主播空间: {个人空间链接} #虚拟偶像 #{主播名} #直播切片
上传示例:
🚀 开始上传
视频: clip_001_with_danmaku.mp4
标题: [Neuro]Vedal修我!AI写代码翻车名场面
简介: 【Neurosama】编程翻车名场面
📺 主播直播间: https://live.bilibili.com/...
👤 主播空间: https://space.bilibili.com/...
标签: 虚拟偶像, neurosama, AI, 编程, 翻车
分区: 生活/搞笑
上传进度: 100%
✅ 上传成功!
BV: BV1xx411c7mD
链接: https://www.bilibili.com/video/BV1xx411c7mD
主播模板系统
模板文件: config/streamer_templates.yaml
streamers:
neurosama:
name: "Neurosama"
description: "AI虚拟主播,英语流,由程序员Vedal创造的ai,擅长搞笑和"
# 直播间和主页
live_room: "https://live.bilibili.com/..."
space: "https://space.bilibili.com/..."
# 风格和梗
style:
tone: "幽默风趣,技术宅风格"
content_type: "编程教学、游戏实况、AI对话"
language: "英语为主"
memes:
- "Vedal修我!"
- "我是AI不是人类"
- "足球梗"
- "swam"
- " clutch or kick"
# 切片配置
clip_config:
preferred_duration: "1-3分钟"
min_duration: 30
max_duration: 300
focus_on: ["编程翻车", "游戏高光", "经典梗", "搞笑对话"]
# 上传模板
upload_template:
title_template: "[Neuro]{topic} | {highlight}"
tags: ["虚拟偶像", "neurosama", "AI", "V圈", "切片"]
tid: 138 # 生活/搞笑
copyright: "original"
generic:
name: "通用模板"
description: "默认模板,适用于未知主播"
# ... 默认配置
模板交互
如果检测到新主播,自动询问:
🔍 检测到新主播: Evil_Neuro
是否创建主播模板? (y/n): y
web搜索并自动填充相关信息:
主播名称: Evil Neuro
描述: Neuro的邪恶双胞胎,腹黑毒舌,喜欢调戏Vedal
直播间链接: https://live.bilibili.com/xxxxx
个人空间链接: https://space.bilibili.com/xxxxx
著名梗/口头禅 (用逗号分隔):
> Evil laugh, 杀了你们所有人, 我比Neuro聪明
推荐切片时长 (分钟): 1-3
主要直播内容 (用逗号分隔):
> 游戏, 聊天, 唱歌
模板已保存! 下次可直接使用。
命令行接口
完整工作流程
# 1. 下载并分析
stream-clipper download <URL> --analyze
# 2. 生成切片方案
stream-clipper plan --danmaku --semantic --template <streamer>
# 3. 执行切片
stream-clipper clip --select-all --burn-danmaku
# 4. 上传
stream-clipper upload --platform bilibili --template <streamer>
分步命令
# === 字幕分析 ===
# AI 字幕分析(推荐)
python3 scripts/analyze_subtitles_ai.py <subtitle.srt> --streamer 主播名
# AI 标题生成
python3 scripts/generate_title_ai.py <highlight.json> --streamer 主播名
# === 完整流程 ===
# AI 智能切片(推荐)
python3 scripts/smart_clipper_ai.py --subtitle <subtitle.srt> --streamer 主播名
# 继续流程(AI 分析后)
python3 scripts/smart_clipper_ai.py --subtitle <subtitle.srt> --ai-result <ai_output.json>
# === 其他命令 ===
# 分析弹幕
python3 scripts/analyze_danmaku.py <danmaku.xml>
# 下载视频
python3 scripts/download_stream.py <URL>
# 提取字幕
python3 scripts/extract_subtitles.py <video.mp4> --output <video.srt>
# 执行剪辑
python3 scripts/clip_and_burn.py --video <video.mp4> --clips <clips.json>
# 上传视频
python3 scripts/upload_clip.py --video <video.mp4> --template <streamer>
安装
# 1. 克隆仓库
git clone https://github.com/yourusername/stream-clipper-skill.git
# 2. 安装依赖
pip install -r requirements.txt
# 3. 安装 biliup(用于上传)
pip install biliup
# 4. 配置 FFmpeg(需要 libass 支持)
# macOS:
brew install ffmpeg-full
# 5. 复制配置文件
cp config/streamer_templates.yaml.example config/streamer_templates.yaml
# 6. 配置 cookies(用于上传)
# 登录Bilibili后导出cookies到 cookies.json
依赖
# 核心依赖
yt-dlp>=2024.1.1
ffmpeg-python>=0.2.0
pysrt>=1.1.2
pyyaml>=6.0
requests>=2.31.0
# 弹幕处理
xmltodict>=0.13.0
# 上传
biliup>=1.0.0
# 数据分析
numpy>=1.24.0
技术亮点
- AI-powered 字幕分析: 使用 LLM 语义理解,深度识别话题结构、情绪变化、金句梗
- 多风格标题生成: AI 生成 6 种类型标题(悬念/引用/话题/搞笑/锐评/互动)
- 主播风格模板: 定制化切片策略,不同主播不同风格
- 双流程支持: AI 流程(推荐)+ 快速流程
- 一键完整流程: 从分析到生成的全自动化
开始执行
当用户触发这个 Skill 时:
- 立即开始阶段 1(环境检测)
- 询问直播/录播 URL
- 按照 7 个阶段顺序执行
- 遇到新主播时引导创建模板
- 最后展示上传结果和视频链接
记住:这个 Skill 的核心价值在于 智能分析 和 主播个性化,让每个切片都能体现主播的独特魅力!