bash - Sox 批量转换

标签 bash shell ubuntu audio sox

我正在尝试使用链接 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,您需要重新创建文件头,其中包括:

  • 采样率 (44100, 16000, 8000, ...) [Hz]
  • 样本大小 [位]
  • 数据编码(浮点、μ律、ADPCM、有符号整数 PCM)
  • channel (通常:1 个单声道或 2 个立体声)

  • 所以,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/

    相关文章:

    bash - Docker 容器中的 pg_dump

    Bash:猫和 echo 之间的区别

    linux - 根据修改时间在 Linux 中查找文件

    shell 中的 java 类路径

    bash - Bash 中的 "$#"特殊参数是什么意思?

    eclipse - 访问 HG 存储库时网络/samba 共享的权限被拒绝

    java - 在 Ubuntu 上启动 Firefox 时 Selenium 挂起

    regex - 选择奇数列,然后将连续行的字段放在一起

    shell - 根据条件无限循环运行具有 While 条件的 shell 脚本

    git - 安装openstack时出错 : ./stack.sh:137:die