You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 20:50:30