音频格式转换
MP3 / WAV / FLAC / AAC / OGG / M4A 等格式互转 · 浏览器本地 Web Audio + lamejs · 不上传文件
MP3/WAV/FLAC/OGG/AAC/M4A/APE 互转
MP3 / WAV / FLAC / AAC / OGG / M4A 等格式互转 · 浏览器本地 Web Audio + lamejs · 不上传文件
支持 MP3 / WAV / FLAC / AAC / OGG / M4A / WebM
MP3:有损压缩,兼容性最佳,几乎所有设备 / 软件都支持。128 kbps 适合语音 / 在线传输,192-256 kbps 适合音乐,320 kbps 接近 CD 质量。
WAV:未压缩 PCM,无损保真。适合后期处理 / 母带制作 / 视频配音。体积约 10 MB / 分钟(16-bit 立体声 44.1kHz)。
FLAC / APE:无损压缩,约为 WAV 的 50-70% 体积。本工具暂支持导入不支持导出(浏览器原生不支持 FLAC 编码)。
采样率原则:上采样不能增加信息(只会变大);下采样会丢失高频。语音用 16000-22050 Hz 已够,音乐建议保持 44100 Hz 或更高。
了解工具定位 · 使用场景 · 对比优势
将音频文件在 MP3、WAV、FLAC、OGG、AAC、M4A、APE 七种格式间自由转换。适合需要调整音频兼容性(如车载播放、剪辑软件导入、存储空间优化)的场景。选择源文件与目标格式,点击转换即可。处理由服务端 FFmpeg 完成,上传的文件不会被长期存储。
车主下载的 FLAC 无损音源在车载系统上无法播放,而 WAV 文件体积过大占满 U 盘。本工具将整张专辑批量转为 320kbps MP3,保留人声细节的同时单曲体积从 30MB 降至 8MB,一次转换即可适配所有车型的 USB 播放器,省去逐首重下的麻烦。
独立播客主录制时使用 48kHz/24bit WAV 保证音质,但发布平台只接受 44.1kHz/16bit MP3 且限制单集 100MB。本工具在保持采样率精度的前提下批量转换,输出文件符合平台规格,无需手动调整 Audacity 参数,节省每期 15 分钟的导出打包时间。
手机里塞满微信接收的 M4A 录音、网易云缓存 AAC 和相机录制的 MOV 音频,占用 8GB 存储。本工具将不常听的音频批量转为 64kbps OGG,保留语音可懂度的同时压缩比达 1:10,一次操作释放 6GB 空间,避免为清缓存而删文件。
独立游戏开发者从免费音效库下载的素材格式混杂——有 16bit WAV、44.1kHz OGG、可变码率 MP3。引擎只接受 22050Hz/16bit WAV 单声道。本工具一键批量标准化所有音效的采样率、位深和声道,输出文件直接拖入 Unity 资源目录,省去逐个 Audition 重导出的重复劳动。
NLP 研究生从中文语音数据集下载的 APE 格式语料无法直接喂入 Kaldi 训练管线,需要先转为 16kHz/16bit 单声道 WAV。本工具支持无损格式间的精确转换,不引入重采样噪声,确保训练集与测试集的声学特征一致,避免因格式差异导致的识别准确率下降 2-3%。
| 维度 | 本工具 | 竞品 A (Online Audio Converter) | 传统方法 (Audacity) |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不离开本地 | 文件上传至云端服务器处理 | 完全本地处理,无网络传输 |
| 处理速度 | 取决于文件大小和浏览器性能,通常秒级 | 取决于文件大小和上传/下载带宽,通常数十秒至数分钟 | 取决于文件大小和本地CPU性能,需手动操作,通常数分钟 |
| 离线可用 | 需要网络加载WASM引擎,加载后可离线使用 | 全程需要网络连接 | 完全离线可用 |
| 文件大小限制 | 受浏览器内存限制,通常几百MB以内 | 受服务器配额限制,通常100MB-2GB不等 | 仅受本地磁盘空间和内存限制 |
| 批量处理 | 单次处理一个文件 | 支持批量上传和转换 | 支持批量处理,但需手动设置 |
| 操作复杂度 | 无需安装,拖拽/选择文件即可 | 无需安装,网页操作 | 需下载安装,学习曲线较陡 |
| 格式支持 | MP3/WAV/FLAC/OGG/AAC/M4A/APE 互转 | 支持更多格式(含WMA、AIFF等) | 支持几乎所有音频格式,且可自定义编码参数 |
| 收费模式 | 免费 | 免费(有文件大小限制),付费版去限制 | 免费开源 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| input.wav → output.mp3 (比特率 320kbps) | output.mp3 (320kbps, 44100Hz, 立体声) | 典型场景:WAV 无损转高音质 MP3 |
| input.flac → output.aac (比特率 256kbps) | output.aac (256kbps, 44100Hz, 立体声) | 常见用法:FLAC 转 AAC 用于移动设备 |
| input.ape → output.flac | output.flac (无损, 44100Hz, 立体声) | 边界 case:APE 转 FLAC,两种无损格式互转 |
| input.ogg → output.m4a (比特率 128kbps) | output.m4a (128kbps, 44100Hz, 立体声) | 边界 case:OGG 转 M4A,容器格式转换 |
| input.mp3 → output.wav | output.wav (1411kbps, 44100Hz, 立体声) | 易错 case:MP3 转 WAV 不会提升音质 |
| input.aac → output.ape | output.ape (无损, 44100Hz, 立体声) | 边界 case:有损 AAC 转无损 APE,体积增大 |
| input.m4a → output.ogg (比特率 192kbps) | output.ogg (192kbps, 44100Hz, 立体声) | 典型场景:M4A 转 OGG 用于开源软件 |
将 96kHz 采样率的 WAV 文件直接转为 128kbps MP3先确认目标格式的采样率支持范围(MP3 最高 48kHz),或转码时指定 -ar 44100 进行重采样MP3 编码器内部会降采样到 48kHz,但若源文件采样率 >48kHz 且未显式重采样,某些 FFmpeg 版本会静默截断高频信息,导致音质意外损失
将 24-bit APE 文件直接转为 320kbps MP3 保持原音质转码前确认 APE 源文件比特深度;MP3 固定 16-bit 输出,24-bit 源会截断至 16-bit,320kbps 仅保证码率不保证位深APE 支持 8/16/24/32-bit,MP3 仅 16-bit。高位深源转 MP3 必然丢失动态范围,若需保留 24-bit 应选 FLAC 或 WAV
将 OGG 文件通过 FFmpeg 转码为 output.m4a 但未指定 -c:a aac,默认用了 MP3 编码明确指定 -c:a aac -f mp4 output.m4a,或使用 -c:a libfdk_aac(若可用).m4a 是容器格式(MP4 容器),可装 AAC/ALAC 等;FFmpeg 默认编码器是 MP3,不指定编码器会输出 MP3 流到 .m4a 容器,导致播放器无法识别
认为 FLAC 转 WAV 是无损转换,直接丢弃原 FLAC 文件转码前用 ffprobe 检查 FLAC 元数据(封面图、CUE 分轨、REPLAYGAIN),WAV 不支持内嵌封面和 CUE 表FLAC 支持内嵌封面图、CUE 分轨标签、ReplayGain 音量信息;WAV 仅支持有限 RIFF 元数据,转换后这些信息永久丢失
将 .m4a 文件一律视为 AAC 有损格式,转 FLAC 时用 -q:a 0 有损参数先用 ffprobe -show_streams 确认 codec_name=alac 还是 aac;ALAC 转 FLAC 应使用 -c:a flac 无损参数.m4a 容器可同时装 AAC(有损)和 ALAC(无损),用户常误以为所有 .m4a 都有损。用有损参数处理 ALAC 会引入二次有损压缩
ffmpeg -i My Song.wav output.mp3(文件名含空格未引号包裹)ffmpeg -i "My Song.wav" "output.mp3" 或使用双引号包裹所有路径Shell 将未引号的空格视为参数分隔符,导致 FFmpeg 将 'My' 和 'Song.wav' 当作两个输入文件,引发 'No such file' 错误
认为 AAC 128kbps 转 MP3 128kbps 码率相同即音质相同AAC 128kbps 透明度高于 MP3 128kbps;转码时应使用 MP3 256kbps+ 或 V0 可变码率以避免二次压缩劣化AAC 在低码率下(<192kbps)编码效率优于 MP3,直接同码率转码会引入两次有损压缩的叠加劣化,建议提升目标码率一级
wav转flac时使用 -compression_level 0(最快但无压缩)使用默认 -compression_level 5 或 -compression_level 8(最高压缩比)FLAC 的 compression_level 0 仅做分块不压缩,输出文件大小接近 WAV 原大小;用户以为 'FLAC 是压缩格式' 但选了无压缩级别,浪费存储空间
ffmpeg -i 5.1.wav -c:a flac stereo.flac(默认下混为 L/R 但未控制映射)ffmpeg -i 5.1.wav -af "pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL|FR=0.5*FC+0.707*FR+0.707*BR" -c:a flac stereo.flacFFmpeg 默认下混算法(-ac 2)使用 ITU-R BS.775 标准,但会衰减中置和环绕声道,导致对白音量降低;显式 pan 滤波器可保留原始声像定位
公式推导 · 流程图解 · 依据出处
B = R × (1 - C / 100)
B — 压缩后比特率(kbps)R — 原始音频比特率(kbps)C — 压缩比率(百分比,0-100)将 1411 kbps 的 WAV 文件转为 320 kbps 的 MP3,压缩比率 C = (1 - 320/1411) × 100 ≈ 77.3%。代入公式:B = 1411 × (1 - 77.3/100) = 1411 × 0.227 ≈ 320 kbps。输出文件大小约为原文件的 22.7%。
适用于有损压缩(MP3/AAC/OGG Vorbis)的比特率估算。无损格式(FLAC/APE/WAV)不适用,因压缩比率取决于音频内容复杂度,非固定公式。
3 种主流语言 · 复制即用
import subprocess
# 调用 FFmpeg 将 WAV 转为 MP3(128kbps CBR)
input_file = "input.wav"
output_file = "output.mp3"
cmd = [
"ffmpeg",
"-i", input_file, # 输入文件
"-codec:a", "libmp3lame", # MP3 编码器
"-b:a", "128k", # 固定比特率 128kbps
"-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"
"strings"
)
func main() {
// 调用 FFmpeg 将 FLAC 转为 OGG(Vorbis q5 ≈ 160kbps)
input := "input.flac"
output := "output.ogg"
cmd := exec.Command("ffmpeg",
"-i", input,
"-codec:a", "libvorbis",
"-q:a", "5",
"-y", output,
)
var stderr strings.Builder
cmd.Stderr = &stderr
if err := cmd.Run(); err != nil {
fmt.Printf("转换失败: %s\n", stderr.String())
return
}
fmt.Printf("成功: %s\n", output)
}const { execSync } = require('child_process');
const path = require('path');
// 调用 FFmpeg 将 AAC 转为 WAV(PCM 16-bit 44100Hz)
const input = 'input.aac';
const output = 'output.wav';
try {
execSync(
`ffmpeg -i "${input}" -codec:a pcm_s16le -ar 44100 -ac 2 -y "${output}"`,
{ stdio: 'pipe' }
);
console.log(`成功: ${output}`);
} catch (err) {
console.error(`转换失败: ${err.stderr.toString()}`);
}8 个高频疑问