SoX は、コンパイル対象のライブラリに応じて多数のオーディオ形式を処理でき、単純なコマンド ラインでファイルを連結できます
sox file1.wav file2.mp3 file3.flac outfile.ogg
これは、ソース オーディオ ファイルがすべて同じ数のチャンネルを持っている場合にのみ機能すると思いますが、これはテストしていません。
私の知る限り、SoX は .wma ファイルをまったくサポートしていないため、少なくともこれらのファイルを最初に ffmpeg などで変換することはおそらく避けられません。
ffmpeg -i infile.wma outfile.wav
これが私の提案です:mplayer と oggenc を使用してください 名前付きパイプで接続されています。
-
mplayer
を使用 さまざまなオーディオ (およびビデオ) 形式を再生でき、複数のファイルを再生することもできます。 -
oggenc
を使用 音声を Ogg Vorbis にエンコードします。 -
一時ファイルの必要性をなくすには、名前付きパイプを使用してエンコーダとデコーダの間でデータを転送します。
それをスクリプトに入れる:
#!/bin/sh
# Usage: ./combine2ogg destination.ogg source1.wma source2.wma ...
# Requires: mplayer, oggenc
destination="$1"
shift
readpipe="$destination.tmpr"
writepipe="$destination.tmpw"
mkfifo "$readpipe"
mkfifo "$writepipe"
cat "$writepipe" > "$readpipe" &
mplayer -really-quiet -slave -nolirc -vc null -vo null -ao "pcm:fast:file=$writepipe" "[email protected]" &
oggenc --quiet -o "$destination" "$readpipe"
rm -f "$readpipe"
rm -f "$writepipe"
説明:
<オール>-really-quiet -slave -nolirc
メッセージを無効にし、キーボードやリモコンを読み取らないようにするためにあります。オプション -vc null -vo null
ビデオのエンコードと出力を無効にするためにあります。 -ao
オプションは、オーディオを WAV 形式で名前付き書き込みパイプに出力するように指示します。
改善すべき点:コマンドの 1 つが失敗した場合にスクリプトを早期に終了する (set -e
を使用) )、それでも適切に fifo をクリーンアップします (必要なシグナルをトラップします)。
私はffmpegを使用します。 wma を ogg vorbis に変換するには:
ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg
またはmp3:
ffmpeg -i input.wma -acodec libmp3lame output.mp3
mp3 変換には lame をインストールする必要があります。 sudo apt-get install lame libmp3lame0
cat *.wma | ffmpeg -i - -acodec ...
のようなことができるという Web 上の参考文献をたくさん見つけることができますが、Cat, then convert はうまく機能していないようです。 - これは私のマシンでは機能しません - 最初のファイルだけが処理されます。 ffmpeg 用の「コピー」コーデックがありますが、大きな違いはありません。
最初に ffmpeg で変換を行うと、 cat *.ogg> output.ogg が機能しました。