【问题标题】:Sox batch conversionSox 批量转换
【发布时间】:2018-02-20 11:50:17
【问题描述】:

我正在尝试使用链接 here 中提供的脚本将 728 个 .raw 文件转换为 16khz .wav 文件,但我收到一个错误

sox FAIL 格式:无法打开输入文件 `./*.wav':没有这样的文件或 目录

我正在使用的脚本是

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 文件。 为了消除错误并转换文件,我需要做哪些修改?

【问题讨论】:

  • 您从哪个文件夹运行此脚本? *.wav 将查找带有 wav 扩展名的文件,而不是 .raw 文件
  • @Inian 对不起。那是个错误。我纠正了它。在*.raw

标签: bash shell ubuntu audio sox


【解决方案1】:

您使用的 SOX 代码行根本不用于原始文件转换,请查看 SOX full documentation 了解更多信息。

接下来解释:什么是原始文件,然后是正确的代码。

首先您需要知道原始文件是无头文件

为了将原始文件转换为 wav,您需要重新创建文件头,包括:

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

所以,as mentioned in this Answer,格式是:

sox -r 16000 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>

这是针对特定情况,即您的原始数据源自 16KHz 采样率,每个采样 8 位,用无符号整数编码,并且是一个通道。

接下来, 对于 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

【讨论】:

    【解决方案2】:

    脚本正在当前目录中查找。错误消息看起来您在当前目录中根本没有与通配符匹配的文件。

    我猜你想要

    mkdir -p outputdir
    for i in rawfiles/*.raw; do
        o=outputdir/${i#rawfiles/}
        sox "$i" -r 16000 "${o%.raw}.wav"
    done
    

    如果你想要当前目录下的文件,显然不要创建或写入outputdir

    【讨论】:

    • 我收到一个错误sox FAIL formats: bad input format for file。for 循环中的代码是这个o = outputdir/${i} sox "$i" -r 16000 "${o%.raw}.wav"
    • 该错误似乎与您发布的代码无关;检查sox 手册页。等号周围的空格会导致语法错误(除非您有一个名为 o 的命令,它喜欢等号作为其第一个参数;如果您不需要从 @987654328 的开头修剪任何内容,则该分配是多余的@无论如何)。
    【解决方案3】:

    这里是可以帮助你的 windows equivilant。 我遇到了同样的问题,无法通过此处或任何其他站点找到解决方案。所以我踢了,呻吟着想通了,你可以将它转换为在 linux shell "$" 中使用,但这里是 96hz 24bit 到 48hz 16bit flac 到 flac 的批量转换。当然,您可以将其更改为您想要的任何组合(即 16b 44.1k)。

    创建一个批处理文件,即:24b-96hz to 16b-48hz-FLAC.bat

    @break off
    mkdir ".\FLACOUT\"
    FOR %%F IN (".\*.flac") DO sox.exe "%%F" -S -b 16 -r 48k -C 8 ".\FLACOUT\%%~NF.flac"
    

    它将从您的主目录中获取 *.flac 文件并创建一个名为 FLACOUT(或您将其重命名为任何名称)的子目录,并将新降采样的文件放入具有相同名称和元数据的子目录中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-21
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多