
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.mp3
em 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 sox
para 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 -l
com 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 sox
lida 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 silence
efeito. 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.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
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