You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:16:11