如何在Flask后端直接转录音频无需本地存储?
无需本地存储直接用OpenAI Whisper转录Flask接收的音频
你可以直接在内存中处理前端上传的音频数据,无需写入本地文件。OpenAI Whisper的transcribe()方法支持接收类文件对象(只要实现了read()方法),因此我们可以用BytesIO将上传的音频数据包装成内存中的文件对象,直接传给Whisper处理。
修改步骤
- 导入BytesIO模块:在Flask后端代码中添加
from io import BytesIO,用于在内存中存储音频数据 - 移除本地文件保存逻辑:删掉生成UUID文件名、拼接存储路径、保存文件的代码
- 直接处理内存中的音频数据:将上传的音频文件读取为字节流,用
BytesIO包装后传入model.transcribe()
修改后的完整Flask后端代码
from flask import render_template, request, jsonify, Blueprint from app import app from io import BytesIO # 新增导入 import whisper # 若不再使用本地存储相关配置,可删除以下行 # UPLOADED_FOLDER = '/mnt/d/whisper-backend/recordings' # MODEL_PATH_LARGE = '/mnt/d/whisper-backend/models/large-v2.pt' # MODEL_PATH_TINY = '/mnt/d/whisper-backend/models/tiny.pt' model = whisper.load_model('./models/tiny.pt') translate_route_blueprint = Blueprint("translate", __name__) @translate_route_blueprint.route('/translate', methods=['POST']) def translate(): audio_file = request.files['audio'] # 将音频数据读入内存中的BytesIO对象 audio_stream = BytesIO(audio_file.read()) transcription = "" translation_1 = "" # 直接传入内存流进行转录,无需本地文件 result = model.transcribe(audio_stream) transcription = result["text"] return jsonify({'translation1': transcription, 'translation2': translation_1})
说明
- 前端代码无需任何修改,已经通过
FormData正确发送了音频Blob数据 BytesIO会在内存中临时存储音频数据,请求处理完成后自动释放,不会产生本地文件- Whisper会自动识别音频格式(前端传的WAV格式完全兼容)
内容的提问来源于stack exchange,提问作者Jayanta Basumatary
相关产品推荐
相关产品推荐

