1つにマージしたい多くの(7500).wavファイル(番号で名前が付けられています)があります。グロブを使用すると一部のファイルの順序が間違ってしまうため(2の前の1111など)、bashループを使用して実行する必要があると思います。
Linuxでこれを行うための最良の方法は何ですか?
すべてのファイルにサンプルレートやチャンネル数などの同じパラメータがある場合でも、それらを単に連結することはできません。 WAVヘッダーを取り除く必要があります。
sox
のようなオーディオファイル操作ユーティリティを使用するのが最も簡単かもしれません。これには、ファイルを連結するためのメソッドが含まれています。実際、これはデフォルトで行われます。例えば。 3つの.wavファイルを1つの長いファイルに結合するには:
$ sox short1.wav short2.wav short3.wav long.wav
ループは、ファイルを希望の順序で配置しません。必要なのは名前を並べ替えることですが、数値で扱います。 sort -n
がこれを行います。
したがって:
$ sox $(ls *.wav | sort -n) out.wav
sox
がその数のファイルを処理できない場合は、次のようにジョブを分割できます。
$ ls *.wav | sort -n > script
次に、次のようなスクリプトファイルがあります。
1.wav
2.wav
...
3999.wav
4000.wav
...
file7500.wav
これを編集して、いくつかのコマンドラインを作成します。
# 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
ファイルリストの最初の編集手順として、vi
コマンド:%s/.*/& \\/
を使用して、すべての行の後に円記号を追加できます。