sox: Divida o áudio no silêncio, mas mantenha o silêncio

sox: Divida o áudio no silêncio, mas mantenha o silêncio

Tenho vários audiolivros armazenados em mp3s grandes. E estou tentando dividir esses mp3s grandes em vários arquivos menores.

Encontrei uma ferramenta que pode detectar silêncio em arquivos de áudio e dividir arquivos de áudio com base neste "delimitador".

Aqui está um exemplo:

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

Isso será basicamente dividido audiobook.mp3em audiobook_part_001.mp3, audiobook_part_002.mp3, ... onde silêncio >= 0,5 segundos.

Agora o problema é que este comando não apenas divide o arquivo, mas também remove o silêncio.

Portanto, quando você reproduz os novos arquivos em uma lista de reprodução, as faixas/parágrafos soam compactados.

Então, como você diz soxpara apenas dividir o arquivo, mas manter o silêncio (no final de cada faixa)?

Responder1

Você pode preservar todos os silêncios nas partes divididas com algumas pequenas alterações. Começando com seu comando original:

silence 1 0.5 0.1%   1 0.5 0.1% 

O primeiro trio de valores significa que remove o silêncio, se houver, no início até 0,5 segundos de som acima de 0,1%. O segundo trio significa parar quando houver pelo menos 0,5 segundos de silêncio abaixo de 0,1%. O restante do seu comando, : newfile : restart, inicia um novo arquivo de saída e começa novamente a procurar som no início. Portanto, o primeiro arquivo termina quando o silêncio começa, e o segundo arquivo começa quando o silêncio termina.

A opção mais simples disponível para melhorar isso é silence -l. Ele preservará os 0,5 segundos de silêncio que acionaram o final do arquivo. Infelizmente, qualquer silêncio prolongado será removido porque é o início do próximo arquivo. Uma maneira fácil de manter um intervalo maior é combinar -lcom um tempo de detecção mais longo, por exemplo, 2 segundos:

silence -l  1 0.5 0.1%   1 2.0 0.1%

Agora você só dividirá se houver pelo menos 2 segundos de silêncio, mas preservará os primeiros 2 segundos do intervalo. Para evitar perder todo o silêncio, basta remover a detecção de silêncio no início. Você precisa substituir o trio por um único 0:

silence -l  0   1 2.0 0.1%

Se você quiser brincar com arquivos de som simples para ver como soxlida com as situações, você pode facilmente criar 2 arquivos de som, um composto por 1 segundo de tom e outro composto por 1 segundo de silêncio, e depois juntá-los como desejar antes de apresentar o resultado como entrada para o silenceefeito. Por exemplo, crie:

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

então junte gap-tone-gap-tone e crie out.wavusando seu efeito e ouça o resultado:

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

Responder2

Eu usaria sox pad para adicionar silêncio ao início e ao final de cada arquivo dividido. No final, não será um único comando sox que faz tudo de uma só vez, mas é muito mais direto e oferece algum controle extra, como escolher a duração do silêncio acolchoado.

Veresta respostasobre como usar o sox pad. Por exemplo

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

informação relacionada