SoX — 命令行音频处理瑞士军刀
是什么
SoX(Sound eXchange)是跨平台 命令行音频工具:读一种格式、施加效果、写出另一种格式,三十年来被戏称为「音频界的 sed/awk」。
日常类比:Photoshop 有「滤镜」菜单。SoX 在终端里对声波做同样的事——重采样、均衡、变速、合成、统计,一条命令批处理成百文件。
sox input.wav output.flac # 格式转换sox input.wav output.wav fade 1 0 1 # 淡入淡出sox -n drum.wav synth 1 sine 440 # 生成 1 秒 440Hz 测试音包名在各系统多为 sox;与 Audacity 导出的 wav 完全兼容。
为什么重要
不理解 SoX,音频脚本化会退回 GUI 或笨重 Python:
- 流水线友好:与 flac、ffmpeg、shell 管道自然组合
- 效果可复现:参数写进脚本,比手点 DAW 可审计
- 轻量分析:
sox stat看峰值/RMS,无需开 Audacity - 教学 DSP 入门:reverb、compand 等效果参数直观
核心要点
-
全局选项 + 多个输入文件 + 效果链 + 输出:顺序即信号流。
-
多轨混合:
sox -m a.wav b.wav mix.wav把两路混成一路。 -
synth 内置振荡器:测试设备、生成提示音不需外部采样。
-
rate / resample:高质量重采样依赖 libsoxr,注意别重复有损编码。
-
与 libSoX 绑定:C API 供其它程序嵌入基础效果。
-
play 子命令:
play file.wav快速试听效果链结果,无需另开播放器。
实践案例
案例 1:批量转 16kHz 单声道给 ASR
for f in *.wav; do sox "$f" -r 16000 -c 1 "out/${f%.wav}.wav" norm -0.1done语音识别模型常要固定采样率与归一化音量。
案例 2:拼接播客片头片尾
sox intro.wav episode.wav outro.wav final.wav中间可加 pad 0 0.5 插半秒静音。
案例 3:与 aubio 前置处理
先用 SoX 去直流、带通滤波,再喂 aubio 做节拍检测,减少误检。
案例 4:导出 flac 无损归档
sox master.wav -t flac master.flac compand 0.3,1 -90,-90,-70,-70,-60,-20,0,0 -5 0 0.2压缩器轻微修整动态再无损封装(仍是有损效果链,若要保持原始请少效果)。
案例 5:生成静音占位
sox -n silence.wav trim 0.0 2.0剪辑时间线补空档,避免播放器跳时间戳。
踩过的坑
-
多次有损格式往返:wav→mp3→wav 会劣化;中间尽量 wav/flac。
-
clip 与 norm:盲目 norm 可能削波,先看
sox stat -x。 -
效果顺序敏感:
reverb在compand前后听感不同。 -
macOS 默认 sox 过旧:Homebrew 装新版,旧版缺格式。
-
多声道 downmix 规则:
-c 1默认混音公式可能不符合广播标准,查 remix 效果。 -
Windows 路径与引号:含空格文件名要引好,与 Unix 脚本略有差异。
-
dither 与位深:降到 16bit 发布版时加 dither,避免量化失真。
适用 vs 不适用场景
适用:
- 批处理转格式、剪静音、标准化音量
- 生成测试信号、简单混音
- CI 里自动处理音频资产
不适用:
- 多轨非线性编辑(用 DAW)
- 实时低延迟效果(专业音频接口 + JACK)
- 视频轨处理(用 ffmpeg)
历史小故事(可跳过)
- 1991 起:Chris Bagwell 维护,比许多 Web 框架还老
- 「瑞士军刀」绰号:社区口口相传
- chirlu/sox GitHub:持续移植与修复现代编译环境
- 与 flac 同属无损工作流常客
学到什么
- 命令行音频 = 效果链思维,与 ffmpeg 滤镜类似
- synth 与 stat 是调试利器,不必打开 GUI
- 批处理脚本可版本管理,复现实验靠参数文件
- 与 aubio 分工:SoX 改波形,aubio 提特征
- 先 wav/flac 再分发有损:SoX 常在中游
- rec 子命令录音:
rec test.wav trim 0 5快速抓麦克风五秒 - help-effect 查参数:每个效果都有独立手册页
延伸阅读
关联
- flac —— 无损格式
- ffmpeg —— 视频与容器
- aubio —— 分析下游
- obs-studio —— 录制后处理
- [[video.js]] —— 播放端与 SoX 无直接关系
- pion —— 实时 Opus 另一场景
- mediasoup —— 实时会议音频另一栈
反向链接
- ardour —— Ardour — 专业级 DAW
- aubio —— aubio — 实时音频事件检测库
- audacity —— Audacity — 开源音频编辑器
- essentia —— Essentia — 音乐信息检索工具箱
- ffmpeg —— FFmpeg — 多媒体转码与封装瑞士军刀
- flac —— FLAC — 无损音频压缩格式与参考实现
- lame —— LAME — MP3 编码开源参考实现
- mediasoup —— mediasoup — WebRTC 选择性转发 SFU
- obs-studio —— OBS Studio — 开源直播录制与推流
- pion —— Pion — 纯 Go 实现的 WebRTC 协议栈
- supercollider —— SuperCollider — 实时音频合成环境