如何更改文件夹中每个文件的采样率?
我有以下代码,它只是删除文件——文件大小变为 0。
for i in wav/*.wav; do
sox -r 8000 -e unsigned -b 16 -c 1 "$i" "$i"
done
这是为什么?
答案1
您告诉 sox 写入它正在读取的同一文件。因此,当 sox 准备输出文件时,它会打开它进行读取并清除它。但由于这也是输入文件,因此输入文件现在已被清除,sox 没有任何内容可读取。
相反,你应该使用临时文件。下面是其中一种方法:
for i in wav/*.wav; do
if sox -r 8000 -e unsigned -b 16 -c 1 "$i" "$i.resampled"; then
# This way we will only replace the original file with the
# resampled version if sox returns a zero (no error) error code.
mv "$i.resampled" "$i"
else
soxerrno = $?
echo "Sox reported error number $soxerrno while processing file $i"
fi
done
注意:我不使用袜子,所以我没有仔细检查你的其他袜子选项,只是导入文件和输出文件參數。