本文目录导读:

我来为您介绍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
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播