


涉密录音整理(录音转文字)
本工具定位为完全离线运行的专业录音转写与智能处理软件,所有语音识别、说话人分离和大语言模型润色工作均在本地完成,以保护隐私。核心依赖方面,选用SenseVoiceSmall作为语音识别引擎,采用CAM++实现说话人音色聚类,并整合本地部署的qwen2.5:14b大语言模型用于文本润色、标点恢复、错别字修正、会议摘要生成、Word文档与PDF文档格式调整以及思维导图要点提取和下载,同时引入FFmpeg作为统一的音视频格式转换与预处理工具。在功能设计上,工具支持导入MP3、WAV、M4A、AAC、FLAC、OGG、MP4、MOV、AVI、MKV等常见音视频格式,文件导入不限大小,通过FFmpeg自动转码为16kHz单声道WAV并进行音量归一化预处理以提升识别准确率。导入后的音频自动执行语音识别和说话人分离,识别结果中每个发言段落前自动标注发言人1、发言人2等标签并以不同颜色区分,用户可在界面中手动修改标签为真实姓名。转写完成后系统自动并行生成润色版本、会议摘要和思维导图,其中会议摘要支持用户自定义内容模块要求或上传参考模板,按用户指定的格式生成,所有输出均为纯文本不含Markdown格式符号。思维导图采用markmap.js在线交互呈现,支持下载HTML(与在线呈现完全一致)、PNG图片和.mmap文件三种格式。导出功能整合了TXT、Word(docx)、PDF和原始音频文件(mp3或m4a),导出的Word和PDF文档采用三段式结构(会议摘要、润色版本、会议原文记录),排版格式为两端对齐、首行缩进2字符、1.5倍行距、段前段后0行,所有导出文件默认保存到电脑桌面。界面采用蓝色固定标题栏设计,标题居中显示,左侧提供侧边栏折叠开关按钮,侧边栏展示环境状态和翻译设置,主界面以四步流程呈现(导入音频、语音识别、转写结果、导出文件),未激活步骤以半透明虚线框预览显示让用户了解完整流程。所有耗时的转码和润色操作均提供进度条反馈,本地保留操作日志便于排查错误。
一、产品概述
1.1 产品定位
涉密录音整理是一款专为涉密场景设计的离线语音转写与会议纪要生成工具。产品核心价值在于:所有语音识别、文本润色、摘要生成均在本地完成,不依赖任何云端服务,确保涉密信息不出本机。用户只需导入音频文件,即可自动完成语音识别、说话人分离、智能润色、会议摘要和思维导图生成,并支持导出为Word、PDF 等常见格式。
1.2 目标用户
研发人员、安全审查人员、会议记录人员等需要在涉密环境下处理音频录音的用户。用户具备基本的电脑操作能力,不要求编程背景。
1.3 运行环境
项目 | 要求 |
操作系统 | macOS(Apple Silicon M系列芯片) |
内存 | 16GB 以上(推荐 24GB) |
存储空间 | 50GB 以上可用空间 |
预装软件 | Python 3.10+、Ollama |
本地模型 | SenseVoiceSmall(语音识别)、qwen2.5:14b(大语言模型) |
网络 | 首次安装需联网下载模型,日常使用完全离线 |
1.4 产品名称与标识
项目 | 内容 |
产品名称 | 涉密录音整理 |
浏览器标签页标题 | 涉密录音整理 |
文件夹名称 | audio_transcription |
启动方式 | 双击启动.command 文件 |
二、界面设计需求
2.1 整体布局
界面采用Streamlit Web 框架,浏览器打开。整体为浅灰色背景(#f0f2f5),亮色主题,商业级设计感。页面从上到下分为:固定蓝色标题栏、四步流程区域、左侧侧边栏。
2.2 蓝色标题栏(固定表头)
页面顶部为蓝色渐变标题栏(深蓝→蓝色→深蓝),固定在浏览器顶部(position: fixed),向下滚动时始终可见。标题栏内嵌:
·左侧:侧边栏折叠/展开按钮(半透明白底,点击可收起或展开左侧侧边栏)
·中间:产品名称「涉密录音整理」,居中显示
·蓝色条从屏幕最左端延伸到最右端,无白边
2.3 左侧侧边栏
侧边栏可折叠/展开,包含:
·标题:「涉密录音整理」
·环境状态:FFmpeg、Ollama(qwen2.5:14b)、FunASR 语音识别、音频读写、Word 导出、PDF 导出、思维导图,每项显示绿勾或红叉
·设备信息:CPU/MPS
·模型信息:qwen2.5:14b
·翻译设置:支持不翻译、中文、英语、日语等12种语言
2.4 四步流程区域
页面主体为四步流程,每步用白色圆角卡片展示:
步骤 | 标题 | 说明 | 初始状态 |
第一步 | 导入音频 | 支持 MP3/WAV/M4A/AAC/FLAC/OGG/MP4/MOV/AVI/MKV,文件不限大小 | 正常显示,可操作 |
第二步 | 语音识别 | FunASR SenseVoiceSmall 本地识别 + 说话人分离 | 半透明虚线框,不可操作 |
第三步 | 转写结果 | 转写原文、润色版本、会议摘要、思维导图 | 半透明虚线框,不可操作 |
第四步 | 导出文件 | TXT/Word/PDF/音频,默认保存到桌面 | 半透明虚线框,不可操作 |
未激活的步骤以半透明(opacity: 0.5)虚线边框灰色显示,让用户了解完整流程。导入文件后,后续步骤按顺序激活。
2.5 转写结果区详情
第三步激活后,从上到下依次展示:
·发言人重命名(可折叠):多说话人时可修改名称
·转写原文:每条带发言人标签(彩色圆角)、时间戳、文本内容
·润色结果(已自动生成):可重新润色
·会议摘要(已自动生成):支持自定义摘要要求(文字输入或上传模板),不显示Markdown 格式符号
·思维导图:markmap.js 可交互渲染,支持下载 HTML/PNG/.mmap
2.6 交互与样式细节
·复制内容时不弹出任何提示(隐藏Streamlit toast)
·侧边栏折叠按钮固定在蓝栏左上角,垂直居中
·按钮圆角,悬停有微动效
·上传文件不限大小(maxUploadSize=10GB)
三、功能需求
3.1 音频导入
需求编号 | 需求描述 | 优先级 |
F1.1 | 支持拖拽或点击选择文件导入 | 必须 |
F1.2 | 支持格式:MP3/WAV/M4A/AAC/FLAC/OGG(音频);MP4/MOV/AVI/MKV/FLV/WMV(视频) | 必须 |
F1.3 | 文件大小不限(最大10GB) | 必须 |
F1.4 | 导入后显示文件名、大小、时长,需用户确认导入 | 必须 |
F1.5 | 确认导入后自动进入第二步语音识别 | 必须 |
3.2 语音识别
需求编号 | 需求描述 | 优先级 |
F2.1 | 使用FunASR SenseVoiceSmall 模型,完全本地识别 | 必须 |
F2.2 | 自动将音频转换为16kHz 单声道 WAV 格式 | 必须 |
F2.3 | VAD 语音活动检测,自动分段 | 必须 |
F2.4 | 自动清洗SenseVoice 元数据标签(<|en|>、<|EMO_UNKNOWN|> 等) | 必须 |
F2.5 | 识别完成后自动进入说话人分离 | 必须 |
F2.6 | 支持翻译功能(可选):识别后翻译为12种目标语言之一 | 可选 |
3.3 说话人分离
需求编号 | 需求描述 | 优先级 |
F3.1 | 使用CAM++ 声纹模型提取声纹特征 | 必须 |
F3.2 | 层次聚类算法进行说话人聚类 | 必须 |
F3.3 | 每个说话人分配不同颜色标签(蓝、红、绿、橙等8色) | 必须 |
F3.4 | 用户可重命名说话人名称 | 必须 |
F3.5 | 分离失败时降级为单人模式(全部标为发言人1) | 必须 |
3.4 智能润色
需求编号 | 需求描述 | 优先级 |
F4.1 | 通过Ollama 调用本地 qwen2.5:14b 模型润色 | 必须 |
F4.2 | 润色内容:标点恢复、错别字修正、口语化表达优化、段落分段 | 必须 |
F4.3 | 润色结果与转写原文分别展示,可重新生成 | 必须 |
F4.4 | 润色与摘要、思维导图并行执行,缩短等待时间 | 必须 |
3.5 会议摘要
需求编号 | 需求描述 | 优先级 |
F5.1 | 默认格式:会议主题、主要讨论内容、关键结论、待办事项(200-500字) | 必须 |
F5.2 | 输出纯文本,不使用Markdown 格式符号(#、**、- 等) | 必须 |
F5.3 | 支持自定义摘要要求:用户可输入不限字数的格式/内容要求 | 必须 |
F5.4 | 支持上传参考模板(txt/md/docx/pdf 等任意格式),自动提取内容作为摘要要求 | 必须 |
F5.5 | 用户输入自定义要求后,LLM 必须严格按照用户要求的格式和模块生成 | 必须 |
F5.6 | 摘要以纯文本展示框呈现,可重新生成 | 必须 |
3.6 思维导图
需求编号 | 需求描述 | 优先级 |
F6.1 | 使用LLM 从会议文本提取 3-5 级层级要点,输出 JSON 结构 | 必须 |
F6.2 | 使用markmap.js 在页面内渲染可交互思维导图(支持折叠/展开) | 必须 |
F6.3 | 首次生成失败时自动重试3 次,每次间隔 1 秒 | 必须 |
F6.4 | 下载HTML:与页面呈现完全一致的 markmap HTML 文件,双击可打开 | 必须 |
F6.5 | 下载PNG:用 Playwright 对 markmap HTML 截图,与页面一致;未安装 Playwright 时回退到 matplotlib | 可选 |
F6.6 | 下载.mmap:MindManager XML 格式,XMind 可导入 | 可选 |
F6.7 | 支持重新生成思维导图 | 必须 |
3.7 文件导出
需求编号 | 需求描述 | 优先级 |
F7.1 | 导出TXT:纯文本格式 | 必须 |
F7.2 | 导出Word(.docx):三段式排版(会议摘要 → 润色版本 → 会议原文记录) | 必须 |
F7.3 | 导出PDF:三段式排版,与 Word 内容一致 | 必须 |
F7.4 | Word/PDF 导出时自动去除 Markdown 格式符号 | 必须 |
F7.5 | 排版规范:两端对齐、首行缩进2字符、1.5倍行距 | 必须 |
F7.6 | 用户可自定义文档标题,默认「涉密录音整理_日期」 | 必须 |
F7.7 | 默认保存到桌面 | 必须 |
F7.8 | 支持导出音频文件(MP3/AAC) | 可选 |
四、非功能需求
4.1 安全性
·所有语音识别、文本处理、模型推理均在本地完成,不发送任何数据到云端
·不依赖任何外部API(首次安装下载模型除外)
·临时文件存放在程序目录下的temp/ 文件夹,可手动清理
4.2 易用性
·用户只需双击启动.command 即可启动,无需终端命令
·首次运行自动创建虚拟环境并安装所有依赖
·界面引导清晰:四步流程,未激活步骤半透明预览
·适合非技术用户,不需要编程知识
4.3 性能
·语音识别模型首次加载约1-2分钟,后续从缓存读取
·润色、摘要、思维导图并行执行,减少总等待时间
·支持大文件(测试通过10GB 音频文件导入)
五、开发流程设计
5.1 技术架构
系统采用前后端一体的Streamlit 架构,所有模块在本地运行:
层级 | 技术 | 说明 |
Web 界面 | Streamlit + CSS + JavaScript | 浏览器渲染,蓝色固定标题栏,四步流程卡片 |
语音识别 | FunASR + SenseVoiceSmall | 本地模型,VAD 分段,CPU 推理 |
说话人分离 | CAM++ + scikit-learn | 声纹特征提取+ 层次聚类 |
大语言模型 | Ollama + qwen2.5:14b | 本地润色、摘要、思维导图提取 |
音频处理 | FFmpeg(imageio-ffmpeg) | 格式转换、音频提取 |
文档导出 | python-docx + reportlab | Word/PDF 生成,Markdown 清除 |
思维导图 | markmap.js + Playwright | 页面渲染+ PNG 截图 |
5.2 核心模块
序号 | 模块 | 开发内容 | 依赖关系 |
1 | 配置模块(config.py) | 路径、设备、模型、导出、文件格式等全局配置 | 无 |
2 | 音频处理(audio_processor.py) | FFmpeg 检测、音频格式转换、时长/大小获取 | config.py |
3 | 语音识别(transcriber.py) | SenseVoiceSmall 模型加载、VAD 分段、识别结果清洗 | config.py, funasr |
4 | 说话人分离(diarizer.py) | CAM++ 声纹提取、层次聚类、与转写文本合并 | config.py, transcriber.py |
5 | LLM 模块 (llm_polisher.py) | Ollama 调用封装、润色、摘要(含自定义)、思维导图提取(含重试) | config.py, ollama |
6 | 导出模块(exporter.py) | TXT/Word/PDF/音频导出、Markdown 清除、三段式排版 | config.py, python-docx, reportlab |
7 | 思维导图(mindmap_generator.py) | markmap HTML 生成、Playwright PNG 截图、matplotlib 回退、.mmap 导出 | mindmap JSON 结构 |
8 | 主界面(app.py) | UI 组装、四步流程串联、CSS/JS 固定标题栏、侧边栏控制 | 以上所有模块 |
9 | 启动脚本(启动.command) | 环境检测、venv 创建、依赖安装、Ollama 检查、Streamlit 启动 | 无 |
5.3 开发流程(按顺序)
第一阶段:基础环境搭建
·1. 创建项目目录结构,编写 config.py 全局配置
·2. 编写 启动.command 启动脚本,实现 venv 自动创建、依赖自动安装、Ollama 检测
·3. 编写 logger_utils.py 日志模块
·4. 编写 .streamlit/config.toml,配置端口、主题、上传大小限制
第二阶段:核心功能开发
·5. 开发 audio_processor.py:FFmpeg 检测、webm/各格式转 WAV、音频时长和大小获取
·6. 开发 transcriber.py:加载 SenseVoiceSmall、VAD 分段识别、元数据标签清洗、时间戳对齐
·7. 开发 diarizer.py:CAM++ 声纹提取、层次聚类、说话人标签合并到转写结果
·8. 开发 llm_polisher.py:Ollama 客户端封装、润色函数、摘要函数(含自定义指令)、思维导图 JSON 提取(含3次重试)、翻译函数
第三阶段:输出与导出
·9. 开发 exporter.py:TXT 导出、Word 导出(三段式+排版规范+Markdown 清除)、PDF 导出(三段式+Markdown 清除)、音频导出
·10. 开发 mindmap_generator.py:markmap HTML 生成、Playwright PNG 截图(file:// 协议加载)、matplotlib 回退方案、.mmap/.mm 导出
第四阶段:界面组装
·11. 开发 app.py 主界面:CSS 样式定义(固定蓝栏、侧边栏按钮、流程卡片、半透明预览)
·12. JavaScript:蓝栏高度测量(CSS 变量)、侧边栏折叠/展开功能
·13. 侧边栏:环境状态检测、设备/模型信息、翻译设置
·14. 第一步:文件上传器、文件信息展示、确认导入按钮
·15. 第二步:自动转写流程(预处理→识别→说话人分离→翻译→自动润色/摘要/思维导图)
·16. 第三步:转写原文展示、润色结果、会议摘要(含自定义要求+模板上传)、思维导图(含三种下载)
·17. 第四步:导出区域(TXT/Word/PDF/音频四个按钮,自定义标题)
第五阶段:测试与优化
·18. 测试全流程:导入音频→转写→润色→摘要→思维导图→导出
·19. 优化 CSS:蓝栏固定、白底透明、侧边栏按钮位置、标题居中
·20. 优化摘要:去除 Markdown 格式、支持自定义模板
·21. 优化思维导图:Playwright 截图与页面一致、失败重试机制
·22. 清理无用依赖(flask、sounddevice、mutagen 等)
·23. 更新 requirements.txt 和 启动.command 安装清单
六、交付文件清单
文件名 | 用途 | 必须 |
app.py | 主程序,Streamlit 界面 | 是 |
config.py | 全局配置 | 是 |
transcriber.py | 语音识别模块 | 是 |
diarizer.py | 说话人分离模块 | 是 |
audio_processor.py | 音频处理模块 | 是 |
llm_polisher.py | LLM 调用模块 | 是 |
exporter.py | 文档导出模块 | 是 |
mindmap_generator.py | 思维导图生成模块 | 是 |
logger_utils.py | 日志工具 | 是 |
启动.command | 启动脚本 | 是 |
requirements.txt | 依赖清单 | 是 |
.streamlit/config.toml | Streamlit 配置 | 是 |
install.sh | 安装脚本(备用) | 否 |
七、约束与假设
·产品仅支持macOS(Apple Silicon),不支持 Windows/Linux
·实时录音功能已移除,仅支持文件导入
·思维导图PNG 下载需要额外安装 Playwright,否则回退到 matplotlib(风格不同)
·首次运行需联网下载模型(SenseVoiceSmall 约 1GB,qwen2.5:14b 约 8GB)
·转写原文仅供查看,不可编辑
本期分享就到这里。
更多工作场景相关的提示词,可以翻阅我写的两本书(黑色封面,可以去我的视频号 AI好品汇 的微信小店内查看),也欢迎交流。
我也可以为您、您的部门、您的企业提供提示词定制、打磨和陪跑服务。快速帮助企业和团队提升效能。
夜雨聆风