基于AI的B站视频笔记自动生成:技术实现与优化实践

1次阅读
没有评论

共计 2467 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

背景与痛点

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

基于 AI 的 B 站视频笔记自动生成:技术实现与优化实践

  • 效率问题 :人工记录 30 分钟视频需 1 - 2 小时,AI 可在视频结束时立即输出结构化笔记
  • 信息完整性 :通过字幕文本分析,确保关键术语、代码片段等不被遗漏
  • 结构化整理 :自动划分章节、提炼重点,比纯文本更易检索

技术选型

文本生成模型对比

  1. GPT 系列 (如 GPT-3.5/4):
  2. 优势:长文本生成连贯,能理解上下文语义
  3. 劣势:成本较高,需处理最大 token 限制(如 4096 tokens)

  4. BERT/ROBERTA

  5. 优势:适合关键词提取和分类任务
  6. 劣势:生成能力较弱,需配合其他模型完成最终输出

  7. 开源方案 (如 LLaMA-2、ChatGLM):

  8. 优势:可本地部署,数据隐私性好
  9. 劣势:需要自行微调

实际测试发现:
– 短文本摘要(<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)

性能优化技巧

处理长视频

  1. 分块策略
  2. 按时间戳分割(如每 15 分钟一段)
  3. 按字幕段落分割(检测长时间停顿)

  4. 缓存机制

  5. 对已处理视频存储中间结果(原始字幕 /TF-IDF 向量)

多语言支持

  • 检测字幕语言(可用 langdetect 库)
  • 切换分词器(英文用 NLTK,日文用 mecab-python3)

避坑指南

  1. 字幕获取失败
  2. 检查 API 是否更新(B 站接口可能变动)
  3. 备用方案:使用 youtube-dl 下载视频后提取音频转文字

  4. 生成内容空洞

  5. 在 prompt 中明确要求:” 保留 3 - 5 个具体示例 ”
  6. 添加示例模版:” 按 ’ 概念说明→代码示例→应用场景 ’ 格式输出 ”

  7. 成本控制

  8. 对非关键视频先用 BERT 提取关键词再决定是否调用 GPT
  9. 设置每月 API 用量警报

总结与展望

当前方案在技术类视频上准确率可达 70%-80%(实测 Python 教程视频),但仍有改进空间:

  • 视觉信息利用 :未来可结合视频关键帧识别 PPT/ 代码截图
  • 个性化定制 :学习用户历史笔记风格(如偏好思维导图或大纲式)
  • 实时笔记 :在视频播放时同步生成时间戳标记的重点

建议读者先从 10 分钟左右的短视频开始实验,逐步优化 prompt 和分块策略。遇到有趣的效果或问题,欢迎在评论区分享你的调参经验!

正文完
 0
评论(没有评论)