从课堂视频到结构化教学数据:基于语音识别与 LLM 的智能处理方案

在教育数字化转型的浪潮中,课堂实录的智能化分析成为提升教学质量的关键环节。传统的课堂视频分析依赖人工转录和标注,效率低、成本高且易出错。本文将分享一套基于讯飞语音识别 API 与大语言模型(LLM)的完整解决方案,实现从课堂视频自动提取音频、语音转写、文本优化到结构化数据输出的全流程自动化,为教学分析提供精准、高效的数据支撑。

一、方案背景与核心目标

课堂视频中蕴含着丰富的教学互动信息,但原始视频无法直接用于结构化分析。我们的核心目标是:

  1. 将课堂 MP4 视频自动转换为 WAV 音频格式,解决语音识别的数据源问题;
  2. 利用讯飞语音识别 API 完成音频转写,精准识别师生对话及时间戳;
  3. 通过 LLM 优化转写文本,修正识别噪声、纠正角色分配错误;
  4. 自动识别课堂教学活动(如小组讨论、独立练习等),并输出 CSV/JSON 结构化数据,适配教学分析场景。

二、技术架构与核心模块

整个方案的技术架构围绕audio_to_data类展开,核心模块包括视频转音频、语音识别、LLM 文本优化、活动识别、结构化数据输出五大环节,整体流程如下:

1. 视频转音频:打通数据源第一步

课堂视频通常为 MP4 格式,而语音识别 API 需要音频输入。我们基于 MoviePy 库实现视频到 WAV 音频的自动转换,支持可选时长截取(便于测试),并自动创建音频存储目录:

复制代码
def movie_to_audio(self, mp4_file, wav_file, duration_seconds=None):
    """
    使用 MoviePy 将 MP4 文件转换为 WAV 文件,处理音频轨道检测、目录自动创建等异常场景
    """
    try:
        if not os.path.exists(mp4_file):
            print(f"错误: 输入文件不存在: {mp4_file}")
            return False
        # 确保输出目录存在
        output_dir = os.path.dirname(wav_file)
        if output_dir and not os.path.exists(output_dir):
            os.makedirs(output_dir)
        # 加载视频并提取音频
        video_clip = VideoFileClip(mp4_file)
        if duration_seconds:
            video_clip = video_clip.subclipped(0, min(duration_seconds, video_clip.duration))
        if video_clip.audio is None:
            print("错误: 视频文件不包含音频轨道")
            return False
        audio_clip = video_clip.audio
        audio_clip.write_audiofile(wav_file, codec='pcm_s16le')
        # 释放资源
        audio_clip.close()
        video_clip.close()
        return True
    except Exception as e:
        print(f"转换失败: {e}")
        return False

该模块解决了视频格式兼容问题,同时做了完善的异常处理(如文件不存在、无音频轨道等),保证流程稳定性。

2. 讯飞语音识别:精准转写师生对话

讯飞语音识别 API 支持教育领域(pd="edu")的语音转写,可识别多角色(师生)、返回精准的时间戳。核心步骤包括:

  • 生成签名:基于 APPID、时间戳、秘钥生成 API 调用签名,保证请求安全;

  • 上传音频:将 WAV 音频文件上传至讯飞服务器,获取任务 ID;

  • 轮询获取结果:根据任务 ID 轮询查询转写状态,直到返回最终结果。

    def get_signa(self, ts):
    """生成讯飞API调用签名"""
    m2 = hashlib.md5()
    m2.update((self.appid + ts).encode('utf-8'))
    md5 = m2.hexdigest()
    signa = hmac.new(self.secret_key.encode('utf-8'), md5.encode(), hashlib.sha1).digest()
    return base64.b64encode(signa).decode('utf-8')

    def upload_file(self, ts, signa):
    """上传音频文件至讯飞服务器"""
    file_len = os.path.getsize(self.upload_file_path)
    file_name = os.path.basename(self.upload_file_path)
    param_dict = {
    'appId': self.appid,
    'signa': signa,
    'ts': ts,
    "fileSize": file_len,
    "fileName": file_name,
    "pd": "edu", # 教育领域适配
    "roleType": "1",
    "roleNum": "2" # 识别师生两个角色
    }
    with open(self.upload_file_path, 'rb') as f:
    data = f.read(file_len)
    response = requests.post(
    url=lfasr_host + api_upload + "?" + urllib.parse.urlencode(param_dict),
    headers={"Content-type": "application/json"},
    data=data
    )
    result = json.loads(response.text)
    if result['code'] != '000000':
    print(f"上传失败! 错误信息: {result.get('descInfo')}")
    return None
    return result

3. LLM 文本优化:修正识别噪声与角色错误

语音转写结果常存在识别噪声(如 "噢没""嗯嗯嗯")、角色分配错误(老师的话标记为学生)等问题。我们基于阿里云通义千问(兼容 OpenAI 接口)的 DeepSeek-V3 模型,分两步优化:

  • 文本修复:识别并删除无意义词汇、补全缺失内容、修正错误词汇;

  • 角色修正:根据上下文逻辑,纠正师生角色分配错误。

    def llm_filter(self, text):
    """LLM过滤优化转写文本,修复噪声并修正角色"""
    prompt_content = """
    你的任务是修复课堂录音转文本的CSV中的识别噪声,步骤:
    1. 识别内容错误、缺失、多余内容;
    2. 谨慎修正,不改变原意;
    3. 修正角色分配错误(老师/学生);
    4. 保持CSV格式:说话人,开始时间,结束时间,"文本内容"
    """
    response = self.llm.chat.completions.create(
    model="deepseek-v3",
    messages=[
    {"role": "system", "content": "你是专业的文本修复助手"},
    {"role": "user", "content": prompt_content + text}
    ],
    temperature=0.5,
    )
    return response.choices[0].message.content

为提升效率,我们还实现了批量处理逻辑(batch_llm_filter),按 50 句 / 批处理,降低 API 调用次数,同时处理解析异常(失败时保留原始文本)。

4. 课堂活动识别:挖掘隐藏的教学环节

原始转写仅包含师生对话,我们通过 LLM 分析对话上下文,识别未被记录的教学活动(如 "独立思考""小组讨论"):

  • 识别 "触发指令":老师发出的任务指令(如 "请大家独立思考三分钟");
  • 识别 "结束信号":老师终止活动的发言(如 "时间到了,谁来分享一下");
  • 生成活动标签:在对话间隙插入活动描述,补充时间戳和角色。

5. 结构化数据输出:适配多场景分析

最终输出两种结构化数据:

  • CSV 文件:句子级师生对话,包含 "时间(MM:SS)、角色、内容",便于人工查看和 NLP 分析;

  • JSON 文件:适配 CV 教学分析的格式,包含开始 / 结束秒数、角色编号、内容,便于程序调用。

    def json_to_sentences_csv(self, json_file_path, output_csv_path=None):
    """生成句子级CSV文件"""
    if output_csv_path is None:
    base_name = os.path.splitext(json_file_path)[0]
    output_csv_path = base_name + '_sentences.csv'
    with open(output_csv_path, 'w', newline='', encoding='utf-8-sig') as csv_file:
    writer = csv.writer(csv_file)
    writer.writerow(['时间', '角色', '内容'])
    for sentence in self.sentences_activity:
    writer.writerow([
    self.ms_to_mmss(sentence['start_ms']),
    sentence['spk'],
    sentence['text']
    ])
    return output_csv_path

三、使用指南

1. 环境准备

安装依赖库:

复制代码
pip install httpx requests moviepy openai python-dotenv

2. 配置 API 密钥

  • 讯飞开放平台申请 APPID 和 Secret Key(语音识别);
  • 阿里云通义千问申请 API Key(LLM 调用)。

3. 运行代码

复制代码
if __name__ == '__main__':
    # 配置参数
    APPID = "你的讯飞APPID"
    SECRET_KEY = "你的讯飞Secret Key"
    LLM_API_KEY = "你的阿里云API Key"
    VIDEO_FILE_PATH = "test.mp4"  # 课堂视频路径
    
    # 初始化处理器
    audio_processor = audio_to_data(APPID, SECRET_KEY, VIDEO_FILE_PATH, LLM_API_KEY)
    # 执行全流程处理
    processed_result = audio_processor.process_audio_file()
    print("CSV文件路径:", processed_result[1])
    print("JSON文件路径:", processed_result[2])

四、方案优势与拓展方向

优势

  1. 全自动化:从视频到结构化数据,无需人工干预;
  2. 高精准度:结合教育领域语音识别和 LLM 优化,转写准确率大幅提升;
  3. 场景适配:输出的 CSV/JSON 格式直接适配教学分析场景,可无缝对接后续的教学行为分析、师生互动统计等应用。

拓展方向

  1. 多语种支持:适配双语课堂,增加英文语音识别和优化;
  2. 实时处理:结合流媒体技术,实现课堂视频的实时转写和分析;
  3. 可视化展示:开发前端页面,展示结构化数据和课堂活动时间轴;
  4. 教学指标提取:基于结构化数据,自动计算师生互动时长、活动类型占比等教学指标。

五、总结

本文提出的方案将语音识别、大语言模型与教育场景深度结合,解决了课堂视频分析的自动化、精准化问题。该方案不仅能降低教学分析的人力成本,还能挖掘课堂中隐藏的教学活动信息,为教师教学反思、教研团队分析提供数据支撑。未来,随着大模型能力的提升,我们还可进一步实现教学质量的智能评估,助力教育数字化升级。

代码开源提示:本文核心代码已做脱敏处理,可根据实际需求调整 API 参数、LLM 提示词和数据输出格式,适配不同的课堂场景和分析需求。

相关推荐
棒棒的唐2 小时前
配置 VSCode 的 PHP Intelephense 插件,去掉因php版本不同导至的红色波浪线误判
ide·vscode·php
洛水如云5 小时前
系统还原全攻略:Win11/10/7/macOS详细操作指南
windows·macos·电脑
Andya_net5 小时前
MySQL | DBeaver Mac版下载、安装与使用指南
数据库·mysql·macos
namas88485 小时前
APLC IDE 用户手册
ide·单片机·嵌入式硬件
2501_916008897 小时前
Xcode功能、下载、反馈与版本支持详细解析
ide·vscode·macos·ios·个人开发·xcode·敏捷流程
扬帆破浪17 小时前
免费开源AI软件.桌面单机版,可移动的AI知识库,察元 AI桌面版:macOS首次启动报无法验证 开发者签名与公证的现实做法
人工智能·macos·开源·知识图谱
irpywp18 小时前
合盖断网打断后台计算,Modafinil:一款防休眠菜单栏工具,让 Mac 闭眼继续跑 Agent
macos·ios·开源·github
shimly1234561 天前
vscode 很难删除 copilot,如何关闭 copilot 功能?
ide·vscode·copilot
qq_396153451 天前
idea + claude code [bate] 初体验
ide·idea