我需要将音频文件剪切成长度相等的小样本。我需要的基本上是一个音频批处理器,它可以完成这项工作,并用数字命名切片。我使用的是 OSX,并且发现音频分配器。但是,最短的采样长度是 1 秒,对于我的目的来说太长了。有人知道其他方法吗?
答案1
出色的声音转换器 SoX(也被称为“音频处理的瑞士军刀”)适用于 OS X,所以我希望这个脚本能够帮助你:
#!/bin/sh
N=0
START=0
LENGTH=8000
COUNT=100
INPUT=input.mp3
OUTPUT=output-X.wav
for i in `jot ${COUNT}`; do
echo "Trimming ${START}+${LENGTH}"
sox ${INPUT} `echo ${OUTPUT} | sed s/X/${N}/` trim ${START}s ${LENGTH}s
N=`expr ${N} + 1`
START=`expr ${START} + ${LENGTH}`
done
所有长度均以样本为单位(您也可以以“HH:MM:SS.ddd”格式指定时间,请查看 SoX 手册页);它读取 INPUT 文件并生成名为 output-0.wav、output-1.wav 等的文件。
答案2
这是我的解决方案。
#!/bin/bash
INPUT=input.wav
OUTPUT=output-X.wav
N=0
START=0
LENGTH=0.05 # length in ms (to use samples you should add s suffix to commandline trim Xs Ys and s flag for soxi)
TOTAL_LENGTH=`soxi -D ${INPUT}`
while [ $(echo "$START < $TOTAL_LENGTH"|bc) -eq 1 ]; do
echo "Trimming from ${START} of ${TOTAL_LENGTH}"
sox ${INPUT} `echo ${OUTPUT} | sed s/X/${N}/` trim ${START} ${LENGTH}
N=$(($N+1))
START=`echo "$START + $LENGTH"|bc`
done
区别在于:
- 脚本与
ms
而不是与samples
INPUT
根据长度自动检测输出文件的数量