我需要对一批 wav 文件(名称中包含空格,例如 C 0 120-127.wav)应用 2 秒的淡出效果。
文件长度各不相同,但无论文件长度如何,我都需要从每个文件末尾淡出 2 秒。
我知道这可以用 sox 来完成,但我检查的教程包括其他操作(淡入或转换)或用于指定输入和输出的单个文件,这很令人困惑(我是 sox 新手)。
我需要文件名保持不变,尽管将输出通过管道传输到另一个文件夹也是可以接受的。
谢谢。
答案1
我不知道如何在袜子中做到这一点,但大胆地找到了一种方法。
我使用以下命令创建了一个宏:选择所有工作室淡出导出 wav(这看起来多余,但否则不起作用)
然后我使用应用宏>调色板>文件功能并选择目录中的所有样本。
注意:首先您需要创建一个宏输出目录并在编辑>首选项>目录中设置默认值
这个过程比红袜队花费的时间要长,但它确实有效。
答案2
您的问题有四个不同的部分
-
for wav in *.wav do echo "Processing: $wav" sox "$wav" "processed_$wav" ... done
带空格的文件名应加引号。所以
"this file.txt"
或者'my music.wav'
。如果您使用变量,则应将其放在双引号中,例如"$wavfile"
。从最后开始逐渐消失。您可以
man sox
在自己的机器上使用该命令来阅读有关该sox
命令的文档。或者有类似的手册页可用在线的。搜索四到五个“fade
”匹配项并确定声音文件淡入淡出部分的语法。请记住,时间点可以为零或正数(从声音文件的开头开始),也可以为负数(从末尾向后计算)。读取/处理文件时不能覆盖文件。相反,您必须写入另一个文件,然后如果写入成功完成,则用修改后的文件替换原始文件。就我个人而言,如果我这样做,我总是将原始文件保存为备份(以防处理过程中出现问题并且我需要恢复它)。这是执行此操作的典型但简化的方法:
if sox music.wav 'new music.wav' # Write to "new music.wav" then # Successful, so replace original with new version mv -f music.wav music.wav.bak && # Save original - optional mv -f 'new music.wav' music.wav # Rename new as original rm -f 'new music.wav' # Try to remove new version in case mv failed fi