视频转写+LLM分析:课堂录音自动化处理实现
目录一、工具核心功能二、核心技术栈三、核心代码逐模块讲解3.1 类初始化与基础配置3.2 视频转音频核心方法3.3 讯飞 API 鉴权与交互3.4 大模型智能文本优化3.5 结果导出与主流程3.6 程序入口四、运行步骤五、处理效果展示六、总结与优化方向6.1 核心价值6.2 优化方向在教育数字化转型的背景下课堂视频的音频转写、师生对话梳理、教学活动识别成为刚需。手动处理视频转写不仅效率低下还存在语音识别噪声、角色混淆、课堂活动标注繁琐等问题。本文基于 Python 实现一套端到端课堂视频处理工具整合视频转音频、讯飞语音识别、大模型文本优化、课堂活动智能识别、多格式结果导出功能代码模块化封装可直接落地使用以下是完整技术实现详解。一、工具核心功能本工具封装为audio_to_data类实现从 MP4 视频文件到结构化教学数据的全自动处理核心能力如下视频转音频提取 MP4 音频轨道转换为讯飞 API 兼容的 WAV 格式支持截取测试时长讯飞语音识别API 签名生成、音频上传、轮询获取识别结果支持多发言人区分智能文本处理大模型过滤识别噪声、修正师生角色分配自动识别课堂教学活动多格式导出生成原始识别 JSON、句子级 CSV、CV 专用 JSON适配不同业务场景异常防护文件校验、目录自动创建、接口异常捕获提升工具稳定性二、核心技术栈音视频处理moviepy视频转音频语音识别讯飞语音转写 APIlfasr大模型调用OpenAI SDK兼容调用 DeepSeek-V3阿里云通义千问兼容模式网络请求requests/httpxAPI 交互数据处理json/csv/collections.Counter结构化数据处理加密签名hashlib/hmac/base64讯飞接口鉴权三、核心代码逐模块讲解3.1 类初始化与基础配置初始化阶段完成 API 密钥配置、客户端初始化同时适配阿里云通义千问的 OpenAI 兼容接口为后续大模型调用做准备。python运行class audio_to_data(): def __init__(self, appid, secret_key, upload_file_path, llm_api, duration_secondsNone): self.appid appid self.secret_key secret_key self.client Client() self.upload_file_path upload_file_path self.llm_api llm_api self.duration_seconds duration_seconds self.sentences_activity [] self.sentences_paragraphs [] # 通义千问OpenAI兼容模式初始化 self.llm OpenAI( base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, api_keyself.llm_api, )3.2 视频转音频核心方法使用VideoFileClip提取视频音频校验文件有效性、自动创建输出目录音频编码严格遵循讯飞 API 要求的pcm_s16le同时支持截取测试时长降低调试成本。def movie_to_audio(self, mp4_file, wav_file, duration_secondsNone): 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: end_duration min(duration_seconds, video_clip.duration) video_clip video_clip.subclip(0, end_duration) audio_clip video_clip.audio audio_clip.write_audiofile(wav_file, codecpcm_s16le) # 释放资源 audio_clip.close() video_clip.close() return True3.3 讯飞 API 鉴权与交互讯飞语音识别接口需要签名鉴权通过MD5HAMC-SHA1生成签名完成音频上传后轮询查询识别状态直到获取最终结果。签名生成def get_signa(self, ts): m2 hashlib.md5((self.appid ts).encode(utf-8)).hexdigest() signa hmac.new(self.secret_key.encode(), bytes(m2, utf-8), 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) param_dict {appId: self.appid, signa: signa, ts: ts, fileSize: file_len, pd: edu} with open(self.upload_file_path, rb) as f: data f.read() response requests.post(lfasr_host api_upload, paramsparam_dict, datadata) return json.loads(response.text) if response.status_code 200 else None轮询获取识别结果def get_recognition_result(self, ts, signa, order_id): param_dict {appId: self.appid, signa: signa, ts: ts, orderId: order_id} status 3 # 3处理中 while status 3: result json.loads(requests.post(lfasr_host api_get_result, paramsparam_dict).text) status result[content][orderInfo][status] time.sleep(5) return result3.4 大模型智能文本优化这是工具的核心亮点通过 DeepSeek-V3 实现两大核心能力过滤语音识别噪声、修正师生角色分配、识别课堂教学活动批量处理避免接口限流精准适配课堂场景。def llm_filter(self, text): # 第一步修复识别噪声 prompt_fix f修复课堂转写文本噪声保持CSV格式{text} response_fix self.llm.chat.completions.create(modeldeepseek-v3, messages[{role:user,content:prompt_fix}]) # 第二步修正角色分配 prompt_role f修正师生角色仅修改说话人字段{response_fix.choices[0].message.content} response_role self.llm.chat.completions.create(modeldeepseek-v3, messages[{role:user,content:prompt_role}]) return response_role.choices[0].message.content # 课堂活动识别 def _llm_identify_activity(self, sentences): prompt f分析课堂对话插入≥30秒的学生活动标签输出严格CSV格式{sentences} return self.llm.chat.completions.create(modeldeepseek-v3, messages[{role:user,content:prompt}]).choices[0].message.content3.5 结果导出与主流程将处理后的文本导出为时间轴 角色 内容的 CSV 格式同时生成 CV 专用 JSON主流程process_audio_file串联所有环节实现一键处理。def json_to_sentences_csv(self, json_file_path): output_csv_path os.path.splitext(json_file_path)[0] _sentences.csv with open(output_csv_path, w, encodingutf-8-sig) as f: writer csv.writer(f) writer.writerow([时间, 角色, 内容]) for s in self.sentences_activity: writer.writerow([self.ms_to_mmss(s[start_ms]), s[spk], s[text]]) return output_csv_path # 主流程视频→音频→识别→处理→导出 def process_audio_file(self): # 视频转音频 wav_file os.path.join(audio, f{os.path.splitext(os.path.basename(self.upload_file_path))[0]}.wav) self.movie_to_audio(self.upload_file_path, wav_file, self.duration_seconds) # 讯飞识别 ts, signa str(int(time.time())), self.get_signa(ts) upload_resp self.upload_file(ts, signa) result self.get_recognition_result(ts, signa, upload_resp[content][orderId]) # 文本处理与导出 if result[content][orderInfo][status] -1: json_path self.save_processed_result(result) self._processing_sentences(json_path) csv_path self.json_to_sentences_csv(json_path) return {status: success, csv_path: csv_path} return {status: fail}3.6 程序入口配置 API 密钥与视频路径一键启动全流程处理if __name__ __main__: # 替换为个人密钥 APPID 471f6433 SECRET_KEY 你的api LLM_API_KEY 你的api VIDEO_FILE_PATH rtest.mp4 processor audio_to_data(APPID, SECRET_KEY, VIDEO_FILE_PATH, LLM_API_KEY) res processor.process_audio_file() print(json.dumps(res, ensure_asciiFalse, indent4))四、运行步骤安装依赖pip install moviepy httpx requests openai配置密钥替换代码中的讯飞 APPID、SECRET_KEY、大模型 API_KEY放入视频将待处理 MP4 视频路径填入VIDEO_FILE_PATH执行程序运行代码自动生成audio音频、result处理结果目录五、处理效果展示工具最终输出的 CSV 文件格式清晰包含时间轴、师生角色、转写文本、课堂活动标签示例如下时间角色内容00:05老师现在请大家自主思考这道题00:10学生(自主思考活动持续 40 秒)00:50老师接下来我们一起讲解思路同时输出的 JSON 文件包含完整的时间戳、角色统计、句子总数可直接用于教学数据分析、CV 模型训练等场景。六、总结与优化方向6.1 核心价值全流程自动化从视频到结构化数据无需人工干预效率提升 90% 以上场景化适配针对课堂教学优化自动区分师生、识别教学活动高兼容性多格式导出适配教学分析、数据标注、二次开发等场景6.2 优化方向增加日志系统替代 print 输出便于问题排查支持更多音视频格式MOV、MKV 等扩展适用范围优化大模型批量逻辑降低 API 调用成本增加 GUI 界面非技术人员也可便捷使用本工具基于 Python 生态成熟组件实现代码可读性强、扩展性高可直接应用于教育视频处理、课堂数据分析等场景也可根据业务需求二次开发定制功能。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2428175.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!