【问题标题】:Merge all .wav files in a folder that start by the same prefix合并以相同前缀开头的文件夹中的所有 .wav 文件
【发布时间】:2016-12-31 14:57:32
【问题描述】:

我的文件列表如下所示:

S134_001.wav
S134_002.wav
S134_003.wav
S149_001.wav
S149_002.wav
S149_003.wav
S16_001.wav
S16_002.wav
S16_003.wav
S16_004.wav
S16_005.wav
S16_006.wav
S272_001.wav
S272_002.wav
S272_003.wav
S272_004.wav
S272_005.wav
S272_006.wav
S272_007.wav
S374_001.wav
S396_001.wav
S92_001.wav

而我想将S134_001.wav、S134_002.wav、S134_003.wav合并成S134.wav; S149_001.wav、S149_002.wav和S149_003.wav转成S149.wav;等等(最好使用 sox )。

我也想删除原始文件。

我如何做到这一点? Bash 是首选的解决方案,但任何编程语言都可以。谢谢。

【问题讨论】:

  • 注意:在sox 术语中,merge 表示覆盖音频文件,而concatenate 表示依次附加一个文件。

标签: bash text-processing sox


【解决方案1】:

你可以像这样使用 for 循环:

for f in *_001.wav
do
    pre=${f%%_001.wav}
    # use either cat or sox or whatever works:
    #cat "${pre}_"*.wav > "${pre}.wav"
    sox -m "${pre}_"*.wav "${pre}.wav"
    #rm -rf "${pre}_"*.wav
done
  • 这里我们遍历 *_001.wav 文件并
  • 从文件中导出前缀
  • 然后将具有相同前缀的文件拼接成一个新文件。
  • 如果一切正常,您可以删除rm 命令之前的注释。

【讨论】:

  • 另外.wav 看起来是某种音频格式,与cat 合并实际上没有意义,可能需要一些其他工具来实现。
  • @Inian 它只迭代*_001.wav 的集合,将* 部分放入$pre。然后将${pre}_*.wav 连接到一个名为${pre}.wav 的新文件中,因此所有具有公共前缀的文件都在一个循环步骤中处理并合并到一个以其公共前缀命名的新文件中。如果使用catsplit 分割的文件是有意义的。如果文件应该被区别对待,则必须调整命令,这个 sn-p 是调整的模板。
  • 啊!这对于第一部分来说是有道理的,但 cat 在这里仍然没有意义,请参阅 OP 关于使用 sox 来连接文件“最好使用 sox”的观点,我不确定音频流的行为数据使用cat
  • @Inian 似乎你可以做类似sox -m "${pre}_"*.wav "${pre}.wav" 的事情,而不是 cat。我不是袜子专家。
  • 文件是使用 sox 拆分的。 cat 解决方案不起作用,因为我没有使用 split
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多