# talkshow **Repository Path**: mktime/talkshow ## Basic Information - **Project Name**: talkshow - **Description**: 离线声纹识别与双语转录工具 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-01-14 - **Last Updated**: 2026-01-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 离线声纹识别与双语转录工具 本项目是一个全自动化的语音处理流水线,专门用于处理多说话人场景(如访谈、播客、会议记录)。它能够在本地完全离线运行,实现声纹分割、语音转文字以及自动翻译。 ## 主要功能 - **智能声纹分割**:识别音频中不同的说话人,并自动合并同一个人连续的短句,过滤环境噪音。 - **离线语音识别**:利用 GLM-ASR-Nano 模型,在本地快速将语音转换为原始文本。 - **离线机器翻译**:利用腾讯 HY-MT 模型,将识别出的原文翻译为中文。 - **性能监控**:内置装饰器,实时打印每个处理环节的耗时,方便在 Apple Silicon 芯片上优化性能。 --- ## 运行环境搭建 (macOS M4/Apple Silicon) 建议在 Miniconda 或 Anaconda 环境下运行,以确保 C 库(FFmpeg)的链接正确。 ### 1. 安装基础依赖 打开终端,执行以下命令: Bash ``` # 安装 FFmpeg (用于音频切割和重采样) brew install ffmpeg # 创建并激活 Conda 环境 conda create -n audio_insight python=3.11 -y conda activate audio_insight # 安装 PyTorch 生态 (针对 Apple Silicon 优化) pip install torch torchvision torchaudio # 安装声纹识别与音频处理库 pip install pyannote.audio # 安装 llama-cpp-python (用于运行 GGUF 模型) # 注意:M4 芯片支持 Metal 加速,安装时指定环境变量 CMAKE_ARGS="-DGGML_METAL=ON" pip install llama-cpp-python ``` ### 2. 准备模型文件 在项目根目录下创建 `models` 文件夹,并下载以下模型: |模型类型|模型名称|下载地址 (Hugging Face)| |---|---|---| |翻译模型|HY-MT1.5-1.8B-Q8_0.gguf|tencent/HY-MT1.5-1.8B-GGUF| |ASR 模型|GLM-ASR-Nano-1.6B-Q4_K.gguf|concedo/GLM-ASR-Nano-2512-GGUF| |ASR 投影器|mmproj-GLM-ASR-Nano-Q8_0.gguf|concedo/GLM-ASR-Nano-2512-GGUF| 注意:首次运行声纹识别需要申请 `pyannote/speaker-diarization-3.1` 的访问权限,并在终端执行 `huggingface-cli login` 登录您的 Token。 --- ## 如何运行 ### 1. 准备待处理音频 将您的音频文件(如 `small.mp3`)放入项目根目录。 ### 2. 检查程序配置 确保脚本中的 `fname` 指向您的文件名: Python ``` fname = 'small.mp3' output_dir = "./segments" ``` ### 3. 执行脚本 Bash ``` python talkshow.py ``` --- ## 处理流程详解 1. **diarize_audio**: - 加载音频并重采样至 16000Hz 单声道。 - 调用 Pyannote 识别说话人。 - 逻辑优化:将说话间隔小于 1.0s 的同说话人片段合并,忽略小于 0.5s 的杂音。 - 调用 FFmpeg 将音频物理切割成小的片段存储。 2. **asr_audio**: - 遍历切割好的片段,调用命令行工具进行语音转文字。 - 该步骤利用了 GLM-ASR 的多模态理解能力。 3. **translate_text**: - 批量处理:在识别完成后集中加载一次翻译模型,提高显存利用率。 - 采用 Llama 实例在 Python 内部进行推理,并最终输出双语对照结果。 --- ## 性能参考 (M4 Mac) 由于使用了计时装饰器,您可以在控制台看到类似以下的输出: - DEBUG: 函数 [diarize_audio] 运行耗时: 12.4500 秒 - DEBUG: 函数 [asr_audio] 运行耗时: 35.2100 秒 - DEBUG: 函数 [translate_text] 运行耗时: 5.1200 秒 --- ## 常见问题 - **报错 DiarizeOutput 没有 itertracks**:代码已针对 Pyannote 3.1+ 修复,请确保使用 `result.speaker_diarization.itertracks()`。 - **ASR 识别结果为空**:请检查 `mmproj` 文件路径是否正确,这是音频理解的关键组件。 - **翻译卡住**:代码中加入了 `stop=["\n\n"]`,有效防止了离线模型进入无限生成或交互模式。