如何用Python压缩WAV文件?将WAV压缩至MP3同等大小且保留原格式
解决方法:给WAV文件指定压缩编码
默认用pydub导出的WAV是无压缩的PCM格式,这就是转码后体积远大于原MP3的核心原因。要在保持WAV格式的前提下压缩到目标大小,你需要在导出时指定有损压缩的音频编码,同时可通过比特率精准控制最终体积。
可选的压缩编码方案
- GSM 6.10编码:专为语音设计的低比特率编码,压缩率极高,适合语音类音频,导出的WAV体积能轻松小于原MP3。
- ADPCM编码:压缩率中等,音质优于GSM编码,体积也能控制在MP3级别。
- MP3编码封装进WAV:WAV容器支持封装MP3编码的音频,这样导出的文件体积和原MP3基本一致。
修改你的代码实现压缩
以下是调整后的代码,以GSM 6.10编码为例,你可根据音频类型调整编码和比特率:
from pydub import AudioSegment import os # 文件路径 src_folder = "D:/projects/data/mp3" dst_folder = "D:/projects/data/wav" # 确保目标文件夹存在 os.makedirs(dst_folder, exist_ok=True) # 遍历处理所有MP3文件 for name in os.listdir(src_folder): if not name.endswith(".mp3"): continue # 跳过非MP3文件 wav_name = name.replace(".mp3", ".wav") try: # 读取原MP3文件 sound = AudioSegment.from_mp3(os.path.join(src_folder, name)) # 导出带压缩编码的WAV sound.export( os.path.join(dst_folder, wav_name), format="wav", codec="gsm_ms", # 指定GSM 6.10压缩编码 # 如需精准控制体积,可自定义比特率,比如"64k" # bitrate="64k" ) print(f"完成压缩:{wav_name}") except Exception as e: print(f"处理{name}失败:{str(e)}")
其他编码的使用示例
- 若使用ADPCM编码,将
codec改为"adpcm",比特率可设为"32k"左右。 - 若要封装MP3编码进WAV,
codec设为"mp3",比特率和原MP3保持一致(如"128k"),体积会和原MP3基本相同。
注意事项
- 有损压缩会损失音质,需根据音频类型(语音/音乐)选择编码和比特率,平衡体积与音质。
- 部分老旧播放器仅支持无压缩PCM格式的WAV,测试时需确认兼容性。
内容的提问来源于stack exchange,提问作者george g
相关产品推荐
相关产品推荐

