You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按文件名匹配合并不同目录下的WAV文件

按文件名匹配合并不同目录下的WAV文件

哎呀手动一个个合并确实太折腾了!刚好可以用命令行脚本批量搞定这个事儿,我给你详细讲讲怎么操作~

你的核心需求是把两个目录里同名的WAV文件一一对应合并,用sox -m命令是完全可行的,关键是通过脚本实现批量遍历匹配。下面分两种常用环境给你提供方案:

一、Linux/macOS(或Windows下用WSL、Git Bash)

首先确认你已经安装了sox(可以用sox --version检查,没安装的话用包管理器比如apt install sox或brew install sox安装)。

操作步骤:

  1. 先创建一个存放合并后文件的目录,避免覆盖原文件:
mkdir -p merged
  1. 运行下面的批量合并脚本(把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,也可以用批处理脚本实现:

  1. 同样先确保sox已经安装,并且添加到系统环境变量里(能直接在CMD里调用sox)。
  2. 创建一个.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
  1. 把dirA和dirB替换成你的实际目录路径,双击运行这个批处理文件即可。

注意事项:

  • 尽量保证两个目录里的同名WAV文件采样率、位深、声道数一致,如果不一致,sox会自动进行格式转换,但如果有特殊格式要求,可以在sox命令里添加参数调整(比如-r 44100指定采样率)。
  • 脚本会自动跳过目录B中不存在的文件,避免报错,同时给出提示。

备注:内容来源于stack exchange,提问作者black-clover

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 12:54:35