如何在Flask应用中从原始字节数据获取音频媒体信息?
解决pydub.utils.mediainfo读取临时音频文件返回空字典的问题
你遇到的问题主要来自两个点:
- 写入音频字节数据后,文件指针停在文件末尾,
pydub.utils.mediainfo读取时从当前指针位置开始,自然读不到任何内容 - Windows系统下,
tempfile.NamedTemporaryFile默认用独占模式创建文件,导致pydub依赖的ffmpeg无法访问这个临时文件
给你修改后的可行代码:
import tempfile import os from flask import Flask, request from pydub.utils import mediainfo app = Flask(__name__) @app.route('/upload', methods=['GET', 'POST']) def upload(): if request.method == 'POST': # 读取上传的音频字节数据 audiofile = request.files['file'].read() # 创建临时文件,Windows下需要指定delete=False避免独占锁 with tempfile.NamedTemporaryFile(mode='w+b', suffix='.mp3', delete=False) as tmp: tmp.write(audiofile) # 将文件指针移到文件开头,让mediainfo能读到完整内容 tmp.seek(0) # 获取媒体信息 info = mediainfo(tmp.name) print(info) # 手动删除临时文件,避免残留 os.unlink(tmp.name) return "获取媒体信息成功" return ''' <form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </form> ''' if __name__ == '__main__': app.run(debug=True)
额外注意:
- 确保你的系统已经安装了ffmpeg,并且添加到环境变量中;如果没配置环境变量,可以在调用mediainfo时指定ffmpeg路径:
mediainfo(tmp.name, ffmpeg_path="你的ffmpeg.exe路径") - 如果上传的不是MP3文件,要对应修改
suffix参数,比如.wav、.flac等,保证后缀和实际音频格式匹配,否则mediainfo可能无法正确解析
内容的提问来源于stack exchange,提问作者Hi-tecX
相关产品推荐
相关产品推荐

