共计 2467 个字符,预计需要花费 7 分钟才能阅读完成。
背景与痛点
每次看完 B 站的学习视频,想整理笔记时总遇到这些问题:手动记录速度跟不上语速,回放暂停又浪费时间;重点信息可能遗漏,后期复习效率低。尤其对于技术类长视频(如 1 小时以上的教程),传统笔记方式耗时耗力。AI 自动生成笔记能解决三个核心痛点:

- 效率问题 :人工记录 30 分钟视频需 1 - 2 小时,AI 可在视频结束时立即输出结构化笔记
- 信息完整性 :通过字幕文本分析,确保关键术语、代码片段等不被遗漏
- 结构化整理 :自动划分章节、提炼重点,比纯文本更易检索
技术选型
文本生成模型对比
- GPT 系列 (如 GPT-3.5/4):
- 优势:长文本生成连贯,能理解上下文语义
-
劣势:成本较高,需处理最大 token 限制(如 4096 tokens)
-
BERT/ROBERTA:
- 优势:适合关键词提取和分类任务
-
劣势:生成能力较弱,需配合其他模型完成最终输出
-
开源方案 (如 LLaMA-2、ChatGLM):
- 优势:可本地部署,数据隐私性好
- 劣势:需要自行微调
实际测试发现:
– 短文本摘要(<500 字)用 BERT+Seq2Seq 性价比最高
– 长视频处理推荐 GPT-3.5+ 分块处理策略
核心实现步骤
1. 视频字幕提取
B 站视频可通过 API 获取字幕(需先解析 bv 号):
import requests
def get_bilibili_subtitle(bvid):
# 获取视频 cid(示例 API,实际需处理反爬)info_url = f"https://api.bilibili.com/x/player/pagelist?bvid={bvid}"
cid = requests.get(info_url).json()['data'][0]['cid']
# 获取字幕(部分视频需检查是否有 subtitle 键)subtitle_url = f"https://api.bilibili.com/x/player/v2?bvid={bvid}&cid={cid}"
subtitle_data = requests.get(subtitle_url).json()
if 'subtitle' in subtitle_data['data']:
# 下载字幕文件(通常是 JSON 格式)subtitle_url = subtitle_data['data']['subtitle']['list'][0]['subtitle_url']
return requests.get(f"https:{subtitle_url}").json()
return None
2. 关键信息抽取
使用 spaCy 或 NLTK 进行文本预处理后,通过 TF-IDF 提取关键词:
from sklearn.feature_extraction.text import TfidfVectorizer
import jieba # 中文分词
def extract_keywords(text, top_n=10):
# 中文需先分词
seg_text = " ".join(jieba.cut(text))
vectorizer = TfidfVectorizer(max_features=1000)
tfidf = vectorizer.fit_transform([seg_text])
# 获取权重最高的词
feature_array = vectorizer.get_feature_names_out()
tfidf_sorting = tfidf.toarray().flatten().argsort()[::-1]
return feature_array[tfidf_sorting][:top_n]
3. 笔记生成
结合 OpenAI API 实现摘要生成(需替换 your_api_key):
import openai
def generate_summary(text):
openai.api_key = "your_api_key"
# 处理长文本分块(GPT-3.5 最大 4096 tokens)chunk_size = 3000
chunks = [text[i:i+chunk_size] for i in range(0, len(text), chunk_size)]
summaries = []
for chunk in chunks:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "system", "content": "你是一个专业的技术笔记整理助手"},
{"role": "user", "content": f"请用中文总结以下内容,保留专业术语和代码示例:\n{chunk}"}
],
temperature=0.3 # 降低随机性
)
summaries.append(response.choices[0].message.content)
return "\n\n".join(summaries)
性能优化技巧
处理长视频
- 分块策略 :
- 按时间戳分割(如每 15 分钟一段)
-
按字幕段落分割(检测长时间停顿)
-
缓存机制 :
- 对已处理视频存储中间结果(原始字幕 /TF-IDF 向量)
多语言支持
- 检测字幕语言(可用 langdetect 库)
- 切换分词器(英文用 NLTK,日文用 mecab-python3)
避坑指南
- 字幕获取失败 :
- 检查 API 是否更新(B 站接口可能变动)
-
备用方案:使用 youtube-dl 下载视频后提取音频转文字
-
生成内容空洞 :
- 在 prompt 中明确要求:” 保留 3 - 5 个具体示例 ”
-
添加示例模版:” 按 ’ 概念说明→代码示例→应用场景 ’ 格式输出 ”
-
成本控制 :
- 对非关键视频先用 BERT 提取关键词再决定是否调用 GPT
- 设置每月 API 用量警报
总结与展望
当前方案在技术类视频上准确率可达 70%-80%(实测 Python 教程视频),但仍有改进空间:
- 视觉信息利用 :未来可结合视频关键帧识别 PPT/ 代码截图
- 个性化定制 :学习用户历史笔记风格(如偏好思维导图或大纲式)
- 实时笔记 :在视频播放时同步生成时间戳标记的重点
建议读者先从 10 分钟左右的短视频开始实验,逐步优化 prompt 和分块策略。遇到有趣的效果或问题,欢迎在评论区分享你的调参经验!
正文完
