Limpeza de gravações de voz pela linha de comando?

23

Eu usei o Audacity para remover o ruído das gravações anteriores, no entanto, ele tem uso de linha de comando muito limitado. Eu tenho ~ 100 vídeos curtos de palestras que eu assistirei nos próximos meses e gostaria de uma maneira fácil de limpá-los todos de uma vez ou conforme necessário antes de assistir.

Existe uma ferramenta de linha de comando ou uma biblioteca de idiomas popular que eu possa usar para fazer isso?

    
por Annan 02.07.2014 / 18:18

2 respostas

14

Dê uma olhada em 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).

Então, deve ser um bom ajuste como uma alternativa de linha de comando complementar à audácia!

Em relação à tarefa real de limpeza de gravações, dê uma olhada no filtro noisered para o qual é igual ao filtro de redução de ruído 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
           [...]
    
por 02.07.2014 / 18:48
8

A resposta aceita não dá um exemplo prático (veja o primeiro comentário), então estou tentando dar uma aqui. No Ubuntu com o apt você deve instalar o sox e os formatos de áudio suportados

sox , como

Primeiro, instale sox e suporte para formatos (incluindo mp3):

sudo apt install sox libsox-fmt-*

Então antes de você executar o comando no arquivo / arquivos, primeiro você precisa criar um perfil, fazer uma amostra de ruído, essa é a parte mais importante que você tem para selecionar o melhor momento em que o ruído ocorre, certifique-se não tem voz (ou a música / sinal que você tenta manter) neste exemplo:

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

Agora crie um perfil a partir dessa fonte:

sox noisesample.wav -n noiseprof noise_profile_file

E finalmente execute a redução de ruído no arquivo:

sox source.mp3 output.mp3 noisered noise_profile_file 0.31

Em que noise_profile_file é o perfil e 0.30 é o valor. Os valores são melhores em algum lugar entre 0,20 e 0,30, mais de 0,3 são muito agressivos, menos de 0,20 são mais suaves e funcionam bem para áudios muito barulhentos.

Experimente e brinque com isso e, se encontrar outros truques de configuração, comente as descobertas e as configurações de ajuste.

como processá-los em lote

Se o ruído é semelhante, você pode usar o mesmo perfil para todos os mp3s

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

ou se houver uma estrutura de pastas:

tree -fai . | grep -P ".mp3$" | xargs -L1 -I{} sox {}  {}_noise_reduced.mp3  noisered noise_profile_file 0.31
    
por 01.03.2018 / 01:17