如何更改目录中所有文件的采样率

问题描述

如何更改文件夹中每个文件的采样率?

我有以下代码,它只是删除文件-文件大小变为0。

for i in wav/*.wav; do
    sox -r 8000 -e unsigned -b 16 -c 1 "$i" "$i"
done

那是为什么?

解决方法

sox -r 8000 -e unsigned -b 16 -c 1 "$i" "$i"

您没有在任何地方使用$o(输出文件)-似乎您正在尝试从同一文件输入和输出(只是猜测-对sox不熟悉)

一种方法是写入一个临时输出文件,然后将其移到输入文件的顶部:

for fname in wav/*.wav; do
    TMP_OUT=$(mktemp)
    sox -r 8000 -e unsigned -b 16 -c 1 "$fname" $TMP_OUT
    mv $TMP_OUT $fname
done

这里的危险是,如果出现问题,您将丢失输入文件。我将检查sox的结果,只有在sox成功的情况下才覆盖输入文件。