2012-08-06 14 views
20

Tengo archivos MP3 que a veces tienen silencio al final. Me gustaría eliminar este silencio automáticamente. Por lo que puedo decir, es silencio "perfecto" (amplitud 0), no ruido de fondo. La duración del contenido y el silencio varía.¿Cómo puedo eliminar el silencio de un MP3 mediante programación?

Encontré algunas otras preguntas sobre cropping to the first 30 seconds o cropping to X and X+N seconds usando ffmpeg. Pensaría que podría usar un enfoque similar, siempre que tenga una manera de descubrir cuándo comienza el silencio. ¿Cómo lo haría programáticamente?

Por ejemplo, una posible solución sería tener un comando que encuentre el comienzo del "silencio". Yo esperaría una secuencia como esta

end=$(ffmpeg some-command-to-find-start-of-silence) 
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3 

La solución hace no tienen que utilizarffmpeg, pero tiene que estar disponible en Ubuntu.

+0

¿De verdad solo le interesa el silencio perfecto? Eso es muy raro, con dithering de maestros de 24 bits y compresión con pérdida.FFMPEG es el camino a seguir, en cualquier caso. – Brad

+0

@Brad Básicamente estamos trabajando en un error en un servicio de grabación que usamos. Parece que siempre da este silencio "perfecto" cuando ocurre el problema. –

+0

Parece que podría estar interesado en el filtro de audio ['silencedetect' FFmpeg] (http://ffmpeg.org/ffmpeg.html#silencedetect). – blahdiblah

Respuesta

5

Tener un vistazo a la silencedetect FFmpeg audio filter:

Detectar silencio en un flujo de audio.

Este filtro registra un mensaje cuando detecta que el volumen de audio de entrada es menor o igual a un valor de tolerancia de ruido para una duración mayor o igual a la duración de ruido mínima detectada.

Los tiempos impresos y la duración se expresan en segundos.

Tiene parámetros para ajustar qué tan silencioso debe ser algo para que se considere silencio, y cuánto tiempo se debe notar el silencio.

+2

El filtro 'silenceremove' está documentado aquí https://ffmpeg.org/ffmpeg-filters.html#toc-silenceremove Esta respuesta también podría ser útil: http://stackoverflow.com/a/29411973/1717535 –

32
sox inputfile.mp3 outputfile.mp3 silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse 

Esto cortará cualquier silencio de más de 0.1 segundo desde su archivo. Si sólo estás preocupado por el recorte final, esto se puede simplificar a:

sox inputfile.mp3 outputfile.mp3 reverse silence 1 0.1 0.1% reverse 

Una mirada detallada de cómo sox 's silence obras se encuentran here.

+0

La solución funciona , pero tu explicación es incorrecta. El autor original dijo "recortar el silencio (cualquier volumen inferior al 1%) hasta que nos encontremos con un sonido que dure más de 0,1 segundos de duración". – duleshi

7

Usted probablemente en busca de una solución sin pérdida, es decir, uno que lo haga no requiere volver a codificar (lo que reduce la calidad).

Creo que mp3splt es lo que estás buscando. Se puede usar desde línea de comando y GUI.

sudo aptitude install mp3splt mp3splt-gtk 

debería funcionar en Debian y Ubuntu.

Desde la página del manual:

También puede tratar de dividir los archivos de forma automática con detección de silencio (véase la opción -s), archivos de acabado utilizando la detección de silencio (véase la opción -r), o por una longitud de tiempo fija (ver -t opción)

Cuestiones relacionadas