Normalizando arquivos de áudio :P


Salve salve!!!

Outro dia, baixei uma coletânia de um programa muito engraçado que passava no rádio. Chama-se Dr. Pimpolho. É realmente ilário.

Só que havia um inconveniente. Cada mp3 estava num volume diferente e tals.
Então, procurei na internet uma maneira de fazer a “normalização” dos arquivos de áudio no linux, e encontrei uma dica legal que é o programa normalize-mp3, que é executado via linha de comando. Nele, você pode fazer o batch normalize, que é na realidade a normalização em massa de arquivos mp3. Ok … Ótimo… Mas ele não faz uma busca recursiva pelos arquivos.

Então, eu tinha que ficar entrando em diretório por diretório e executando o programa. Ou seja, tornou-se um saco devido ao grande número de músicas. (Eu resolvi normalizar todos os meus mp3 ok 😉 )

Então, meu chefe comentou assim comigo: “Mas porque você está fazendo isto? Faça um script que entre nos diretórios e rode o comando pra você uai! Você é um programador ou um saco de batata?!

Foi então que eu resolvi não ser um saco (kkkkk propaganda da uai 😛 ) e fiz um script Python para fazer isto pra mim 😉

Á principio foi difícil, porque muitos espaços no nome dos diretórios e eu não tava conseguindo pensar em uma maneira de contornar isto, pois os script tinha que entrar nos diretórios e normalizar as mp3. Como os diretórios tinham os espaços, o shell não reconhecia o comando por causa da “ \ “que ele coloca depois dos espaços.
Então, segui pensando e fiz a correção na nomenclatura dos diretórios. Depois peguei só os arquivos mp3 e concatenei o diretório normatizado ao nome do arquivo normatizado para que então, executasse o programa para normalizar a mp3, mas não em modo batch, porque não funfou :P, mas sim, passando o arquivo à ser normalizado para o programa.

Então ficou assim:

import os, sys
def searchFiles():	
    rootDir = '/media/Backup/Musicas/'	#Meu diretorio de musicas 😉
    listFiles = []
    for root, subFolders, files in os.walk(rootDir):
	for file in files:
            a = root
            a = a.replace(" ", "\ ")
            cmd = """cd %s""" %a
            os.system(cmd)
            if (file.split(".")[-1] == "mp3"):
                t = os.path.join(root.replace(" ", "\ "), file.replace(" ", "\ "))
		print "Arquivo mp3 %s" %t
                cmd = 'normalize-audio -m -v %s' %t
		print cmd
        	os.system(cmd)
searchFiles()

Então, use e abuse 😉 mas é necessário instalar o programa conforme descrito no post do vivaolinux

Abraços!

15 Respostas to “Normalizando arquivos de áudio :P”

  1. Rodrigo Rodrigues Says:

    Olá Fred!
    Tentei usar sua dica e achei algo estranho.
    Veja pelas 2 execuções abaixo (uma do seu script e outra do normalize-audio sozinho) as diferenças de análises: “Standard deviation” e “Applying adjustment of”. Na minha leiga interpretação, parece que seu script acaba não fazendo nada. Por favor esclareça-me.
    Grato!

    Arquivo mp3 /home/56804253353/Musica-IMMB-teste/Enya-Amarantine/Enya\ -\ 02\ -\ Amarantine.mp3
    normalize-audio -m -v /home/56804253353/Musica-IMMB-teste/Enya-Amarantine/Enya\ -\ 02\ -\ Amarantine.mp3
    Computing levels…
    Level for /home/56804253353/Musica-IMMB-teste/Enya-Amarantine/Enya – 02 – Amarantine.mp3: -8,6427dBFS (0,0000dBFS peak)
    Standard deviation is 0,00 dB
    Average level: -8,6427dBFS
    Applying adjustment of 0,00dB to /home/56804253353/Musica-IMMB-teste/Enya-Amarantine/Enya – 02 – Amarantine.mp3…
    Enya – 02 – Amara 100% done, ETA 00:00:00 (batch 100% done, ETA 00:00:00)
    Arquivo mp3 /home/56804253353/Musica-IMMB-teste/Enya-Amarantine/00\ -\ An\ American\ Trilogy.mp3
    normalize-audio -m -v /home/56804253353/Musica-IMMB-teste/Enya-Amarantine/00\ -\ An\ American\ Trilogy.mp3
    Computing levels…
    Level for /home/56804253353/Musica-IMMB-teste/Enya-Amarantine/00 – An American Trilogy.mp3: -10,7781dBFS (0,0000dBFS peak)
    Standard deviation is 0,00 dB
    Average level: -10,7781dBFS
    Applying adjustment of 0,00dB to /home/56804253353/Musica-IMMB-teste/Enya-Amarantine/00 – An American Trilogy.mp3…
    00 – An American 100% done, ETA 00:00:00 (batch 100% done, ETA 00:00:00)

    Agora usando o normalize-audio diretamente, com os 2 arquivos juntos na mesma pasta:

    Computing levels…
    Level for 00 – An American Trilogy.mp3: -10,7781dBFS (0,0000dBFS peak)
    Level for Enya – 02 – Amarantine.mp3: -8,6427dBFS (0,0000dBFS peak)
    Standard deviation is 1,07 dB
    Average level: -9,6450dBFS
    Applying adjustment of 1,13dB to 00 – An American Trilogy.mp3…
    00 – An American 100% done, ETA 00:00:00 (batch 56% done, ETA 00:00:00)
    Applying adjustment of -1,00dB to Enya – 02 – Amarantine.mp3…
    Enya – 02 – Amara 100% done, ETA 00:00:00 (batch 100% done, ETA 00:00:00)

    • Uai sô! Eu usei no meu e normalizou blz… Vou olhar se as vezes eu lerdei em alguma coisa aqui.
      Mas o script python que eu fiz foi só pra mudar pro diretório onde está a música e rodar o normalize, porque ele não faz a normalização recursivamente 😉
      Mas de qualquer forma, vou olhar e te falo 😛

      • Rodrigo Rodrigues Says:

        E então, percebeste a diferença entre as 2 formas de rodar, acima colocadas?
        Grato!

      • Então, rodei o normalize-audio e vi o que você mostrou. Realmente, quando roda pelo script ele não aplica as alterações aos arquivos não. Pelo menos é o que ele mostra na tela.

        Agora, como disse anteriormente, o estranho é que, o script somente entra no diretório e chama o programa, normalize-audio -m -v passando as músicas encontradas em cada diretório como parâmetro. Não há porque ele não normalizar 😉

    • Fiz uma alteração nos parâmetros do normalize-audio. Agora acho que ta funfando…
      Abra o script e troque o -m por -b …

      Olha só:

      Standard deviation is 0,00 dB
      Average level: -10,8291dBFS
      Applying adjustment of -1,17dB…
      3 – Comunhão – c 100% done, ETA 00:00:00 (batch 100% done, ETA 00:00:00)
      Arquivo mp3 /home/fred/Dropbox/Liturgia/Solenidade\ São\ Pedro\ e\ São\ Paulo\ -\ Tempo\ Comum\ ANO\ C/1\ -\ Entrada\ -\ canta_meu_povo_canta.mp3
      normalize-audio -b -v /home/fred/Dropbox/Liturgia/Solenidade\ São\ Pedro\ e\ São\ Paulo\ -\ Tempo\ Comum\ ANO\ C/1\ -\ Entrada\ -\ canta_meu_povo_canta.mp3
      Computing levels…
      Level for /home/fred/Dropbox/Liturgia/Solenidade São Pedro e São Paulo – Tempo Comum ANO C/1 – Entrada – canta_meu_povo_canta.mp3: -11,0936dBFS (0,0000dBFS peak)
      Standard deviation is 0,00 dB
      Average level: -11,0936dBFS
      Applying adjustment of -0,91dB…
      1 – Entrada – can 100% done, ETA 00:00:00 (batch 100% done, ETA 00:00:00)

      • Rodrigo Rodrigues Says:

        OK Fred! Parece que melhorou. Pelo menos algum ajuste está sendo aplicado.
        Contudo, comparando os resultados acima continua diferente dos ajustes aplicados quando os arquivos estão na mesma pasta. A saída do normalize neste modo (com arquivos na mesma pasta), parece ser mais lógica: primeiro ele computa os níveis de todos os arquivos, depois vê o desvio padrão entre eles (que é diferente de zero) e, então, aplica os ajustes necessários a todos eles. No seu script, o desvio é sempre zero, pois, aparentemente, ele não compara os vários arquivos em conjunto já que cada música, individualmente, é passada como parâmetro ao normalize-audio, logo, é lógico que não haja com o que compará-la (só há uma música como parâmetro).
        Grato!

      • Opa!

        Então, acho que é aí que está o pulo do gato 😉
        Vou alterar o script para que ao invés de ele normalizar a música sozinha, ele normalize *.mp3 por exemplo 😉

        Vou fazer e te falo o que que deu aqui!
        Inté!

      • Por acaso você não é o Rodrigo Rodrigues do graffitte não né !! xD kkkk

        Abraços!

      • O Rodrigo, dei uma mexida no script.

        Baixa aí e me fala 😉

        http://www.4shared.com/file/ednxP3OZ/Normalizetar.html

  2. Rodrigo Rodrigues Says:

    Olá Fred!
    Não, não sou o Rodrigo do Graffitte. 😉
    Quanto ao normalize, está melhorando! Pelo output, vi que ele está computando os níveis de todos os arquivos de um dado subdir e então aplica os ajustes a todos os arquivos desse subdir. Perfeito, para cada subdir individualmente. Agora, se a intenção for normalizar todos os arquivos de um dado dir (creio ser a intenção principal), não importando quantos subdirs ele tenha, creio que o script ainda não está fazendo. É necessário que ele compute os níveis de todos os arquivos de todos os subdirs e então aplique os ajustes.
    Grato pelo esforço!
    []!

    • Opa!!

      Depois vou dar uma mexida Rodrigo, porque agora estou meio agarrado 😉 Mas assim que tiver uma resposta te falo. Vou ver também se encontro algo que faça o mesmo serviço do normalize em python pois acho que o normalize está limitando a utilização, uma vez que ele não mantém os níveis encontrados nas outras pastas. Assim, a normalização fica capenga né 😛

      Abraços!

      Fred Chevitarese – GNU/Linux https://chevitarese.wordpress.com

  3. Olá a todos.

    Não sei se ajuda, mas eu uso o easyMp3Gain, que é uma interface gráfica para o mp3Gain. Ele é muito bom. Ele analiza recursivamente ou por álbum. Vale a pena tentar. Tem como usá-lo pelo terminal, só não sei os parâmetros certos, pois somente uso pelo modo gráfico. Mas não é difícil descobrir. É só ler o manual. 😉

    Abraços.

    Augusto

  4. Pra que script ? é só fazer normalize-audio -m -v */*.mp3 que ele buscará os arquivos nas pastas

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: