按文件名匹配合并不同目录下的WAV文件
按文件名匹配合并不同目录下的WAV文件
哎呀手动一个个合并确实太折腾了!刚好可以用命令行脚本批量搞定这个事儿,我给你详细讲讲怎么操作~
你的核心需求是把两个目录里同名的WAV文件一一对应合并,用sox -m命令是完全可行的,关键是通过脚本实现批量遍历匹配。下面分两种常用环境给你提供方案:
一、Linux/macOS(或Windows下用WSL、Git Bash)
首先确认你已经安装了sox(可以用sox --version检查,没安装的话用包管理器比如apt install sox或brew install sox安装)。
操作步骤:
- 先创建一个存放合并后文件的目录,避免覆盖原文件:
mkdir -p merged
- 运行下面的批量合并脚本(把
dirA和dirB替换成你实际的两个目录路径):
for file in dirA/*.wav; do # 提取纯文件名(去掉前面的目录路径) filename=$(basename "$file") # 检查另一个目录里是否存在同名文件 if [ -f "dirB/$filename" ]; then # 执行合并,输出到merged目录 sox -m "$file" "dirB/$filename" "merged/$filename" echo "✅ 已完成合并:$filename" else echo "⚠️ 警告:目录B中未找到对应文件 $filename" fi done
二、Windows原生命令提示符(CMD)
如果你习惯用Windows自带的CMD,也可以用批处理脚本实现:
- 同样先确保
sox已经安装,并且添加到系统环境变量里(能直接在CMD里调用sox)。 - 创建一个
.bat文件(比如merge_wavs.bat),内容如下:
@echo off :: 创建输出目录,已存在的话忽略错误 mkdir merged 2>nul :: 启用延迟变量扩展,确保循环里变量值正确 setlocal enabledelayedexpansion :: 遍历目录A下的所有WAV文件 for %%f in (dirA\*.wav) do ( :: 提取文件名(包含后缀) set "filename=%%~nf%%~xf" :: 检查目录B中是否有同名文件 if exist "dirB\!filename!" ( :: 执行合并命令 sox -m "%%f" "dirB\!filename!" "merged\!filename!" echo ✅ 已完成合并:!filename! ) else ( echo ⚠️ 警告:目录B中未找到对应文件 !filename! ) ) endlocal pause
- 把
dirA和dirB替换成你的实际目录路径,双击运行这个批处理文件即可。
注意事项:
- 尽量保证两个目录里的同名WAV文件采样率、位深、声道数一致,如果不一致,
sox会自动进行格式转换,但如果有特殊格式要求,可以在sox命令里添加参数调整(比如-r 44100指定采样率)。 - 脚本会自动跳过目录B中不存在的文件,避免报错,同时给出提示。
备注:内容来源于stack exchange,提问作者black-clover
相关产品推荐
相关产品推荐

