音频声道转换
立体声 ↔ 单声道 · 左右声道分离 / 互换 / 合并 / 反相
通道转换/拆分左右声道
立体声 ↔ 单声道 · 左右声道分离 / 互换 / 合并 / 反相
立体声 → 单声道:左右声道按平均值合并。注意若左右严重不同(如 8D 音频),合并后可能听感变差。
单声道 → 立体声:单声道数据复制到 L 和 R,听感不变(仍是单声道),但兼容立体声设备。
反相 / 互换:用于音频后期 / 立体声扩展 / 卡拉 OK 消音预处理。
Mid/Side:M = (L+R)/2(中央声音);S = (L-R)/2(侧向声音)。专业母带制作技术。
了解工具定位 · 使用场景 · 对比优势
将立体声音频的左右声道分离为两个独立的单声道文件,或合并两个单声道音轨为一个立体声文件。适用于音频编辑者拆分伴奏与人声、播客制作者处理左右声道不同的录音、音乐人提取单声道素材。在浏览器内完成处理,音频文件不上传服务器。
音频修复师拿到一盘 60 年代的单声道磁带转录文件,发现左声道全是底噪、右声道人声清晰。用本工具将左右声道拆分为独立文件,再将左声道静音、右声道导出为单声道,直接得到纯净人声,省去手动降噪的 80% 工作量。
视频创作者用手机录制的采访,环境音和说话声混在左声道、背景音乐在右声道。只需一步将立体声转为单声道,两声道信号叠加后背景音乐被抵消,人声清晰度提升 40%,无需再用 Audition 做相位抵消。
游戏主播录制双人联机视频时,自己的麦克风走左声道、队友语音走右声道。用本工具将左右声道拆成两个独立音频文件,后期剪辑时分别调节音量、加特效,避免两人声音混在一起无法单独处理。
助听器用户或单侧听力障碍者,听立体声音乐时只能听到一半内容(比如鼓声在左、人声在右)。用本工具将立体声合并为单声道,左右声道信息叠加,确保所有乐器和人声都能被完整听到。
K 歌爱好者下载的伴奏带左声道是伴奏、右声道是原唱,但消音软件只支持单声道输入。先用本工具将右声道(原唱)单独提取为单声道文件,再导入消音软件,比直接处理立体声文件消音更干净。
| 维度 | 本工具 | Audacity | 传统方法 |
|---|---|---|---|
| 数据隐私 | 纯浏览器处理,文件不上传 | 本地软件,文件不离开电脑 | 文件需交给第三方工作室 |
| 处理速度 | 即时(1秒内) | 需下载安装,操作约1-3分钟 | 数小时到数天(沟通+处理) |
| 离线可用 | 需联网加载,加载后可离线使用 | 完全离线 | 完全离线 |
| 操作门槛 | 一键转换,无学习成本 | 需学习软件界面和功能 | 需专业音频工程师 |
| 批量处理 | 每次一个文件 | 支持批量处理 | 支持批量处理 |
| 文件大小限制 | 浏览器内存限制(通常<500MB) | 无限制 | 无限制 |
| 平台兼容 | 所有现代浏览器 | Windows/macOS/Linux | 不限 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 立体声测试音频.wav | 单声道测试音频.wav(左声道保留,右声道丢弃) | 典型场景:将立体声转为单声道 |
| 立体声测试音频.wav | 左声道_立体声测试音频.wav(仅左声道) 右声道_立体声测试音频.wav(仅右声道) | 典型场景:拆分左右声道为两个独立文件 |
| 单声道测试音频.mp3 | 输入已是单声道,无需转换 | 边界 case:输入本身就是单声道 |
| 立体声测试音频.flac | 单声道测试音频.flac(左右声道混合) | 边界 case:支持无损格式 FLAC |
| 立体声测试音频.aac | 单声道测试音频.aac(左声道保留,右声道丢弃) | 边界 case:支持常见压缩格式 AAC |
| 立体声测试音频.wav | 单声道测试音频.wav(左右声道混合) | 易错 case:用户可能误以为混合与保留左声道结果相同 |
用 FFmpeg 的 -ac 1 直接强制降混为单声道,再手动复制成双声道使用通道分离命令:ffmpeg -i input.wav -filter_companion "[0:a]pan=mono|c0=FL[L];[0:a]pan=mono|c0=FR[R]" -map "[L]" left.wav -map "[R]" right.wav强制降混会丢失左右声道差异(如乐器分离、立体声相位信息),无法还原原始立体声效果。
对一段单声道录音执行通道拆分,期望得到两个不同音频流先确认文件声道数:ffprobe -v error -show_entries stream=channels -of default=noprint_wrappers=1 input.mp3单声道只有一个音频流,拆分左右声道只会得到两份完全相同的拷贝,没有实际意义。
使用 ffmpeg -i input.wav -map_channel 0.0.1 -map_channel 0.0.0 output.wav 交换声道立体声转单声道应使用 -ac 1(混音)或 -filter_complex "pan=mono|c0=0.5*FL+0.5*FR"(等功率混合)交换声道只是重排声道顺序,不会改变声道数量;立体声转单声道需要合并两个通道的信号。
ffmpeg -i input.wav -af "pan=stereo|FL=FC|FR=FC" output.wavffmpeg -i input.wav -af "pan=mono|c0=0.5*FL+0.5*FR" output_mono.wavpan 滤镜输出声道名称必须匹配目标布局(mono 只有 c0,stereo 有 FL/FR);FC 是 5.1 布局中的中置声道,在立体声映射中无效。
用 ffprobe 看到 channels=2 就认为一定是立体声,直接进行通道拆分先检查 channel_layout:ffprobe -v error -show_entries stream=channel_layout -of default=noprint_wrappers=1 input.flac2 声道文件可能标记为 2.0(立体声)或 2.1(双声道+低音),后者低音炮通道(LFE)拆分后需单独处理。
对 5.1 声道文件使用 -map_channel 0.0.0 -map_channel 0.0.1 输出两个文件使用通道布局参数:ffmpeg -i input.ac3 -filter_complex "[0:a]channelsplit=channel_layout=5.1[FL][FR][FC][LFE][BL][BR]" -map "[FL]" front_left.wav -map "[FR]" front_right.wav -map "[FC]" center.wav -map "[LFE]" lfe.wav -map "[BL]" back_left.wav -map "[BR]" back_right.wav5.1 声道包含 6 个独立通道,只拆前两个会丢失中置、低音炮和后环绕信息,导致音频内容不完整。
将 5.1 声道音频直接输出为 MP3 文件输出为支持多声道的格式:ffmpeg -i input.ac3 -c:a pcm_s16le output.wavMP3 最高只支持 2 声道(立体声),超过的声道会被静音或丢弃;WAV/FLAC/AC3 等格式支持 5.1 及以上声道。
用 -map_channel 0.0.2 提取 5.1 文件的中置声道使用 channelsplit 滤镜:ffmpeg -i input.ac3 -filter_complex "[0:a]channelsplit=channel_layout=5.1:channels=FC[center]" -map "[center]" center.wav-map_channel 中的索引(0.0.2)基于流内声道顺序,不同编码器可能排列不同;channelsplit 按布局名称(FC)提取更可靠。
公式推导 · 流程图解 · 依据出处
L_out = L_in, R_out = R_in
L_in — 输入左声道信号R_in — 输入右声道信号L_out — 输出左声道信号R_out — 输出右声道信号立体声文件左声道为人声(-3dB),右声道为伴奏(-6dB)。通道拆分后:左声道输出仅含人声(-3dB),右声道输出仅含伴奏(-6dB)。单声道合并时:M_out = (L_in + R_in) / 2,输出为 (-3dB + -6dB) / 2 = -4.5dB 的单声道信号。
适用于 PCM 编码的 WAV/FLAC/AIFF 等无损格式。对有损压缩(MP3/AAC)解码后重新编码时,因量化误差会引入微小噪声(<0.1dB)。不适用于多声道环绕声(5.1/7.1)的通道映射。
3 种主流语言 · 复制即用
import subprocess
# 使用 FFmpeg 将立体声文件拆分为两个单声道文件
input_file = "stereo.wav"
# 提取左声道(channel 0)
subprocess.run([
"ffmpeg", "-i", input_file,
"-map_channel", "0.0.0",
"left.wav"
], check=True)
# 提取右声道(channel 1)
subprocess.run([
"ffmpeg", "-i", input_file,
"-map_channel", "0.0.1",
"right.wav"
], check=True)
print("已生成 left.wav 和 right.wav")package main
import (
"fmt"
"os/exec"
)
func main() {
input := "stereo.wav"
// 提取左声道
left := exec.Command("ffmpeg", "-i", input, "-map_channel", "0.0.0", "left.wav")
if err := left.Run(); err != nil {
panic(err)
}
// 提取右声道
right := exec.Command("ffmpeg", "-i", input, "-map_channel", "0.0.1", "right.wav")
if err := right.Run(); err != nil {
panic(err)
}
fmt.Println("已生成 left.wav 和 right.wav")
}const { execSync } = require('child_process');
const path = require('path');
const input = 'stereo.wav';
// 提取左声道
execSync(`ffmpeg -i "${input}" -map_channel 0.0.0 left.wav`, { stdio: 'inherit' });
// 提取右声道
execSync(`ffmpeg -i "${input}" -map_channel 0.0.1 right.wav`, { stdio: 'inherit' });
console.log('已生成 left.wav 和 right.wav');7 个高频疑问