sox: Dividir o áudio no silêncio, mas manter silêncio

4

Eu tenho vários audiolivros que são armazenados em mp3s grandes. E estou tentando dividir esses mp3s grandes em vários arquivos menores.

Encontrei uma ferramenta que pode detectar o silêncio em arquivos de áudio e dividir arquivos de áudio com base nesse "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 dividirá basicamente audiobook.mp3 em audiobook_part_001.mp3 , audiobook_part_002.mp3 , ... onde silêncio > = 0,5 segundos.

Agora, o problema é que esse 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 trilhas / parágrafos são compactados juntos.

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

    
por Lugaxx 22.10.2016 / 17:38

1 resposta

6

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

silence 1 0.5 0.1%   1 0.5 0.1% 

O primeiro trio de valores significa remover 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 5 segundos de silêncio abaixo de 0,1%. O restante do comando, : newfile : restart , inicia um novo arquivo de saída e começa novamente a procurar por som no início. Então, 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 mais longo será removido porque é o início do próximo arquivo. Uma maneira fácil de manter um intervalo maior é combinar -l com um tempo de detecção maior, por exemplo, 2 segundos:

silence -l  1 0.5 0.1%   1 2.0 0.1%

Agora você só vai 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 do 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 tocar com arquivos de som simples para ver como o sox lida com situações, você pode criar facilmente 2 arquivos de som, um consistindo de 1 segundo de um som e um consistindo em 1 segundo de silêncio. juntos como você deseja antes de apresentar o resultado como entrada para o efeito silence . Por exemplo, crie:

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

junte o gap-tone-gap-tone e crie out.wav usando 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
    
por 02.11.2016 / 12:27

Tags