如何用Sox编写Bat脚本批量混合成对WAV文件?
批量混合成对WAV文件的Bat脚本实现
实现思路
- 遍历当前文件夹中所有不带
(2)后缀的.wav文件 - 对每个基础文件,检查对应的
文件名 (2).wav是否存在 - 若存在,调用Sox将两个文件混合,输出为
文件名 (3).wav
完整Bat脚本
@echo off setlocal enabledelayedexpansion :: 遍历所有不带(2)后缀的WAV文件 for %%f in (*.wav) do ( set "filename=%%~nf" set "extension=%%~xf" :: 跳过带(2)的文件,只处理基础文件 if not "!filename:~-4!"==" (2)" ( set "pair_file=!filename! (2)!extension!" :: 检查配对文件是否存在 if exist "!pair_file!" ( set "output_file=!filename! (3)!extension!" :: 调用Sox混合两个文件,-m参数启用音频混合模式 sox -m "%%f" "!pair_file!" "!output_file!" echo 已生成: !output_file! ) else ( echo 未找到配对文件: !pair_file!,跳过处理%%f ) ) ) endlocal pause
关键细节说明
setlocal enabledelayedexpansion:启用延迟变量扩展,解决循环中变量赋值的实时读取问题sox -m:Sox的核心混合参数,会将两个音频文件按比例混合(默认等音量),如果需要调整音量,可以添加vol效果,比如sox -m "%%f" vol 0.8 "!pair_file!" vol 0.8 "!output_file!"- 引号包裹文件路径:处理文件名包含空格的场景,避免命令解析错误
- 跳过
(2)后缀文件:确保只以基础文件为起点配对,避免重复处理
注意事项
- 确保Sox已添加到系统环境变量,若未添加,将脚本中的
sox替换为Sox的完整路径,比如"C:\Program Files\sox-14.4.2\sox.exe" - 若
(3)版本文件已存在,Sox会直接覆盖,如需避免覆盖,可在生成前添加if not exist "!output_file!"判断
内容的提问来源于stack exchange,提问作者Crony
相关产品推荐
相关产品推荐

