FireRedASR-AED-L模型批量处理脚本编写教程Python实现自动化任务如果你手头有一大堆音频文件需要一个个手动上传、调用模型、再保存结果那感觉就像用勺子舀干一个游泳池效率低到让人抓狂。特别是处理离线音频数据集时这种重复劳动不仅耗时还容易出错。今天我们就来解决这个痛点。我将手把手带你写一个Python脚本让它自动帮你完成从遍历文件夹、调用FireRedASR-AED-L模型API到汇总结果、生成日志的全过程。这个脚本就像你雇了一个不知疲倦的助手能极大提升你处理音频数据的效率。即使你Python刚入门跟着步骤走也能轻松搞定。1. 环境准备与脚本框架在开始敲代码之前我们得先把“厨房”收拾好把需要的“食材”和“工具”备齐。1.1 安装必要的Python库你需要确保电脑上已经安装了Python建议3.7或以上版本。然后我们通过pip安装几个关键的库。打开你的终端或命令提示符依次输入以下命令pip install requests pip install tqdmrequests这是我们用来和FireRedASR-AED-L模型的API“对话”的库负责发送音频文件并接收识别结果。tqdm这是一个非常酷的进度条库。当脚本处理成百上千个文件时有个进度条能让你清楚知道进展到哪了还剩多久而不是对着黑屏干等。1.2 理解脚本要做什么在动笔之前我们先在脑子里画个蓝图。这个脚本的核心工作流很简单定位目标告诉脚本你的音频文件都放在哪个文件夹里。挨个处理脚本自己会找到文件夹里所有支持的音频文件比如.wav, .mp3。呼叫模型把每一个文件发送给FireRedASR-AED-L模型的API。记录结果把模型返回的识别文本保存下来。写工作日志处理完了谁失败了谁都清清楚楚记下来。我们最终会得到两个核心产出一个包含所有识别结果的文本文件和一个记录处理详情的日志文件。1.3 创建脚本文件在你觉得合适的地方比如桌面或者专门的项目文件夹新建一个文本文件然后把它的后缀名改成.py例如batch_process_asr.py。之后我们所有的代码都会写在这个文件里。2. 编写核心处理函数现在我们开始构建脚本的“心脏”部分——负责与API交互的函数。2.1 定义API调用函数这个函数只专心做一件事发送一个音频文件并拿回识别结果。import requests def transcribe_audio(file_path, api_url): 调用FireRedASR-AED-L模型API转录单个音频文件。 参数: file_path (str): 音频文件的本地路径。 api_url (str): 模型API的端点地址。 返回: str: 成功则返回识别文本失败则返回None。 try: # 1. 以二进制读取模式打开音频文件 with open(file_path, rb) as audio_file: # 2. 构建要发送的文件数据 files {file: (file_path, audio_file)} # 3. 向API地址发送POST请求 response requests.post(api_url, filesfiles) # 4. 检查请求是否成功HTTP状态码为200 if response.status_code 200: # 假设API返回JSON格式其中包含‘text’字段 result response.json() return result.get(text, ) # 安全地获取‘text’字段如果没有则返回空字符串 else: # 如果请求失败打印错误信息 print(f 请求失败状态码{response.status_code}, 文件{file_path}) return None except Exception as e: # 捕获并打印任何异常如文件不存在、网络错误等 print(f 处理文件时出错{file_path}, 错误{e}) return None代码解释我们用try...except把代码包起来这样即使某个文件处理出错脚本也不会崩溃而是记录下错误继续处理下一个。files{file: ...}是构造上传文件数据的标准方式大多数接收文件上传的API都这么用。response.json()是把API返回的JSON格式数据转换成Python字典方便我们提取里面的文字。2.2 设置API地址和文件路径我们需要告诉脚本两个关键信息模型在哪里以及音频文件在哪里。通常我们在脚本开头定义它们。# 配置部分 API_URL http://your-model-api-endpoint.com/v1/transcribe # 请替换为实际的API地址 AUDIO_FOLDER ./audio_files # 请替换为你的音频文件夹路径 OUTPUT_TEXT_FILE ./transcription_results.txt LOG_FILE ./processing_log.txt # 支持的音频文件格式你可以根据需要扩展 SUPPORTED_FORMATS (.wav, .mp3, .flac, .m4a)重要提示API_URL你需要把它替换成你实际使用的FireRedASR-AED-L模型API地址。如果你是在本地部署的模型地址可能是http://localhost:8000/predict之类的。AUDIO_FOLDER改成你存放音频文件的文件夹路径。./表示当前脚本所在的目录你也可以用像C:/Users/Name/Documents/Audio这样的绝对路径。3. 构建批量处理流程核心函数有了现在我们来搭建让脚本自动运行起来的流程。3.1 遍历文件夹并收集文件脚本需要自己找到所有该处理的文件。import os from tqdm import tqdm def batch_transcribe(folder_path, api_url, output_file, log_file): 批量处理文件夹内的所有音频文件。 参数: folder_path (str): 音频文件夹路径。 api_url (str): API地址。 output_file (str): 保存所有识别结果的文本文件路径。 log_file (str): 日志文件路径。 # 1. 收集所有支持的音频文件 audio_files [] for root, dirs, files in os.walk(folder_path): for file in files: if file.lower().endswith(SUPPORTED_FORMATS): full_path os.path.join(root, file) audio_files.append(full_path) if not audio_files: print(f在文件夹 {folder_path} 中未找到支持的音频文件。) return total_files len(audio_files) print(f找到 {total_files} 个待处理音频文件。) # 2. 打开结果文件和日志文件 with open(output_file, w, encodingutf-8) as result_f, \ open(log_file, w, encodingutf-8) as log_f: log_f.write(f批量处理日志 - 开始时间\n) log_f.write(f目标文件夹{folder_path}\n) log_f.write(fAPI地址{api_url}\n) log_f.write(f找到文件数{total_files}\n) log_f.write(- * 50 \n) success_count 0 fail_count 0 # 3. 使用tqdm创建进度条遍历处理每个文件 for audio_path in tqdm(audio_files, desc处理进度): file_name os.path.basename(audio_path) log_f.write(f处理文件{file_name}... ) # 调用我们之前写好的函数 transcription transcribe_audio(audio_path, api_url) if transcription is not None: # 4. 写入成功结果 result_f.write(f【{file_name}】\n) result_f.write(f{transcription}\n\n) log_f.write(成功\n) success_count 1 else: # 5. 记录失败信息 log_f.write(失败\n) fail_count 1 # 6. 处理完成写入总结日志 log_f.write(- * 50 \n) log_f.write(f处理完成\n) log_f.write(f成功{success_count} 个\n) log_f.write(f失败{fail_count} 个\n) log_f.write(f成功率{success_count/total_files*100:.2f}%\n) print(f\n处理完成成功 {success_count} 个失败 {fail_count} 个。) print(f识别结果已保存至{output_file}) print(f详细日志已保存至{log_file})代码亮点os.walk()这个函数非常强大能递归遍历文件夹下的所有子文件夹确保一个文件都不会漏掉。tqdm(audio_files, desc“处理进度”)这就是进度条魔法发生的地方。tqdm会自动计算并显示进度、剩余时间。我们同时打开了两个文件result_f和log_f进行写入所有结果和日志都是实时保存的。3.2 让脚本跑起来最后我们需要添加一段代码来启动整个批量处理流程。if __name__ __main__: print(FireRedASR-AED-L 音频批量处理脚本启动...) print(fAPI地址{API_URL}) print(f音频文件夹{AUDIO_FOLDER}) print(- * 40) # 检查文件夹是否存在 if not os.path.isdir(AUDIO_FOLDER): print(f错误找不到音频文件夹 {AUDIO_FOLDER}请检查路径。) else: # 调用主处理函数 batch_transcribe(AUDIO_FOLDER, API_URL, OUTPUT_TEXT_FILE, LOG_FILE)if __name__ “__main__”:这行代码是一个Python的惯用法它意味着当你直接运行这个脚本文件时下面的代码块才会执行。如果你把这个脚本当作一个模块导入到其他程序里这部分代码就不会运行这增加了代码的复用性。4. 运行脚本与查看结果4.1 如何运行脚本确保你已经按照第一步安装了requests和tqdm。用文本编辑器如VSCode、Sublime Text甚至记事本打开batch_process_asr.py。修改API_URL和AUDIO_FOLDER这两个变量的值为你自己的地址和路径。保存文件。打开终端命令行导航到你的脚本所在目录。比如你的脚本在桌面cd Desktop运行脚本python batch_process_asr.py如果一切顺利你会看到终端里出现一个进度条看着它一点点走完非常有成就感。4.2 结果文件解读处理完成后你会得到两个文件transcription_results.txt这是核心产出。打开它你会看到类似这样的内容【会议录音_20231001.wav】 大家好我们开始今天的项目会议... 【客户访谈_片段1.mp3】 请问您对我们产品的初步印象如何... 【播客节目_episode_05.flac】 欢迎收听本期科技漫谈今天我们来聊聊...每个文件的结果都被清晰地标记并分隔开一目了然。processing_log.txt这是处理过程的“黑匣子”。记录了每个文件处理的状态成功/失败以及最终的数据统计。如果某个文件失败了你可以根据日志里的文件名去排查原因是文件损坏了还是网络临时中断了。5. 实用技巧与进阶思路基本的脚本已经能工作了但我们可以让它更强大、更贴心。5.1 增加文件过滤与重试机制有时文件夹里可能有无关文件或者网络偶尔不稳定。我们可以改进脚本# 在批量处理函数内部遍历文件之前可以加入过滤 def is_valid_audio(file_path): 简单的有效性检查例如文件大小不能为0 return os.path.getsize(file_path) 1024 # 例如大于1KB才处理 # 在调用transcribe_audio时可以加入重试逻辑 def transcribe_audio_with_retry(file_path, api_url, max_retries2): 带重试机制的转录函数 for attempt in range(max_retries): result transcribe_audio(file_path, api_url) if result is not None: return result else: print(f 第{attempt1}次尝试失败正在重试...) time.sleep(1) # 重试前等待1秒 print(f 文件 {file_path} 重试{max_retries}次后仍失败。) return None5.2 处理更复杂的API响应有些API返回的JSON结构可能更复杂比如包含置信度、分词结果等。我们可以轻松地扩展结果保存功能# 修改结果写入部分保存更多信息 if transcription is not None: # 假设API返回 {text: ..., confidence: 0.95, segments: [...]} text transcription.get(text, ) confidence transcription.get(confidence, 0) result_f.write(f【{file_name}】 (置信度{confidence:.2%})\n) result_f.write(f{text}\n\n) # 如果需要还可以保存分段信息到另一个文件 # ...5.3 脚本的灵活调用你可以不用每次都去改脚本里的路径。通过使用命令行参数运行脚本时再指定文件夹会更灵活import sys if __name__ __main__: if len(sys.argv) 1: AUDIO_FOLDER sys.argv[1] # 从命令行第一个参数获取路径 else: print(“用法python batch_process_asr.py 音频文件夹路径”) sys.exit(1) # ... 其余代码不变然后这样运行python batch_process_asr.py ./my_audio_data6. 总结写这个脚本的过程其实就是把一项繁琐的手动工作分解成几个明确的步骤然后用代码把它们串联起来自动执行。从最开始的单个文件测试到最后的批量处理加日志记录每一步都让脚本变得更可靠、更实用。实际用下来最大的感受就是“解放双手”。一旦脚本跑起来你就可以去忙别的事情等回来的时候所有的音频都已经转成了文字整整齐齐地放在那里。即使中途遇到几个文件处理失败详细的日志也能帮你快速定位问题而不是像以前一样毫无头绪。这个脚本只是一个起点。你可以根据自己项目的具体需求给它添加更多功能比如支持更多音频格式、集成不同的ASR模型API、将结果自动导入数据库等等。希望这个教程能帮你打开自动化处理的大门让你有更多时间去思考那些真正需要创造力的工作。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。