【问题标题】:How to change sample rate for all files in a directory如何更改目录中所有文件的采样率
【发布时间】:2020-08-18 02:58:56
【问题描述】:

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

我有以下代码,它只是擦除文件——文件大小变为 0。

for i in wav/*.wav; do
    sox -r 8000 -e unsigned -b 16 -c 1 "$i" "$i"
done

这是为什么呢?

【问题讨论】:

  • 输出到临时文件,然后用临时文件代替原始文件
  • 在您的问题中添加了sox 标签。在我看来,这更像是一个如何正确使用 sox 的问题,而不是关于如何进行 shell 编程的问题。您可以考虑删除 bashshell 的标签并将其发布在 superuser.

标签: bash shell sox


【解决方案1】:

sox -r 8000 -e unsigned -b 16 -c 1 "$i" "$i"

您没有在任何地方使用$o(输出文件) - 看起来您正在尝试从同一个文件输入和输出(只是猜测 - 不熟悉sox

一种方法是写入一个临时输出文件,然后将其移到输入文件的顶部:

for fname in wav/*.wav; do
    TMP_OUT=$(mktemp)
    sox -r 8000 -e unsigned -b 16 -c 1 "$fname" $TMP_OUT
    mv $TMP_OUT $fname
done

这里的危险是,如果出现问题,您会丢失输入文件。我会检查sox 的结果,只有在sox 成功时才会覆盖输入文件。

【讨论】:

  • 对!我忘了删除那部分,但是“$o”在代码中不会做任何事情
  • 您仍在使用相同的输入和输出文件,这可能无法正常工作。
  • @John3136 :你基本上是对的。如何在您的答案中加入一个如何以有意义的方式设置和使用o 的示例?
猜你喜欢
  • 2018-08-25
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 2015-07-13
  • 2018-10-27
  • 2020-04-11
  • 1970-01-01
相关资源
最近更新 更多