
说实话我一开始做这个小工具是被逼的。网课两小时倍速听到第十五分钟就开始走神进度条到底了脑子里啥也没留下。期末前对着几十个视频疯狂赶笔记抄PPT抄到手酸最后复习还是得重新翻视频截图。后来我搭了一条AI流水线把课程视频丢进去自动输出一份结构清晰的Markdown讲义从视频到讲义全程不用手动写一行笔记。这篇文章就把整套方案摊开讲包含技术选型、完整脚本、提示词模板和避坑实录。学生党、在职考证、知识付费自学者都适用小白照着抄也能跑通第一版进阶玩家可以拿去做二次开发。1. 项目拆解一条视频是怎么变成讲义的1.1 核心流水线音频提取、语音转写、内容提炼很多朋友一听到“AI自动生成讲义”第一反应是“这玩意儿是不是直接拿大模型分析视频画面”。实际上以目前主流方案来说我不会把视频直接喂给大模型那样成本高、速度慢而且绝大多数课程视频的“信息密度”集中在语音轨道上。真正稳的做法是拆成三段流水线从视频中提取音频轨转成适合语音识别的格式。用语音转写模型把音频变成带时间戳的逐字稿。把逐字稿按上下文切成片段交给大模型按你指定的结构生成讲义。这一步是整条流水线的核心思路把“看视频”这个任务拆解成“听写”和“归纳”两步分别用最擅长对应任务的模型去处理。语音转写模型解决的是“老师说了什么”大模型解决的是“这部分内容怎么组织成讲义”。两个问题分开处理误差不会互相放大出问题时也好排查——错字多就调转写结构散就改提示词不会像端到端方案那样出了问题根本不知道从哪儿下手。1.2 先搞清楚需求你到底是“记不全”还是“看不懂”动手之前先别急着装环境我建议你想清楚自己的真实场景考前复习型需要一份能快速翻查的提纲保留定义、公式、结论省略例子的展开过程。日常预习型需要比原视频更细的笔记甚至保留老师口述的推理步骤方便你理解来龙去脉。资料整理型你在做知识库、做读书笔记、做部门培训归档需要带时间轴定位到原文方便回看原视频对应位置。这个选择会直接影响你后面的提示词设计和输出格式。以我自己为例我平时做的是“复习型讲义”所以我的提示词里明确要求保留核心概念、公式、结论省略口语化表达和与主题无关的插科打诨。如果做的是预习型就反而要保留例子和过渡句因为那些内容承载了理解逻辑。需求没搞清楚之前调多少版提示词都像无头苍蝇。1.3 现成工具和自己搭脚本怎么选看到这里你可能会问剪映能导出字幕、飞书妙记能转写、通义听悟能自动总结为什么还要自己搭拆开看现成工具确实省事。剪映的语音转文字准确率不错免费且有客户端飞书妙记可以自动分离说话人适合会议场景通义听悟能直接生成“笔记”对视频进行摘要和要点提取。对完全不想碰代码的同学我建议先用这些工具顶一阵尤其适合单次处理、不追求格式定制的场景。但现成工具的短板也很明显输出格式是固定的你没法让“讲义”按你的知识体系去组织批量处理几十个视频时手动上传下载烦到崩溃最重要的是你拿不到中间产物——逐字稿——也就没法做进一步处理比如高频词统计、题目生成、知识点切片。自己搭脚本本质上是把“控制权”拿回自己手里。脚本的好处在于可以批处理、可以自定义输出格式、可以接入任何你想要的模型、可以随时改逻辑。代价是你要花一晚上把环境跑通而且后续要自己修bug。我的建议是先花10分钟明确需求再决定走哪条路。如果只是每周处理一两个视频、对格式没执念现成工具完全够用如果像我一样需要批量处理、定制格式或者想把讲义喂给其他知识库工具自建流水线是唯一解。2. 技术选型与参数解读转写和总结模型怎么配2.1 语音转写方案横向对比语音转写是整个流水线的地基。地基歪了后面大模型再强也救不回来。目前主流的转写方案有三类我列个表格方便你直观对比。方案优点缺点适合场景本地开源模型Whisper系列如faster-whisper免费、离线可用、数据不出本机、支持批量需要GPU或较长耗时部署有门槛注重隐私、批量处理、长期使用云厂商API阿里云、讯飞、腾讯等准确率高、速度快、有专人维护按量付费、数据要上传到云端追求效果、不在乎成本、临时用一次剪辑工具导出字幕剪映、必剪等免费、操作简单、准度尚可无法脚本化、格式不自由、批量困难零基础、单次使用我最终选了本地部署 faster-whisper原因有三一是免费二是可以写进Python脚本做批处理三是课程视频通常不涉密但自己电脑上的资料也懒得全传云端。如果你的机器没有独立显卡也可以选云API方案代码里做一个小封装后续切换只需要改几行配置。2.2 内容提炼模型怎么挑逐字稿拿到之后负责“归纳”的是大模型。这里的选择比转写模型要灵活得多关键在三个指标上下文窗口、中文能力、API成本。课程视频一节课通常是40分钟到2小时逐字稿动辄一万字以上。如果你想把整段逐字稿一次性丢进模型那上下文窗口至少要16k token否则只能分段喂。中文能力这个不用多说直接看模型的评测和你的试跑结果别只看榜单。API成本方面不同模型价格差异很大如果批量处理长视频成本也要算进去。我当前的主力组合是大参数模型做“结构规划”小参数模型做“分段润色”。具体来说第一遍我先把逐字稿全部输入让它输出一个章节大纲然后按大纲把内容分段逐段交给模型详细展开。这样做的好处是每段文本量小模型不容易丢信息而且单次调用费用低。如果你嫌麻烦也可以一次性让模型输出完整讲义但输出质量往往不如“先大纲后分写”稳定。2.3 环境要求与成本估算先说说我自己机器的配置给你一个参考坐标CPU是i5-12400显卡是RTX 3060 12GB内存32GB。这个配置跑faster-whisper的small模型处理一小时的视频大概需要8到12分钟基本可以接受。如果用的是纯CPU机器时间会拉到四五倍但也能跑就是需要耐心。大模型API方面的成本以目前市面主流中文模型来算处理一小时视频的逐字稿大概需要1到2万字的内容输入加上几轮总结输出总费用基本在几角钱到一元人民币这个量级。比起通义听悟这类服务一次性收你几块钱自建方案在批量处理时省钱优势非常明显。关于本地模型再补充一点不要一上来就上“large”级别的模型。faster-whisper的small模型中文识别准确率已经相当能打处理课程这种相对标准的普通话口语完全够了。large模型速度慢、吃显存收益却很有限。我做批量处理时常跑的是“small”只有在处理录音质量很差的老课程时才切到“medium”以上。3. 实操全程从零搭一套自动讲义生成脚本3.1 环境准备Python、FFmpeg、Whisper开始之前先把该装的东西装齐。我这里假设你用的是Windows系统macOS和Linux的命令大同小异路径上稍作调整即可。第一步安装Python 3.10以上版本装的时候记得勾选“Add Python to PATH”。第二步安装FFmpeg并加入系统环境变量这是后面所有音视频处理的基础工具不管你是提取音频、裁剪视频、还是合并字幕都绕不开它。第三步用pip安装faster-whisperpip install faster-whisper openai这里顺手把openai库也装了后面调大模型API要用。注意我用的openai库并不只是适配OpenAI官方服务现在很多国产大模型都提供了兼容接口base_url指到对应服务商就行这点后面会展开。全部装完在命令行里输入ffmpeg -version能显示版本信息就说明环境OK。3.2 第一步从视频里干净地抽出音频很多课程视频是网课平台加密过的或者封装在MP4容器里但混了多条音轨。抽取音频我习惯直接用FFmpeg一次性把采样率、声道数、编码格式全部设定好得到的就是可以直接喂给Whisper的干净文件。ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 audio.wav这条命令的作用是读入input.mp4丢弃视频轨-vn把音频编码成16位PCM波形文件-acodec pcm_s16le采样率设为16000Hz-ar 16000合并为单声道-ac 1。为什么是16000Hz单声道因为Whisper官方训练数据就是16kHz的单声道音频这个采样率既能保底语音识别质量又能显著减小音频文件体积处理速度也更快。直接用44.1kHz立体声的原始音频也能识别但速度变慢、显存占用变大效果几乎没有提升。这是我在本地跑过几轮对比之后的经验值。3.3 第二步本地语音转写并保留时间轴代码层面我推荐用faster-whisper它是OpenAI Whisper模型的高效实现支持CTranslate2推理在相同模型下比原版Whisper提速数倍显存占用也低不少。from faster_whisper import WhisperModel model WhisperModel(small, devicecuda, compute_typefloat16) segments, info model.transcribe( audio.wav, languagezh, vad_filterTrue, vad_parametersdict(min_silence_duration_ms500), ) text_parts [] for segment in segments: text_parts.append( f[{segment.start:.0f}s-{segment.end:.0f}s] {segment.text.strip()} ) transcript \n.join(text_parts) with open(transcript.txt, w, encodingutf-8) as f: f.write(transcript)这里有两个容易被忽略的细节。第一个是vad_filterTrue。VADVoice Activity Detection的作用是自动跳过没人说话的段落。课程视频经常有几十秒的停顿、翻PPT、喝水、大家笑场的片段开着VAD转写结果会干净很多还能避免把环境噪声硬识别成乱七八糟的文字。我试过关掉VAD跑一堂课结果出现了一堆莫名其妙的“哈哈哈”“嗯嗯”清理起来很痛苦。第二个是languagezh。如果明确知道视频是中文就把语言写死。不写也行Whisper会自己检测但偶尔会在中英夹杂时抽风给英文翻译一遍再转回来浪费时间且容易出错。得到transcript.txt之后我建议先肉眼扫一眼确认转写没有大面积错乱再进入下一步。这个检查步骤花不了两分钟但能帮你避免把一堆垃圾数据交给大模型。3.4 第三步用大模型把逐字稿变成讲义逐字稿这东西直接看是能看但信息密度太低一眼扫过去全是“然后”“就是”“对吧”。我们真正要做的是把逐字稿变成“可复习的材料”。我这里的思路是先让大模型读完整个逐字稿给出一份“章节大纲”再按大纲分块逐块生成讲义的详细正文。为什么要先有“大纲”再写“正文”因为课程视频是线性播放的老师讲到一个知识点时会穿插例子、回顾、提问信息在时间线上是散乱的。如果让大模型直接从开头按顺序整理它很容易被口语内容带偏生成的讲义结构也和PPT脱节。先让它通读全局、生成大纲等于强制它先“看懂”整堂课的逻辑再组织内容。大纲和正文的生成我推荐拆成两次API调用这样做的好处是可以单独调每一环节的提示词。下面是调用大模型的示例代码我用的是兼容OpenAI接口的中文模型from openai import OpenAI client OpenAI( api_keyyour-api-key, base_urlhttps://your-model-provider.com/v1, ) prompt f 你是一位课程助教。请阅读下面的课程逐字稿先输出一份完整的章节大纲。 要求 1. 大纲按课程逻辑组织而不是按时间顺序 2. 每个章节下面用一句话概括该部分的核心内容 3. 课时中出现与主题无关的闲谈直接忽略 逐字稿 {transcript[:12000]} resp client.chat.completions.create( modelqwen-plus, messages[{role: user, content: prompt}], temperature0.3, ) with open(outline.md, w, encodingutf-8) as f: f.write(resp.choices[0].message.content)这里transcript[:12000]是我截取逐字稿前12000个字符去做大纲原因很简单一次性全量输入太贵而且大部分模型对超长输入的“注意力”会稀释在后面的内容上开头和结尾的部分容易被忽略。12000个字符对多数一节课的视频来说足够覆盖完整信息了。3.5 提示词模板把“输出讲义”这件事说清楚大模型能不能给你想要的讲义提示词比模型本身更关键。我把经过多轮调试的提示词模板分享出来你拿去直接改改就能用。你是一位经验丰富的课程讲师。下面是一份课程视频的逐字稿片段请把它整理成结构清晰的讲义正文。 要求 1. 使用Markdown格式输出 2. 开篇用一句话概括本段的核心主题 3. 正文分小节每节一个小标题 4. 重要的定义、公式、结论用加粗标出 5. 老师举的例子只保留一个最有代表性的其余省略 6. 如果原文有听不清或逻辑跳跃的地方用[需核对]标出 7. 不要把逐字稿中的口语词比如“嗯”“啊”“然后”带进讲义 课程内容 {chunk}有个细节分享给你temperature参数一定不要调太高。我习惯把temperature设为0.2到0.3这个范围既能保留一点点表达多样性又不会让模型自由发挥到偏离原文。你是在整理一份讲义不是在让它创作散文温度越高越容易出现“老师没讲但模型觉得应该讲”的内容。还有一点[需核对]这个占位符很多人嫌麻烦会去掉。但实际用下来它对复习非常有帮助因为模型只要遇到听不懂或有遗漏的地方就会老老实实标记出来而不是为了显得连贯而瞎编。这些标记点就是你二次回看视频时需要重点确认的地方相当于AI帮你做了一份“个性化错题本”。生成完后把大纲和正文拼在同一个Markdown文件里一份讲义就算成型了。我习惯的拼法是大纲放最上面正文按章节依次向下排编号对齐大纲。这样打印出来或者导入Notion都能直接当复习资料用。4. 常见问题与排查技巧实录4.1 转写结果错字连篇怎么救转写出错先冷静排查原因别急着换模型。八成是以下三类问题第一音频质量太差。远程网课音质本身就容易发闷视频里还常常混着背景音乐。对策是在FFmpeg阶段先做一次轻量音频降噪比如用-af highpassf100,lowpassf8000过滤掉无关频段能明显提升识别率。第二说话人重叠。两个老师讨论问题时Whisper对重叠语音的处理能力有限转写结果往往变成一人说话被截成几段。这个问题目前没有太好的自动解我做的是让大模型在整理讲义时忽略语气词和重复语句尽量减少影响。第三专业名词和英文缩略语。这一点是课程场景最头疼的。转写模型经常把课堂上的英文术语、项目代号、人名听成同音汉字。我目前采取的办法是准备一个自定义词典在转写后做一次字符串替换把常见错词映射回正确写法。比如把“API”被听成“诶屁爱”的时候直接替换回“API”。这个办法不完美但对高频词很有效。4.2 长视频跑到一半中断如果你的视频超过1小时转写过程在中间突然报错退出大概率是显存不够或者Python进程被系统杀掉了。我第一个长视频就踩过这个坑报错信息五花八门最后发现是12GB显存不够跑medium模型加长音频。解决方案有几条路切分音频。用FFmpeg把60分钟的音频切成两段30分钟每段单独转写最后合并结果。这个方案最省事我一直在用。换更小的模型。small不行就换base但识别准确率会下降。开VAD过滤静音减少无效音频长度间接降低显存压力。分段转写时注意接缝位置的处理最好在静音段切直接在20分钟或30分钟处硬切也行只是接缝附近偶尔会丢一两个字对讲义影响不大。4.3 模型总结得太空不像讲义试过几轮的朋友应该都有同感大模型生成的讲义有时候“像百科词条”多过“像课堂笔记”。它会把每个概念都解释得四平八稳但你看完还是不知道老师这节课到底强调的重点是什么。这个问题的根源在于提示词里没有告诉模型“优先级”。课堂讲义和Wiki词条的区别在于老师花20分钟讲的难点和花1分钟提的名词分量完全不同。我后来在提示词里加了一条规则“根据逐字稿中花费的篇幅比例确定知识点详略。老师重点展开的部分详细书写一笔带过的部分只保留结论。”效果立竿见影。另外如果逐字稿太长大模型在总结时会趋向于“均匀分配注意力”每个段落都写得不痛不痒。这时我会把逐字稿按章节预先切分每段单独生成最后用大纲拼装。分段操作让模型在生成每个章节时都能聚焦在局部内容上详略判断比全局生成准得多。4.4 耗时太长想压缩时间自建流水线的最大短板是耗时。一小时的视频抽取音频大约1分钟转写可能要10分钟大模型API调用又要几分钟虽然不是完全不能接受但批量处理时确实会让人烦躁。我实测有效的提速方案有三个转写模型用small或base不要迷信大模型。这一点前面提过再强调一次因为很多朋友就是卡在这。用GPU推理而不是CPU。有NVIDIA显卡的记得装CUDA版PyTorch转写速度差五倍以上是常事。大模型API并行调用。大纲一定好之后各章的详写任务互相独立用Python的多线程或asyncio同时发起多个API请求总体耗时能压到原来的三分之一左右。我踩过一次大坑就是并行调用API时触发了服务方的限流导致一批请求被拒。后来加了简单的重试机制遇到限流就sleep几秒再试。这段逻辑代码很简单不赘述了但各位记住跑大批量任务前一定先看一眼服务商的速率限制文档。5. 我踩过的一些坑和后续想法5.1 时间轴到底要不要保留一开始我的转写脚本会保留每个段落的时间戳但生成的讲义里没放时间戳。后来发现复习时想回看老师原话得翻回逐字稿按时间戳去定位很麻烦。改进的思路是让大模型在输出讲义时对每个章节标题和重要定义后面追加上对应的原始视频时间区间。比如一个标记[12:34-15:20]你看到的知识点能在哪段时间里找到一目了然。这样做复习时直接从讲义跳到视频效率高很多。但也别把所有时间戳都堆在正文里那会破坏阅读节奏。只标章节级的时间区间就够。这个思路对大段视频尤其适用建议你试一次就知道多省事。5.2 图片和公式这块怎么补课程视频里的PPT截图、手写公式是纯语音转写方案完全覆盖不到的内容。逐字稿只转述了老师说的话但很多老师会说“这个公式推导过程大家看PPT”然后就不念了讲义里公式就缺了。我的临时方案是遇到公式密集的课程比如数学、物理、机器学习在生成讲义后手动把PPT截图插进对应位置。虽然手动但比从头抄笔记还是快好几倍。更深度的方案是把视频在关键帧抽帧用OCR识别PPT文字再和逐字稿合在一起丢给大模型这是后续可以继续玩的方向。5.3 下一版想做的事我现在这套脚本已经跑了两三个月稳定处理了几十个课程视频。下一步打算做两件事一是把“讲义”再往前推一步直接生成配套的思维导图文本文件导入XMind就能用二是加入更多课程类型的适配让提示词能根据科目自动切换比如理工科多保留公式推导文科类多保留案例解读。不过这些都是锦上添花。对于还没跑通第一版的朋友我的建议特别简单先拿一个20分钟的短视频把整条流水线跑一遍别管效果多粗糙跑通一次之后后面所有优化都有抓手了。最后分享一个实际操作中的体会这套方案用久了之后最值钱的不是它生成的讲义而是“逐字稿”。讲义读几遍就丢一边了但逐字稿是原始素材可以反复拿去做各种加工——生成错题、做知识问答、抽题目甚至喂给本地知识库。所以无论你选哪套工具链一定把逐字稿单独存一份这玩意儿的复用价值极高。