Sox

sox:在靜音時拆分音頻但保持靜音

  • May 11, 2021

我有多個儲存在大型 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

引用自:https://unix.stackexchange.com/questions/318164