web-dev-qa-db-ja.com

sox:無音で音声を分割しますが、無音のままにします

大きなmp3に保存されている複数のオーディオブックを持っています。そして、私はこれらの大きなmp3を複数の小さなファイルに分割しようとしています。

この「区切り文字」に基づいて、オーディオファイルの無音を検出し、オーディオファイルを分割できるツールを見つけました。

次に例を示します。

sox -V3 audiobook.mp3 audiobook_part_.mp3 \
silence 1 0.5 0.1% 1 0.5 0.1% : newfile : restart

これは基本的に分割されますaudiobook.mp3からaudiobook_part_001.mp3audiobook_part_002.mp3、...ここで無音> = 0.5秒。

問題は、このコマンドがファイルを分割するだけでなく、無音も削除することです。

したがって、プレイリストで新しいファイルを再生すると、トラック/段落の音が一緒に圧縮されます。

では、どのようにsoxにファイルを分割するだけで、(各トラックの終わりに)沈黙を保つように指示するのですか?

5
Lugaxx

いくつかの小さな変更で、分割された部分のすべての無音を保持できます。元のコマンドから始めます:

silence 1 0.5 0.1%   1 0.5 0.1% 

最初の3つ組の値は、0.1%を超える.5秒の音が出るまで、開始時に無音を取り除くことを意味します。 2番目のトリプレットは、0.1%未満の沈黙時間が0.5秒以上ある場合に停止することを意味します。コマンドの残りの: newfile : restartは、新しい出力ファイルを開始し、最初からサウンドを探し始めます。したがって、最初のファイルは無音が始まると終了し、2番目のファイルは無音が終了すると始まります。

これを改善するために利用できる最も簡単なオプションはsilence -lです。ファイルの終わりをトリガーした0.5秒の無音を維持します。残念ながら、それが次のファイルの始まりであるため、それ以上の無音は削除されます。より長いギャップを維持する簡単な方法は、-lを長い検出時間(2秒など)と組み合わせることです。

silence -l  1 0.5 0.1%   1 2.0 0.1%

少なくとも2秒間の無音がある場合にのみ分割されますが、ギャップの最初の2秒間は保持されます。すべての沈黙を失わないようにするには、開始時に沈黙の検出を削除するだけです。トリプレットを単一の0に置き換える必要があります。

silence -l  0   1 2.0 0.1%

シンプルなサウンドファイルを再生してsoxが状況をどのように処理するかを確認する場合は、2つのサウンドファイルを簡単に作成できます。1つは1秒のトーンで構成され、もう1つは1秒の無音で構成され、それらを結合します。 silenceエフェクトへの入力として結果を表示する前に、必要に応じて一緒に。たとえば、次のように作成します。

sox -n gap.wav   trim 0 1
sox -n tone.wav  synth 1.001t sine C5

次に、gap-tone-gap-toneに参加し、エフェクトを使用してout.wavを作成し、結果を聞きます。

sox gap.wav tone.wav gap.wav tone.wav out.wav silence 1 0.5 0.1%
play out.wav
8
meuh