音频压缩
调节比特率 / 采样率 / 单声道压缩音频 · 最高可减 80% 体积 · 保持可接受音质
比特率/采样率/单声道
调节比特率 / 采样率 / 单声道压缩音频 · 最高可减 80% 体积 · 保持可接受音质
三大降体积手段:① 降比特率(压缩越狠,损失越大)② 降采样率(高频丢失)③ 单声道(直接减半)。同时用三种可减 70-90%。
推荐组合:语音 / 播客 — 64 kbps + 22 kHz + 单声道;音乐 — 128 kbps + 44.1 kHz + 立体声;高保真 — 256+ kbps + 44.1/48 kHz。
无损压缩:FLAC / APE 等是无损格式(压缩率约 50%)。本工具用 MP3 有损压缩追求更高压缩率。
了解工具定位 · 使用场景 · 对比优势
上传音频文件,通过调整比特率、采样率或切换单声道来减小文件体积。适合需要压缩音频以节省存储空间、满足上传大小限制或降低带宽占用的场景。处理完全在浏览器本地完成,文件不会上传到任何服务器。
播客创作者录制一期 1 小时的节目,原始 WAV 文件可能超过 500MB,无法直接上传至音频托管平台(如 Apple Podcasts、小宇宙)。使用本工具将比特率降至 128kbps、采样率设为 44100Hz 并转为单声道,文件可缩小至 50MB 以内,同时人声清晰度几乎无损,上传速度大幅提升。
手机里存了大量微信语音备忘录、会议录音,每个文件几十 MB,128GB 存储很快告急。本工具批量压缩这些录音文件,将比特率降到 64kbps、采样率降到 22050Hz,单个文件缩小 80% 以上,保留可听清的人声内容,释放 10GB 以上空间。
独立音乐人需要给厂牌或演出方发送 demo 小样,原始 24bit/96kHz 母带文件动辄上百 MB,邮箱附件限制 25MB。用本工具将比特率设为 192kbps、采样率设为 44100Hz、转为单声道,样片体积降到 5-8MB,方便快速发送试听,对方手机也能直接播放。
在线教育机构录制一节 45 分钟的讲师讲解课程,原始音频 200MB 以上,上传到学习平台耗时且占用服务器带宽。使用本工具将比特率降至 96kbps、采样率设为 32000Hz,文件可压缩至 20MB 以内,学生端加载速度提升 3 倍,且讲师语音清晰度满足教学需求。
企业客服系统每日生成数千条通话录音,原始音频文件每月占用 TB 级存储。使用本工具批量压缩录音文件,将比特率设为 32kbps、采样率设为 8000Hz(电话语音标准)、转为单声道,文件缩小至原始大小的 5%,保留对话内容的可理解性,大幅降低长期归档成本。
| 维度 | 本工具 | 竞品 A (Online Audio Converter) | 传统方法 (Audacity) |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传服务器 | 文件需上传至云端服务器处理 | 完全本地处理,无网络传输 |
| 处理速度 | 取决于文件大小和浏览器性能,通常数秒至数十秒 | 取决于文件大小和服务器负载,通常数秒至数分钟 | 取决于本地 CPU 性能,通常数秒至数分钟 |
| 离线可用 | 需要网络加载,加载后可离线使用 | 必须全程联网 | 完全离线,需提前安装软件 |
| 大小限制 | 受浏览器内存限制,通常 500MB 以内 | 受服务器策略限制,通常 100MB-2GB | 受本地磁盘和内存限制,几乎无上限 |
| 收费 | 免费,无隐藏费用 | 免费,但部分高级功能或大文件需付费 | 免费开源软件 |
| 注册 | 无需注册或登录 | 无需注册 | 无需注册 |
| 平台依赖 | 依赖浏览器 (Chrome/Firefox/Edge),跨操作系统 | 依赖浏览器,跨操作系统 | 需下载安装对应操作系统版本 (Windows/macOS/Linux) |
| 功能复杂度 | 专注音频压缩,操作极简 | 支持多种格式转换和基础编辑 | 功能全面,支持多轨编辑、特效、降噪等专业操作 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 比特率: 128kbps, 采样率: 44100Hz, 声道: 立体声 | 压缩后文件大小: 1.2MB, 时长: 60秒, 格式: MP3 | 典型场景:音乐文件标准压缩 |
| 比特率: 64kbps, 采样率: 22050Hz, 声道: 单声道 | 压缩后文件大小: 0.3MB, 时长: 60秒, 格式: MP3 | 典型场景:语音录音压缩 |
| 比特率: 320kbps, 采样率: 48000Hz, 声道: 立体声 | 压缩后文件大小: 2.4MB, 时长: 60秒, 格式: MP3 | 边界 case:高保真音频压缩 |
| 比特率: 8kbps, 采样率: 8000Hz, 声道: 单声道 | 压缩后文件大小: 0.06MB, 时长: 60秒, 格式: MP3 | 边界 case:极低比特率,适合电话录音 |
| 比特率: 128kbps, 采样率: 44100Hz, 声道: 单声道 | 压缩后文件大小: 0.6MB, 时长: 60秒, 格式: MP3 | 易错 case:立体声转单声道后体积减半 |
| 比特率: 0kbps, 采样率: 44100Hz, 声道: 立体声 | 错误:比特率必须大于0 | 易错 case:输入了无效的比特率值 |
将 128 kbps 的 MP3 压缩时,比特率设为 320 kbps压缩时比特率设为 128 kbps 或更低(如 64 kbps)有损压缩无法通过提高输出比特率来恢复已丢失的高频信息;输出码率高于输入只会浪费体积,音质不会提升。
将 44.1 kHz 的音频压缩为 8 kHz 采样率 + 320 kbps 比特率8 kHz 采样率搭配 16-32 kbps 比特率;或保持 44.1 kHz 搭配 64-128 kbps奈奎斯特采样定理下,8 kHz 只能表示 0-4 kHz 频率,此时高比特率完全浪费——编码器会填充无意义数据。
认为 10 MB 立体声 MP3 转单声道后一定是 5 MB实际压缩为 4-6 MB(取决于编码器效率和元数据残留)单声道丢弃一个声道数据,但编码器仍会保留帧头、CRC 校验和元数据(ID3 标签),这些固定开销不会减半。
用 `-q:a 0`(最高质量 VBR)压缩纯人声播客用 `-q:a 5`(中等质量 VBR)或固定 CBR 64 kbps 压缩语音语音频谱集中在 300-3400 Hz,不需要音乐 VBR 预设的高比特率去编码高频泛音;`-q:a 0` 会让语音文件体积膨胀 3-5 倍而无听感收益。
在 FFmpeg 中写 `-b:a 128k -q:a 2`CBR 用 `-b:a 128k`,VBR 用 `-q:a 2`,二者选其一FFmpeg 中 `-b:a` 和 `-q:a` 是互斥参数;同时指定时,后出现的参数会覆盖前者,导致实际编码模式与预期不符。
将 64 kbps 的 WMA 文件压缩为 128 kbps 的 MP3压缩前检查原始码率,确保输出码率低于输入码率有损转码(如 WMA→MP3)会先解码再重新编码;若输出码率高于原始码率,编码器会填充冗余数据,文件体积反而增大。
压缩 3 分钟歌曲得到 2.8 MB 文件,但嵌入 500KB 的专辑封面后变成 3.3 MB压缩前先调整封面图片分辨率(如 500×500 px)或使用 `-map_metadata -1` 移除元数据ID3v2 标签可以包含完整 JPEG 图片;封面图片体积可能超过音频数据本身,尤其在低比特率压缩时占比显著。
公式推导 · 流程图解 · 依据出处
B = R × C × N
B — 未压缩音频的比特率(kbps)R — 采样率(kHz),如 44.1C — 每个采样点的比特深度,如 16 bitN — 声道数,单声道=1,立体声=2CD 音质立体声音频:采样率 44.1 kHz,比特深度 16 bit,声道数 2。B = 44.1 × 16 × 2 = 1411.2 kbps。这是 PCM 原始数据流的理论比特率,压缩后(如 MP3 128 kbps)可降至约 1/11。
适用于计算未压缩 PCM/WAV 格式的原始比特率。不适用于已压缩格式(MP3/AAC)或浮点采样(32 bit float)。公式基于数字音频基础理论(Nyquist-Shannon 采样定理)。
3 种主流语言 · 复制即用
import subprocess
import json
# 使用 FFmpeg 压缩音频:降低比特率、采样率、转为单声道
input_file = "input.mp3"
output_file = "output.mp3"
# 参数:比特率 64kbps,采样率 22050Hz,单声道
cmd = [
"ffmpeg",
"-i", input_file,
"-b:a", "64k",
"-ar", "22050",
"-ac", "1",
"-y", output_file
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
print(f"压缩失败: {result.stderr}")
else:
print(f"压缩完成: {output_file}")package main
import (
"fmt"
"os/exec"
)
func main() {
// 使用 FFmpeg 压缩音频:比特率 64kbps,采样率 22050Hz,单声道
input := "input.mp3"
output := "output.mp3"
cmd := exec.Command("ffmpeg",
"-i", input,
"-b:a", "64k",
"-ar", "22050",
"-ac", "1",
"-y", output,
)
if err := cmd.Run(); err != nil {
fmt.Printf("压缩失败: %v\n", err)
} else {
fmt.Printf("压缩完成: %s\n", output)
}
}const { execSync } = require('child_process');
// 使用 FFmpeg 压缩音频:比特率 64kbps,采样率 22050Hz,单声道
const input = 'input.mp3';
const output = 'output.mp3';
const cmd = `ffmpeg -i "${input}" -b:a 64k -ar 22050 -ac 1 -y "${output}"`;
try {
execSync(cmd, { stdio: 'inherit' });
console.log(`压缩完成: ${output}`);
} catch (err) {
console.error('压缩失败:', err.message);
}8 个高频疑问