我可以喂 lame 一个 blob 并让它转换 'on the fly?'

Can I feed lame a blob and have it convert 'on the fly?'

我有一个 wav blob 将发布到我的 django 项目的情况,我必须将它转换为 mp3。我已经记下了这个过程,但它似乎有点冗长,我想减少一点,但我不知道如何去做。

wav_path = os.path.join(full_path, "%s%s.wav" % (word.name, file_number))
mp3_path = wav_path[:-3] + "mp3"
with open(wav_path, 'w') as f:
    f.write(request.FILES['audio_file'].read())
    os.popen("lame %s --comp 40 %s" % (wav_path, mp3_path))
    os.popen("rm %s" % wav_path)

lame 说它可以从 stdin 中获取一些东西,而不是使用 - 的命名文件,所以我尝试了这个

lame - --comp 40 outfile.m3p << infile.wav
something infile.wav | lame - --comp 40 outfile.mp3

很抱歉在此处添加 something,但我不确定在该位置使用什么。好像把 blob 写入文件 > 转换它然后删除 blob 可以缩短

您可以将示例中的 'something' 替换为 'cat'。

cat infile.wav | lame - --comp 40 outfile.mp3

但如果您已经在 python 中拥有 blob,则可以直接通过 stdin 将其通过管道传输,而不是绕道将其写入 .wav 文件。看 How do I write to a Python subprocess' stdin?