DeEAR语音情感分析工具链:集成FFmpeg预处理+DeEAR推理+Excel结果导出方案

张开发
2026/6/20 15:15:22 15 分钟阅读
DeEAR语音情感分析工具链:集成FFmpeg预处理+DeEAR推理+Excel结果导出方案
DeEAR语音情感分析工具链集成FFmpeg预处理DeEAR推理Excel结果导出方案1. 引言从语音文件到情感洞察一站式搞定你有没有遇到过这样的场景手头有一堆客服录音、访谈音频或者演讲片段你想快速了解这些语音背后的情绪状态——说话人是平静还是激动表达是自然还是生硬节奏是平淡还是富有韵律手动去听、去分析不仅耗时耗力还容易受主观影响。今天要介绍的就是一套能帮你自动化完成这项工作的“瑞士军刀”——DeEAR语音情感分析工具链。它不是一个孤立的模型而是一个完整的解决方案从最原始的MP3、M4A等常见音频格式开始通过FFmpeg进行标准化预处理然后送入基于wav2vec2的DeEAR深度模型进行精准的情感维度分析最后将分析结果清晰、结构化地导出到Excel表格中。整个过程你只需要运行几个简单的脚本。这篇文章要带你做什么我将手把手带你搭建并运行这套工具链。你不需要是机器学习专家甚至不需要懂Python只要能在命令行里敲几下就能把一堆杂乱的音频文件变成一份包含“唤醒度”、“自然度”、“韵律”三个情感维度的详细报告。我们会从环境准备开始一步步走过音频预处理、模型推理和结果导出的全过程并提供完整的代码和常见问题解决方法。2. 工具链全景FFmpeg DeEAR Excel三步走策略在深入细节之前我们先俯瞰一下整个工具链的全貌。理解了这个流程后面的操作就会变得非常清晰。整个方案的核心是三个环节的紧密衔接FFmpeg预处理环节这是“原材料加工车间”。你的音频文件可能五花八门MP3, M4A, WMA等音量大小不一甚至含有噪音。FFmpeg的任务就是将它们统一“加工”成DeEAR模型最喜欢的“食材”——单声道、16kHz采样率、16位深度的WAV文件并可选进行标准化音量统一和降噪确保输入质量。DeEAR模型推理环节这是“核心分析实验室”。加工好的WAV文件被送入DeEAR模型。这个模型基于强大的wav2vec2架构经过专门训练能够像一位经验丰富的心理学家从声音信号中解析出三个关键的情感表达维度唤醒度平静vs激动、自然度生硬vs自然、韵律平淡vs富有节奏感。Excel结果导出环节这是“报告生成中心”。模型分析出的原始数据通常是概率或分类标签被一个Python脚本收集、整理并规整地写入Excel文件。每一行对应一个音频文件每一列对应一个情感维度或文件信息你可以轻松地进行排序、筛选和可视化。下面的流程图概括了这个“三步走”的完整过程flowchart TD A[输入多样音频文件brMP3/M4A/WAV等] -- B{FFmpeg预处理模块} B -- C[格式转换br至WAV] C -- D[采样率/声道标准化br16kHz, 单声道] D -- E[音量标准化与降噪br可选] E -- F[输出标准WAV文件] F -- G{DeEAR模型推理模块} G -- H[加载预训练模型brwav2vec2-base] H -- I[提取语音特征] I -- J[情感维度分类br唤醒度/自然度/韵律] J -- K[输出原始分析结果] K -- L{Excel导出模块} L -- M[收集与整理数据] M -- N[生成结构化表格] N -- O[保存为.xlsx文件] P[最终成果] -- Q[可视化情感报告] P -- R[批量分析结果汇总] O -- P简单来说你提供一个装满音频的文件夹运行一串命令最终就能得到一个Excel表格里面清晰地记录着每个音频文件的情感“指纹”。接下来我们开始准备“施工”。3. 环境准备与快速部署工欲善其事必先利其器。我们先来把需要的工具和环境准备好。整个过程在Linux系统如Ubuntu或WSL2Windows子系统下进行最为顺畅。3.1 基础环境检查与FFmpeg安装首先确保你的系统已经安装了Python和pip。然后我们需要安装最重要的预处理工具——FFmpeg。打开你的终端执行以下命令# 1. 更新软件包列表Ubuntu/Debian系统 sudo apt-get update # 2. 安装FFmpeg sudo apt-get install ffmpeg -y # 3. 验证安装 ffmpeg -version如果安装成功你会看到FFmpeg的版本信息。这证明了你的“音频加工车间”已经就位。3.2 获取DeEAR模型与工具脚本接下来我们需要拿到DeEAR模型本身以及我们编写好的工具链脚本。假设你已经通过CSDN星图镜像或其他方式获得了DeEAR的镜像或项目文件。关键的文件结构应该是这样的/你的工作目录/ ├── DeEAR_Base/ # DeEAR模型核心目录 │ ├── app.py # Gradio Web界面主程序 │ ├── start.sh # 启动脚本 │ └── ... # 其他模型依赖文件 ├── audio_input/ # 【你创建】存放原始音频的文件夹 ├── audio_processed/ # 【你创建】存放处理后WAV的文件夹 ├── ffmpeg_preprocess.py # FFmpeg预处理脚本 ├── deear_batch_predict.py # 批量推理脚本 └── export_to_excel.py # 结果导出脚本ffmpeg_preprocess.py、deear_batch_predict.py和export_to_excel.py这三个脚本需要你自己创建。别担心我会在下一节提供它们的完整代码你只需要复制粘贴保存即可。现在请先创建必要的文件夹mkdir -p audio_input audio_processed resultsaudio_input: 用于存放你待分析的原始音频文件如.mp3,.m4a。audio_processed: 用于存放经过FFmpeg处理后的标准WAV文件。results: 用于存放最终生成的Excel结果文件。环境准备好了脚本和文件夹也齐了接下来我们看看每个环节的脚本具体怎么写、怎么用。4. 核心工具链脚本详解这一节我们深入工具链的三个核心脚本。你可以将下面的代码分别保存为三个独立的.py文件。4.1 FFmpeg预处理脚本 (ffmpeg_preprocess.py)这个脚本的任务是遍历audio_input文件夹将所有音频转换成DeEAR需要的格式。import os import subprocess from pathlib import Path def preprocess_audio(input_dir, output_dir): 使用FFmpeg批量预处理音频文件。 将输入目录下的所有音频文件转换为单声道、16kHz、16bit的WAV格式。 参数: input_dir: 原始音频文件目录 output_dir: 处理后WAV文件输出目录 input_path Path(input_dir) output_path Path(output_dir) output_path.mkdir(parentsTrue, exist_okTrue) # 支持的输入音频格式 supported_formats (.mp3, .m4a, .wav, .flac, .ogg, .wma) processed_count 0 for audio_file in input_path.iterdir(): if audio_file.suffix.lower() in supported_formats: output_file output_path / f{audio_file.stem}_processed.wav # FFmpeg命令核心参数 # -i 输入文件 # -ac 1 设置为单声道 # -ar 16000 采样率设为16kHz # -acodec pcm_s16le 编码为16位深度PCM # -loglevel quiet 静默模式减少输出信息 cmd [ ffmpeg, -i, str(audio_file), -ac, 1, # 单声道 -ar, 16000, # 采样率16kHz -acodec, pcm_s16le, # 16位深度 -loglevel, quiet, str(output_file) ] try: subprocess.run(cmd, checkTrue) print(f✅ 成功处理: {audio_file.name} - {output_file.name}) processed_count 1 except subprocess.CalledProcessError as e: print(f❌ 处理失败 {audio_file.name}: {e}) print(f\n 预处理完成共处理 {processed_count} 个文件。) print(f处理后的文件保存在: {output_dir}) if __name__ __main__: # 使用示例修改这里的路径为你自己的实际路径 input_directory audio_input # 原始音频文件夹 output_directory audio_processed # 处理后输出文件夹 preprocess_audio(input_directory, output_directory)如何使用它将你的原始音频如customer_call_1.mp3放入audio_input文件夹。在终端运行python ffmpeg_preprocess.py。脚本会自动在audio_processed文件夹中生成对应的customer_call_1_processed.wav文件。4.2 DeEAR批量推理脚本 (deear_batch_predict.py)这个脚本会加载DeEAR模型并批量分析处理好的WAV文件。import torch import librosa import numpy as np from pathlib import Path import json import sys # 假设DeEAR模型的相关代码在一个可导入的模块中 # 这里需要根据你的DeEAR实际项目结构进行调整 sys.path.append(/root/DeEAR_Base) # 添加DeEAR项目路径 from model import DeEARModel # 这是一个示例导入请替换为实际模型类 def load_deear_model(model_path): 加载预训练的DeEAR模型 print(正在加载DeEAR模型...) # 这里需要根据你的模型实际加载方式编写 # 示例 model DeEARModel.from_pretrained(model_path) model torch.load(model_path, map_locationcpu) model.eval() # 设置为评估模式 print(模型加载完毕。) return model def predict_emotion(model, audio_path): 对单个音频文件进行情感预测。 参数: model: 加载好的DeEAR模型 audio_path: 音频文件路径 返回: dict: 包含唤醒度、自然度、韵律的预测结果 # 1. 加载音频 (librosa会自动重采样到模型需要的采样率例如16kHz) waveform, sr librosa.load(audio_path, sr16000, monoTrue) # 2. 将音频转换为模型需要的输入格式 (例如: [1, sequence_length]) # 这里需要根据你的模型输入要求进行调整 input_tensor torch.from_numpy(waveform).float().unsqueeze(0) # 增加批次维度 # 3. 模型推理 with torch.no_grad(): predictions model(input_tensor) # 4. 解析预测结果 # 假设模型输出是一个字典或元组包含三个维度的logits或概率 # arousal_logits, nature_logits, prosody_logits predictions # 以下为示例逻辑请替换为实际的后处理代码 arousal_prob torch.softmax(predictions[0], dim-1) # 唤醒度概率 nature_prob torch.softmax(predictions[1], dim-1) # 自然度概率 prosody_prob torch.softmax(predictions[2], dim-1) # 韵律概率 arousal_label 高唤醒 if torch.argmax(arousal_prob).item() 1 else 低唤醒 nature_label 自然 if torch.argmax(nature_prob).item() 1 else 不自然 prosody_label 富有韵律 if torch.argmax(prosody_prob).item() 1 else 平淡 result { filename: Path(audio_path).name, arousal: arousal_label, arousal_confidence: torch.max(arousal_prob).item(), nature: nature_label, nature_confidence: torch.max(nature_prob).item(), prosody: prosody_label, prosody_confidence: torch.max(prosody_prob).item() } return result def batch_predict(model, audio_dir, output_jsonpredictions.json): 批量预测音频目录下的所有WAV文件。 参数: model: DeEAR模型 audio_dir: 处理后的WAV文件目录 output_json: 结果保存的JSON文件路径 audio_path Path(audio_dir) wav_files list(audio_path.glob(*.wav)) if not wav_files: print(f在目录 {audio_dir} 中未找到.wav文件。) return all_results [] print(f开始批量分析 {len(wav_files)} 个音频文件...) for i, wav_file in enumerate(wav_files, 1): print(f正在分析 ({i}/{len(wav_files)}): {wav_file.name}) try: result predict_emotion(model, wav_file) all_results.append(result) print(f 结果: 唤醒度{result[arousal]}, 自然度{result[nature]}, 韵律{result[prosody]}) except Exception as e: print(f 分析失败: {e}) all_results.append({filename: wav_file.name, error: str(e)}) # 保存结果到JSON文件 with open(output_json, w, encodingutf-8) as f: json.dump(all_results, f, ensure_asciiFalse, indent2) print(f\n 批量分析完成结果已保存至: {output_json}) return all_results if __name__ __main__: # 配置路径 model_path /root/DeEAR_Base/pretrained/deear_model.pth # 请替换为实际模型路径 processed_audio_dir audio_processed output_json_file deear_predictions.json # 加载模型并预测 emotion_model load_deear_model(model_path) batch_predict(emotion_model, processed_audio_dir, output_json_file)重要提示这个脚本中的模型加载 (load_deear_model) 和预测逻辑 (predict_emotion) 是示例代码。你需要根据DeEAR项目实际的模型文件格式是.pth、.bin还是Hugging Face格式和推理接口进行调整。核心是调用正确的模型并获取唤醒度、自然度、韵律三个维度的输出。4.3 Excel结果导出脚本 (export_to_excel.py)这个脚本读取上一步生成的JSON结果并生成美观的Excel报告。import json import pandas as pd from pathlib import Path from openpyxl import load_workbook from openpyxl.styles import PatternFill, Font, Alignment, Border, Side def create_excel_report(json_file, output_exceldeear_emotion_report.xlsx): 将JSON格式的预测结果导出为格式化的Excel文件。 参数: json_file: 输入的JSON结果文件路径 output_excel: 输出的Excel文件名 # 1. 读取JSON数据 with open(json_file, r, encodingutf-8) as f: data json.load(f) if not data: print(JSON文件中没有数据。) return # 2. 转换为Pandas DataFrame df pd.DataFrame(data) # 3. 重命名列使其更易读 column_mapping { filename: 文件名, arousal: 唤醒度, arousal_confidence: 唤醒度置信度, nature: 自然度, nature_confidence: 自然度置信度, prosody: 韵律, prosody_confidence: 韵律置信度 } df.rename(columnscolumn_mapping, inplaceTrue) # 4. 保存到Excel df.to_excel(output_excel, indexFalse, sheet_name情感分析结果) print(f✅ 基础Excel文件已生成: {output_excel}) # 5. 可选使用openpyxl进行高级格式化 try: wb load_workbook(output_excel) ws wb.active # 设置标题行样式 header_fill PatternFill(start_color366092, end_color366092, fill_typesolid) # 深蓝色 header_font Font(colorFFFFFF, boldTrue) # 白色加粗 center_alignment Alignment(horizontalcenter, verticalcenter) for cell in ws[1]: # 第一行是标题行 cell.fill header_fill cell.font header_font cell.alignment center_alignment # 设置所有单元格居中对齐和自动列宽 thin_border Border(leftSide(stylethin), rightSide(stylethin), topSide(stylethin), bottomSide(stylethin)) for row in ws.iter_rows(min_row2, max_rowws.max_row, min_col1, max_colws.max_column): for cell in row: cell.alignment Alignment(horizontalcenter, verticalcenter) cell.border thin_border # 自动调整列宽 for column in ws.columns: max_length 0 column_letter column[0].column_letter for cell in column: try: if len(str(cell.value)) max_length: max_length len(str(cell.value)) except: pass adjusted_width min(max_length 2, 50) # 设置最大宽度 ws.column_dimensions[column_letter].width adjusted_width wb.save(output_excel) print(f Excel文件格式化完成: {output_excel}) except Exception as e: print(f⚠️ 高级格式化失败但基础文件已保存。错误: {e}) if __name__ __main__: # 使用示例 input_json deear_predictions.json # 上一步生成的JSON文件 output_xlsx results/deear_emotion_report.xlsx # 输出到results文件夹 create_excel_report(input_json, output_xlsx)这个脚本会生成一个专业的Excel文件包含清晰的表头、合适的列宽和美观的边框你可以直接用于汇报或进一步分析。5. 完整工作流实战从音频到Excel报告现在让我们把三个脚本串联起来完成一次端到端的实战。假设你已经把三个脚本都准备好了并且audio_input里放了几段测试音频比如speech1.mp3,interview2.m4a。第一步音频预处理python ffmpeg_preprocess.py检查audio_processed文件夹应该能看到转换好的speech1_processed.wav等文件。第二步批量情感分析python deear_batch_predict.py确保脚本中的模型路径是正确的。运行后会生成deear_predictions.json文件里面包含了每个音频的情感分析原始结果。第三步生成Excel报告python export_to_excel.py运行后在results文件夹或当前目录下会生成deear_emotion_report.xlsx文件。用Excel或WPS打开它你会看到一个结构清晰的表格文件名唤醒度唤醒度置信度自然度自然度置信度韵律韵律置信度speech1_processed.wav高唤醒0.92自然0.88富有韵律0.85interview2_processed.wav低唤醒0.76自然0.91平淡0.67一键脚本可选如果你觉得分三步走麻烦可以创建一个run_pipeline.sh的shell脚本#!/bin/bash echo 步骤1: FFmpeg音频预处理 python ffmpeg_preprocess.py echo -e \n 步骤2: DeEAR批量情感分析 python deear_batch_predict.py echo -e \n 步骤3: 生成Excel报告 python export_to_excel.py echo -e \n 全部流程执行完毕请查看 results/ 目录下的Excel报告。然后给脚本执行权限并运行chmod x run_pipeline.sh ./run_pipeline.sh。6. 总结通过这套集成了FFmpeg预处理、DeEAR模型推理和Excel结果导出的工具链我们成功地将一个专业的语音情感分析任务简化成了几个命令行操作。无论你是想分析客服录音的服务质量还是评估演讲者的感染力抑或是研究访谈对象的情绪状态这套方案都能为你提供高效、客观的数据支持。回顾一下我们达成的目标标准化输入利用FFmpeg无论什么格式、什么音质的音频都能被统一处理成模型“爱吃”的格式。自动化分析基于wav2vec2的DeEAR模型能够稳定、批量地解析出语音中的唤醒度、自然度和韵律三个核心情感维度。结构化输出最终的分析结果被清晰地组织在Excel中便于任何人查看、筛选、排序和进行后续的数据分析或可视化。这套方案的优点在于它的模块化和灵活性。你可以轻松地替换其中的某个环节比如使用更复杂的音频增强算法或者将输出结果接入数据库而不是Excel。希望这个工具链能成为你探索语音情感世界的一把得力钥匙。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章