Limpando gravações de voz na linha de comando?

28

Eu usei o Audacity para remover o ruído das gravações antes, no entanto, o uso da linha de comando é muito limitado. Tenho ~ 100 vídeos de palestras curtas que 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?

Annan
fonte

Respostas:

17

Dê uma olhada sox

Citação 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).

Portanto, deve ser um bom ajuste como alternativa de linha de comando complementar ao audaciy!


Em relação à tarefa real de limpar gravações, dê uma olhada no filtro noiseredpara 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
           [...]
Volker Siegel
fonte
7
Infelizmente, acho a descrição que o sox usa na página de manual muito barulhenta para ler - trocadilhos. Não existe uma maneira muito mais simples, com apenas um comando para manipular com redução de ruído?
shevy
Claro, não há problema - basta escrever em uma frase simples o que você deseja alterar - mas preciso o suficiente para ser tecnicamente claro ... Ok, isso não funcionará assim porque você precisa entender o que é ruído e qual das partes do o ruído que você deseja remover, o que você pode reduzir e o que pode reduzir a qualidade do som, caso contrário, reduzindo o ruído. Para lidar com a redução de ruído, você precisa conhecer seus clubes de malabarismo - os tipos de ruído a fazer malabarismos e como eles podem ser equilibrados quando colidem no ar. Então, sox é sua caixa de ferramentas e kit de primeiros socorros!
Volker Siegel
12

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

sox

Primeiro instale soxe suporte para formatos (incluindo mp3):

sudo apt install sox libsox-fmt-*

Antes de executar seu comando no (s) arquivo (s) primeiro (s), você precisa criar um perfil, fazer uma amostra do ruído, esta é a parte mais importante para selecionar o melhor horário em que o ruído ocorrer, certifique-se de não tenha voz (ou a música / sinal que você tenta manter) neste exemplo:

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

Agora faça 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

Onde noise_profile_fileestá o perfil e 0.30o valor. Os valores variam melhor entre 0,20 e 0,30, acima de 0,3 é muito agressivo, abaixo de 0,20 é suave e funciona bem para áudios muito barulhentos.

Tente brincar com isso e se você encontrar outros truques de configuração e comente com as descobertas e configurações de ajuste.

como processá-los em lote

Se o ruído for 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
Eduard Florinescu
fonte
1
se o áudio falado e os canais esquerdo-direito separados forem desnecessários, você poderá anexar remix -a mixagem de todos os canais de entrada para mono
Jake Berger
2
@EduardFlorinescu Sua resposta está no local. Eu tinha uma gravação de ruído estático no fundo de cada gravação. Eu li sua resposta e, usei os primeiros 2 segundos do meu arquivo de som para criar um perfil e, finalmente, usei-o para remover o ruído da gravação. Muito obrigado por isso.
Abrar Hossain