我有很多(7500 个).wav 文件(以它们的编号命名),我想将它们合并为一个。我认为它必须使用 bash 循环来完成,因为使用通配符某些文件的顺序会错误(例如 2 之前的 1111)。
在 Linux 下执行此操作的最佳方法是什么?
Kaz*_*Kaz 15
如果所有文件都具有相同的参数,例如采样率和通道数,您仍然不能将它们串联起来。您必须剥离 WAV 标头。
使用音频文件操作实用程序可能是最简单的,例如sox,它包含一种用于连接文件的方法。事实上,它默认执行此操作。例如,将三个 .wav 文件合并为一个长文件:
$ sox short1.wav short2.wav short3.wav long.wav
Run Code Online (Sandbox Code Playgroud)
循环不会按照您想要的顺序排列文件。您想要的是对名称进行排序,但以数字方式处理它们。sort -n会这样做。
因此:
$ sox $(ls *.wav | sort -n) out.wav
Run Code Online (Sandbox Code Playgroud)
如果sox不能处理那么多文件,我们可以这样分解工作:
$ ls *.wav | sort -n > script
Run Code Online (Sandbox Code Playgroud)
然后我们有一个脚本文件,它看起来像:
1.wav
2.wav
...
3999.wav
4000.wav
...
file7500.wav
Run Code Online (Sandbox Code Playgroud)
我们编辑它以创建几个命令行:
# catenate about half the files to temp1.wav
sox \
1.wav \
2.wav \
... \
3999.wav \
temp1.wav
# catenate the remainder to temp2.wav
sox \
4000.wav \
... \
7500.wav \
temp2.wav
# catenate the two halves
sox temp1.wav temp2.wav out.wav ; rm temp1.wav temp2.wav
Run Code Online (Sandbox Code Playgroud)
作为文件列表的第一个编辑步骤,您可以使用该vi命令:%s/.*/& \\/在每一行后添加一个反斜杠。
| 归档时间: |
|
| 查看次数: |
15543 次 |
| 最近记录: |