sox: 無音時に音声を分割するが、無音のままにする

sox: 無音時に音声を分割するが、無音のままにする

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

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

次に例を示します。

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

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

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

したがって、プレイリスト内の新しいファイルを再生すると、トラック/段落が圧縮されたように聞こえます。

soxでは、ファイルを分割するだけで、無音部分(各トラックの最後)を残すにはどうすればよいでしょうか?

答え1

少し変更するだけで、分割された部分の無音部分をすべて保持できます。元のコマンドから始めます。

silence 1 0.5 0.1%   1 0.5 0.1% 

最初の 3 つの値の組み合わせは、開始時に無音部分があれば、0.1% を超える音が 0.5 秒続くまで削除することを意味します。2 番目の 3 つの値の組み合わせは、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 秒間は保持されます。すべての無音を失わないようにするには、開始時に無音の検出を削除するだけです。3 連符を 1 行に置き換える必要があります0

silence -l  0   1 2.0 0.1%

が状況をどのように処理するかを確認するために、単純なサウンド ファイルで試してみたい場合はsox、1 秒間のトーンと 1 秒間の無音で構成される 2 つのサウンド ファイルを簡単に作成し、必要に応じてそれらを結合してから、エフェクトへの入力として結果を提示することができます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

答え2

私は、各分割ファイルの先頭と末尾に無音部分を追加するのに sox pad を使用します。最終的には、1 つの sox コマンドですべてを 1 回で実行することはできなくなりますが、はるかに簡単で、パディングされた無音部分の長さを選択するなどの追加の制御が可能になります。

見るこの答えソックスパッドの使い方について。例:

files="*.wav"
for f in $files
do
  sox "$f" "${f%.*}-pad.wav" pad 2 3
done

関連情報