如何用Python将WAV转为MP3?pydub报错求助
解决WAV转MP3时pydub调用ffmpeg失败的问题
从ffmpeg输出的错误信息[mp3_mf @ ...] unsupported input sample rate set可以看出,问题出在默认使用的Windows Media Foundation MP3编码器(mp3_mf)不支持当前音频的采样率——即便你调整了输入音频的采样率,pydub依然会优先调用这个受限的系统编码器,导致转换失败。
以下是几种可行的修复/替代方案:
方案1:强制pydub使用libmp3lame编码器
你的ffmpeg编译配置中已包含libmp3lame编码器,只需在导出时显式指定即可绕开系统编码器:
from pydub import AudioSegment # 读取WAV文件 audio = AudioSegment.from_wav("myfile.wav") # 显式指定使用libmp3lame编码器导出MP3 audio.export("myfile.mp3", format="mp3", codec="libmp3lame")
如果仍报错,可先将音频转换为MP3标准支持的采样率(如44100Hz或48000Hz)再导出:
audio = AudioSegment.from_wav("myfile.wav").set_frame_rate(44100) audio.export("myfile.mp3", format="mp3", codec="libmp3lame")
方案2:直接调用ffmpeg命令行(绕开pydub)
若pydub的问题仍无法解决,直接调用ffmpeg命令行更可控,Python中可通过subprocess实现:
import subprocess # 基础转换命令 subprocess.run([ "ffmpeg", "-i", "myfile.wav", "-c:a", "libmp3lame", "myfile.mp3" ], check=True) # 如需指定采样率(示例:44100Hz) subprocess.run([ "ffmpeg", "-i", "myfile.wav", "-ar", "44100", "-c:a", "libmp3lame", "myfile.mp3" ], check=True)
方案3:使用pysox作为备选(需额外安装工具)
如果上述方法都不适用,可尝试pysox库(需先安装系统级SoX工具):
import sox transformer = sox.Transformer() transformer.convert(samplerate=44100) transformer.build("myfile.wav", "myfile.mp3")
注意:需先在系统中安装SoX工具,再通过pip install sox安装Python库。
内容的提问来源于stack exchange,提问作者chang thenoob
相关产品推荐
相关产品推荐

