本文目录导读:

我来为您介绍Python音频格式转换的几种常用方法:
使用pydub库(推荐,最简单)
安装
pip install pydub
基本转换示例
from pydub import AudioSegment
# 1. MP3转WAV
def mp3_to_wav(input_file, output_file):
audio = AudioSegment.from_mp3(input_file)
audio.export(output_file, format="wav")
# 2. WAV转MP3
def wav_to_mp3(input_file, output_file):
audio = AudioSegment.from_wav(input_file)
audio.export(output_file, format="mp3", bitrate="192k")
# 3. 通用格式转换
def convert_audio(input_file, output_file):
audio = AudioSegment.from_file(input_file)
audio.export(output_file, format=output_file.split('.')[-1])
# 使用示例
mp3_to_wav("input.mp3", "output.wav")
wav_to_mp3("input.wav", "output.mp3")
convert_audio("input.mp3", "output.ogg")
使用librosa库(适合音频处理)
安装
pip install librosa soundfile
转换示例
import librosa
import soundfile as sf
def convert_audio_librosa(input_file, output_file, target_sr=22050):
"""
转换音频格式
:param input_file: 输入文件路径
:param output_file: 输出文件路径
:param target_sr: 目标采样率
"""
# 加载音频
audio, sr = librosa.load(input_file, sr=target_sr)
# 保存音频
sf.write(output_file, audio, target_sr)
# 使用示例
convert_audio_librosa("input.mp3", "output.wav")
使用ffmpeg(功能最强大)
安装
pip install ffmpeg-python
转换示例
import ffmpeg
def convert_with_ffmpeg(input_file, output_file, codec=None, bitrate=None):
"""
使用ffmpeg转换音频
"""
stream = ffmpeg.input(input_file)
# 设置编码参数
if codec:
stream = ffmpeg.output(stream, output_file, acodec=codec)
else:
stream = ffmpeg.output(stream, output_file)
if bitrate:
stream = stream.global_args('-b:a', bitrate)
# 执行转换
ffmpeg.run(stream)
# 使用示例
convert_with_ffmpeg("input.mp3", "output.wav")
convert_with_ffmpeg("input.wav", "output.mp3", codec='libmp3lame', bitrate='192k')
完整工具类实现
import os
from pydub import AudioSegment
class AudioConverter:
"""音频格式转换工具类"""
SUPPORTED_FORMATS = ['mp3', 'wav', 'ogg', 'flac', 'aac', 'wma']
def __init__(self):
pass
def convert(self, input_file, output_file, format=None):
"""
转换音频格式
:param input_file: 输入文件路径
:param output_file: 输出文件路径
:param format: 输出格式(可选,默认从文件扩展名获取)
"""
# 检查输入文件是否存在
if not os.path.exists(input_file):
raise FileNotFoundError(f"输入文件不存在: {input_file}")
# 获取输出格式
if format:
output_format = format
else:
output_format = output_file.split('.')[-1]
# 检查格式支持
if output_format not in self.SUPPORTED_FORMATS:
raise ValueError(f"不支持的输出格式: {output_format}")
# 加载音频
audio = AudioSegment.from_file(input_file)
print(f"正在转换: {input_file} -> {output_file}")
print(f"原始信息: 采样率={audio.frame_rate}Hz, 声道={audio.channels}, 采样大小={audio.sample_width*8}bit")
# 导出音频
audio.export(output_file, format=output_format)
print("转换完成!")
return True
def batch_convert(self, input_dir, output_dir, target_format):
"""
批量转换文件夹中的所有音频
:param input_dir: 输入文件夹
:param output_dir: 输出文件夹
:param target_format: 目标格式
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
converted_files = []
for filename in os.listdir(input_dir):
if filename.split('.')[-1] in self.SUPPORTED_FORMATS:
input_path = os.path.join(input_dir, filename)
output_filename = filename.rsplit('.', 1)[0] + '.' + target_format
output_path = os.path.join(output_dir, output_filename)
try:
self.convert(input_path, output_path)
converted_files.append(output_path)
except Exception as e:
print(f"转换失败 {filename}: {str(e)}")
return converted_files
def get_audio_info(self, file_path):
"""获取音频文件信息"""
audio = AudioSegment.from_file(file_path)
return {
'duration': len(audio) / 1000, # 秒
'frame_rate': audio.frame_rate, # 采样率
'channels': audio.channels, # 声道数
'sample_width': audio.sample_width * 8, # 位深
'frame_count': audio.frame_count() # 总帧数
}
# 使用示例
if __name__ == "__main__":
converter = AudioConverter()
# 单个文件转换
converter.convert("input.mp3", "output.wav")
converter.convert("input.wav", "output.mp3", format="mp3")
# 批量转换
converted = converter.batch_convert("./input_audio", "./output_audio", "wav")
print(f"成功转换 {len(converted)} 个文件")
# 获取音频信息
info = converter.get_audio_info("audio.mp3")
print(f"音频信息: {info}")
注意事项
-
依赖安装:使用pydub需要额外安装ffmpeg:
- Windows: 下载ffmpeg并添加到系统PATH
- Mac:
brew install ffmpeg - Linux:
sudo apt-get install ffmpeg
-
格式支持:不同的库支持的格式可能不同,pydub支持最广泛的格式
-
性能考虑:
- 小文件直接用pydub即可
- 大文件推荐使用ffmpeg,内存占用更小
-
参数调整:
# 调整音频参数示例 audio = AudioSegment.from_file("input.mp3") # 改变采样率 audio = audio.set_frame_rate(16000) # 改变声道数 audio = audio.set_channels(1) # 转单声道 # 调整音量 audio = audio + 6 # 增加6dB # 裁剪音频 audio = audio[1000:5000] # 1秒到5秒 audio.export("output.mp3", format="mp3", bitrate="128k")
选择哪种方法取决于您的具体需求:
- 简单转换:pydub
- 音频处理分析:librosa
- 专业级转换:ffmpeg