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.mp3
,audiobook_part_002.mp3
… 其中靜音 >= 0.5 秒。現在的問題是,這個命令不僅會拆分文件,還會刪除靜音。
因此,當您在播放列表中播放新文件時,曲目/段落聽起來會擠在一起。
那麼你如何告訴
sox
只拆分文件但保持沉默(在每個軌道的末尾)?
您可以通過一些小的更改來保留拆分部分中的所有靜音。從您的原始命令開始:
silence 1 0.5 0.1% 1 0.5 0.1%
第一個三元組值意味著在開始時消除靜音(如果有),直到 0.5 秒的聲音高於 0.1%。第二個三連音表示在 0.1% 以下至少有 0.5 秒的靜默時停止。然後,您的命令的其餘部分
: newfile : restart
會啟動一個新的輸出文件並再次開始尋找聲音。所以第一個文件在靜音開始時結束,第二個文件將在靜音結束時開始。可用於改進這一點的最簡單的選項是
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 秒的靜音組成,然後在展示之前將它們組合在一起結果作為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