一般信息:
我有一个处理音频分类的python项目;后端是完整的,但我在前端受苦。后端要求(我无法更改)是音频文件必须是wav格式,但我希望用户也能够上传 mp3 文件。我的前端是一个使用 python 2.7 和烧瓶的网络服务器。
所以,我基本上想将 mp3 转换为 wav,但不断出错。
(完整的代码在底部,以防需要更清楚地理解问题)
我的尝试:
1-我使用pydub库
我安装了homebrew,libav和ffmpeg
libav安装方法: brew install libav --with-libvorbis - -with-sdl --with-theora
ffmpeg安装方法: brew install ffmpeg --with-libvorbis --with-ffplay --with-theora
方法1
sound = AudioSegment.from_file(filename[i], format="mp3") #filename[i]=nameOfFile
sound.export("input.wav", format="wav")
方法2
AudioSegment.from_file(filename[i], format="mp3").export("input.wav", format="wav")
=>即使我安装了ffmpeg和libav,仍然收到“找不到文件”和“无法检测到ffmpeg或avconv”运行时警告
=>当我使用“from_mp3”而不是“from_file”时出现上面相同的错误(“找不到文件”)
=> 尝试使用“raw”而不是“mp3”并得到“关键错误:sample_width”(找不到这个错误的含义)
注意:我确保我在正确的目录中
2- 使用的子流程
import subprocess
subprocess.call(["ffmpeg", "-i",filename[i],"inputAudio.wav"])
=>得到“OSError:没有这样的文件或目录”
我希望你能帮助我理解问题是什么以及如何解决它......
完整代码:
我在顶部有这个
app = Flask(__name__)
APP_ROOT = os.path.dirname(os.path.abspath(__file__))
os.chdir(APP_ROOT)
在处理音频文件的函数内部
data = request.files.getlist('file') #get all uploaded audio files
fsize = len(data) #number of audio files
i = 0 #index counter
filename = ["" for x in range(fsize)] #LIST TO STORE EACH FILE'S NAME
audiofile = ["" for x in range(fsize)] #LIST TO STORE CLASSIFICATION RESULTS OF EACH FILE
#LOOP THROUGH EACH UPLOADED FILE
for file in data:
filename[i] = file.filename #ADD FILENAME TO LIST ABOVE
destination = str(APP_ROOT)
有问题的部分:
if file.filename.endswith(".mp3"):
from pydub import AudioSegment
t = destination + "/" + filename[i]
file.save(t) #SAVE UPLOADED MP3 FILE TO EXTRACT IT USING PYDUB
sound = AudioSegment.from_file(filename[i], format="mp3")
sound.export("input.wav", format="wav")
os.remove(t) #DELETE MP3 FILE, WE ONLY WANT WAV
destination += "/inputAudio.wav"
代码继续:
#STORE AUDIO FILE TO PREPARE FOR PROCESSING (CLASSIFICATION)
else:
destination += "/inputAudio.wav"
file.save(destination)
#FINAL STEP
audiofile[i]=Raudio.start() #AUDIO PROCESSING (CLASSIFICATION)
os.remove(destination) #DELETE AUDIO FILE TO PREVENT CLUTTERING OF FILES
i += 1 #INCREMENT FILE INDEX