【问题标题】:SoX: Premature EOF on .wav input fileSoX:.wav 输入文件上的过早 EOF
【发布时间】:2021-01-27 07:01:44
【问题描述】:

我有一堆 WAV 文件和一个将它们复制到另一个目录的脚本,但使用 SoX 处理一些文件。输出的文件都应该有 1 个通道,并且采样率为 44.1khz 或更低。我的大多数文件要么有多个通道,要么采样率大于 44.1khz,但只有 3 个文件两者都有。当使用下面的代码 sn-p 转换这 3 个文件时,我收到“sox WARN wav: Premature EOF on .wav input file”错误。

# $x is the filename + extension
# $2 is the destination folder
convertedWAV=false
hz=$(sox --info $PWD/$x | sed -n 4p | tr ' ' '\n' | tail -1)
chan=$(sox --info $PWD/$x | sed -n 3p | tr ' ' '\n' | tail -1)

# If its more than 44.1khz, then bring it down to that
if [[ $hz > 44100 ]]; then
    echo "ADJUSTING HZ"
    convertedWAV=true
    sox $PWD/$x --rate 44100 $2/$x
fi

# If its more than 1 channel (AKA Stereo), then reduce it.
if [[ $chan > 1 ]]; then
    echo "ADJUSTING CHANNELS"
    if [[  $convertedWAV == false ]]; then
        sox $PWD/$x --channels 1 $2/$x
    else
        sox $2/$x --channels 1 $2/$x
    fi
    convertedWAV=true
fi

if [[ $convertedWAV == false ]]; then
    ln "$PWD/$x" "$2"
fi

注意这 3 个文件是如何通过两个单独的 SoX 命令的。然后我修改了我的脚本,所以如果两个通道 > 1 和 hz > 44100 则它执行一个 sox 命令,代码如下所示。

if [[ $chan > 1 ]] && [[ $hz > 44100 ]]; then
    sox $PWD/$x --channels 1 --rate 44100 $2/$x
elif [[ $chan > 1 ]]; then
    sox $PWD/$x --channels 1 $2/$x
elif [[ $hz > 44100 ]]; then
    sox $PWD/$x --rate 44100 $2/$x
else
    cp "$PWD/$x" "$2/$x"
fi

现在可以了。我的问题是,为什么?如果我执行sox $PWD/$x --rate 44100 --channels 1 $2/$x,它的行为是一样的,出于某种原因,在两个命令中执行它会导致问题。我找不到明确的答案。根据this 的说法,可能会发生错误,因为 hdr 的长度实际上并不是长度,所以第一个 SoX 命令可能会稍微损坏文件?我不知道这是 SoX 转换的错误还是我的音频文件有问题。我已经上传了其中一个 here 以防万一。

【问题讨论】:

    标签: bash command-line channel sox sample-rate


    【解决方案1】:

    sox $2/$x --channels 1 $2/$x

    您不能将文件 $2/$x 连接到自身。

    【讨论】:

    • 哦,我以为是把第一个文件作为源,输出到一些临时文件,然后用第二个文件名复制保存。我没有意识到它只是跳过了临时文件。我需要重新设置我的开发环境来测试它,但感谢您的澄清。
    • 不,那会非常方便,但不幸的是您必须手动执行此操作,我什至找不到可选标志...无论如何,我希望您将答案标记为正确 if/when你测试一下,我还没有一个标记为正确的;)
    • 我这几天太忙了,我要花几个月的时间来尝试一下。答案是有道理的,所以我将其标记为已接受的答案。再次感谢您的洞察力。
    猜你喜欢
    • 2011-05-28
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多