我正在尝试使用链接 here 中给出的脚本将 728 个 .raw 文件转换为 16khz .wav 文件但我收到一个错误
sox FAIL formats: can't open input file `./*.wav': No such file or directory
我正在使用的脚本是
for i in ./*.raw; do sox "$i" -r 16000 "${i%%.wav}r.wav"; done
脚本位于
convert.sh
原始文件位于 rawfiles 文件夹中。文件结构就像/Orginal/rawfiles/.rawfiles
和 /Orginal/convert.sh
我有 728 个文件可以将 .raw 文件转换为 16 位 16khz 单声道 wav 文件。
为了消除错误并转换文件,我需要做哪些修改?
最佳答案
您使用的 SOX 代码行根本不用于原始文件转换,请检查 SOX full documentation了解更多信息。
接下来是解释:什么是原始文件,然后是正确的代码。
首先你需要知道原始文件是 headless 文件 .
为了将原始文件转换为 wav,您需要重新创建文件头,其中包括:
所以,as mentioned in this Answer ,格式为:
sox -r 16000 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>
这是针对特定情况,您的原始数据源自 16KHz 采样率,每个样本 8 位,用无符号整数编码,并且它是一个 channel 。
下一个,
对于 for 循环,您可以使用任何有效的 for 脚本...
So the answer from: tripleee, with this modification will work :
mkdir -p outputdir
for i in rawfiles/*.raw; do
o=outputdir/${i#rawfiles/}
sox -r 16000 -e unsigned -b 8 -c 1 "$i" "${o%.raw}.wav"
done
关于bash - Sox 批量转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48884679/