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

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

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

我有以下代码,它只是删除文件——文件大小变为 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

注意:我不使用袜子,所以我没有仔细检查你的其他袜子选项,只是导入文件输出文件參數。

相关内容