一般信息:
我在python中有一个处理音频分类的项目;后端已经完成,但我在前端受到了影响。后端要求(我无法改变)是音频文件必须是 wav 格式,但我希望用户也能够上传mp3文件。我的前端是使用python 2.7和flask的Web服务器。
所以,我基本上想将mp3转换为wav,但不断出错。
(如果需要更清楚地了解问题,则完整的代码位于底部)
我的尝试:
1-我使用了pydub库
我安装了自制软件,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或avconv"运行时警告即使我安装了ffmpeg和libav
=>当我使用" 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
答案 0 :(得分:2)
好的,所以我找到了解决这个问题的方法。
我最终从this site下载了FFmpeg二进制文件。
然后我只需在以下路径中复制粘贴下载文件的所有内容:
Macintosh HD / Library / Frameworks / Python.framework / Versions / 2.7
这也是python exec的地方,我记得在某处读到问题可能是ffmpeg无法在python的路径中找到。
所以....它终于奏效了!以为我分享了解决方案,因为这个问题占据了我周末的大部分时间,我希望它可以帮助别人解决他们的问题,