¿Limpiar grabaciones de voz desde la línea de comandos?

28

He usado Audacity para eliminar el ruido de las grabaciones antes, sin embargo, tiene un uso muy limitado de la línea de comandos. Tengo ~ 100 videos cortos de conferencias que veré durante los próximos meses y me gustaría una manera fácil de limpiarlos todos a la vez o según sea necesario antes de verlos.

¿Existe una herramienta de línea de comandos o una biblioteca de idiomas populares que pueda usar para hacer esto?

Annan
fuente

Respuestas:

17

Echa un vistazo a sox

Citando man sox:

SoX - Sound eXchange, the Swiss Army knife of audio manipulation

[...]

SoX is a command-line audio processing  tool,  particularly  suited  to
making  quick,  simple  edits  and to batch processing.  If you need an
interactive, graphical audio editor, use audacity(1).

Por lo tanto, debería ser una buena opción como alternativa de línea de comando complementaria a audaciy.


Con respecto a la tarea real de limpiar las grabaciones, eche un vistazo al filtro noiseredpara el cual es igual el filtro de reducción de ruido Audacity :

man sox | less -p 'noisered \['

           [...]
   noisered [profile-file [amount]]
           Reduce noise in the audio signal by profiling and filtering.
           This effect is moderately effective at  removing  consistent
           background  noise such as hiss or hum.  To use it, first run
           SoX with the noiseprof effect on a  section  of  audio  that
           ideally  would  contain silence but in fact contains noise -
           such sections are typically found at the  beginning  or  the
           end  of  a recording.  noiseprof will write out a noise pro‐
           file to profile-file, or to stdout if no profile-file or  if
           `-' is given.  E.g.
              sox speech.wav -n trim 0 1.5 noiseprof speech.noise-profil
           To  actually remove the noise, run SoX again, this time with
           the noisered effect; noisered will reduce noise according to
           a  noise  profile  (which  was generated by noiseprof), from
           profile-file, or from stdin if no profile-file or if `-'  is
           given.  E.g.
              sox speech.wav cleaned.wav noisered speech.noise-profile 0
           How  much  noise  should be removed is specified by amount-a
           number between 0 and 1 with a default of 0.5.   Higher  num‐
           bers will remove more noise but present a greater likelihood
           of removing wanted components of the audio  signal.   Before
           replacing  an  original  recording with a noise-reduced ver‐
           sion, experiment with different amount values  to  find  the
           optimal one for your audio; use headphones to check that you
           are happy with the results, paying particular  attention  to
           quieter sections of the audio.

           On  most systems, the two stages - profiling and reduction -
           can be combined using a pipe, e.g.
              sox noisy.wav -n trim 0 1 noiseprof | play noisy.wav noise
           [...]
Volker Siegel
fuente
77
Desafortunadamente, encuentro que la descripción que los sox usan en la página de manual es muy ruidosa para leer. ¿No hay una manera mucho más simple, con solo un comando para hacer malabares con la reducción de ruido?
shevy
Claro, no hay problema, solo escriba en una oración simple lo que desea cambiar, pero lo suficientemente preciso como para ser técnicamente claro ... Ok, eso no funcionará así porque necesita comprender qué es el ruido y cuál de las partes de el ruido que desea eliminar, que puede reducir, y lo que puede reducir la calidad del sonido, de lo contrario, reducir el ruido. Para hacer malabares con la reducción de ruido, debe conocer sus clubes de malabarismo: los tipos de ruido para hacer malabares y cómo se pueden equilibrar cuando colisionan en el aire. Entonces, ¡sox es tu caja de herramientas y botiquín de primeros auxilios!
Volker Siegel
12

La respuesta aceptada no da un ejemplo práctico (vea el primer comentario), así que estoy tratando de dar una aquí. En Ubuntu con apt, debe instalar soxy admitir formatos de audio

sox

Primera instalación soxy soporte para formatos (incluido mp3):

sudo apt install sox libsox-fmt-*

Luego, antes de ejecutar su comando en el archivo / archivos primero debe crear un perfil, hacer una muestra de ruido, esta es la parte más importante que tiene que seleccionar el mejor momento cuando se produce el ruido, asegúrese de no tiene voz (o la música / señal que intenta mantener) en esta muestra:

ffmpeg -i source.mp3 -ss 00:00:18 -t 00:00:20 noisesample.wav

Ahora haga un perfil de esa fuente:

sox noisesample.wav -n noiseprof noise_profile_file

Y finalmente ejecuta la reducción de ruido en el archivo:

sox source.mp3 output.mp3 noisered noise_profile_file 0.31

¿Dónde noise_profile_fileestá el perfil y 0.30el valor? Los valores van mejor en algún lugar entre 0,20 y 0,30, más de 0,3 es muy agresivo, menos de 0,20 es algo suave y funciona bien para audios muy ruidosos.

Intente jugar con eso y si encuentra otros trucos de configuración y comente con los hallazgos y la configuración de ajuste.

cómo procesarlos por lotes

Si el ruido es similar, puede usar el mismo perfil para todos los mp3

ls -r -1 *.mp3 | xargs -L1 -I{} sox {}  {}_noise_reduced.mp3  noisered noise_profile_file 0.31

o si hay una estructura de carpetas:

tree -fai . | grep -P ".mp3$" | xargs -L1 -I{} sox {}  {}_noise_reduced.mp3  noisered noise_profile_file 0.31
Eduard Florinescu
fuente
1
si es audio hablado y los canales separados de izquierda a derecha no son necesarios, entonces puede agregar remix -una mezcla de todos los canales de entrada a mono
Jake Berger
2
@EduardFlorinescu Su respuesta es acertada. Tuve una grabación de ruido estático en el fondo de cada grabación. Leí tu respuesta y usé los primeros 2 segundos de mi archivo de sonido para crear un perfil y finalmente lo usé para eliminar el ruido de la grabación. Muchas gracias por esto.
Abrar Hossain