sox: divide el audio en silencio pero mantén el silencio

sox: divide el audio en silencio pero mantén el silencio

Tengo varios audiolibros almacenados en mp3 grandes. Y estoy intentando dividir estos mp3 grandes en varios archivos más pequeños.

Encontré una herramienta que puede detectar silencios en archivos de audio y dividir archivos de audio según este "delimitador".

Aquí hay un ejemplo:

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

Básicamente, esto se dividirá audiobook.mp3en audiobook_part_001.mp3,, audiobook_part_002.mp3... donde el silencio >= 0,5 segundos.

Ahora el problema es que este comando no sólo divide el archivo sino que también elimina el silencio.

Por lo tanto, cuando reproduces archivos nuevos en una lista de reproducción, las pistas/párrafos suenan comprimidos.

Entonces, ¿cómo se le dice soxque solo se divida el archivo pero que se mantenga el silencio (al final de cada pista)?

Respuesta1

Puedes conservar todos los silencios en las partes divididas con algunos pequeños cambios. Comenzando con su comando original:

silence 1 0.5 0.1%   1 0.5 0.1% 

El primer triplete de valores significa que elimina el silencio, si lo hay, al principio hasta 0,5 segundos de sonido por encima del 0,1%. El segundo triplete significa detenerse cuando hay al menos 0,5 segundos de silencio por debajo del 0,1%. El resto de su comando, : newfile : restartluego inicia un nuevo archivo de salida y comienza nuevamente a buscar sonido al principio. Entonces, el primer archivo terminará cuando comience el silencio y el segundo archivo comenzará cuando termine el silencio.

La opción más sencilla disponible para mejorar esto es silence -l. Conservará los 0,5 segundos de silencio que provocaron el final del archivo. Lamentablemente, cualquier silencio prolongado se eliminará porque es el comienzo del siguiente archivo. Una forma sencilla de mantener un intervalo más largo es combinarlo -lcon un tiempo de detección más largo, por ejemplo, 2 segundos:

silence -l  1 0.5 0.1%   1 2.0 0.1%

Ahora solo te dividirás si hay al menos 2 segundos de silencio, pero conservarás los primeros 2 segundos del intervalo. Para evitar perder todo el silencio, simplemente elimine la detección de silencio al principio. Necesitas reemplazar el triplete por un solo 0:

silence -l  0   1 2.0 0.1%

Si desea jugar con archivos de sonido simples para ver cómo soxse manejan las situaciones, puede crear fácilmente 2 archivos de sonido, uno que consta de 1 segundo de un tono y otro de 1 segundo de silencio, luego unirlos como desee antes de presentar. el resultado como entrada al silenceefecto. Por ejemplo, cree:

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

luego únete a gap-tone-gap-tone y crea out.wavusando tu efecto y escucha el resultado:

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

Respuesta2

Usaría sox pad para agregar silencio al principio y al final de cada archivo dividido. Al final, no será un comando único que haga todo de una sola vez, sino que es mucho más sencillo y te brinda un control adicional, como elegir la duración del silencio acolchado.

Veresta respuestasobre cómo usar la toalla sanitaria. P.ej

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

información relacionada