53 votes

Comment normaliser le son dans les fichiers mp3

Je cherche un moyen de normaliser le son dans de NOMBREUX fichiers MP3 que je possède. Certains ont un son faible, tandis que d'autres sont plus forts, de sorte que je dois augmenter ou diminuer le volume en fonction de la chanson. Quels sont les moyens de le faire pour tous les fichiers ? J'aimerais surtout le faire via le terminal, mais les interfaces graphiques sont également acceptées.

1voto

erwan Points 31

Cela aura pour effet de récursivement ffmpeg-normalize tous .mp3 dans toute la structure des sous-dossiers à la fréquence d'échantillonnage 240k

find -name "*.mp3" -exec ffmpeg-normalize {} -b:a libmp3lame -b>a 240k \;

(vous pouvez modifier cette valeur pour des taux plus élevés ou utiliser le gain au lieu de la normalisation avec la même synthèse. Quelqu'un ?)

0voto

Igor Stoppa Points 101

C'est la réponse de Neil qui m'a le plus plu, car elle n'introduit pas de corrélation entre les fichiers audio : il suffit de choisir un niveau de gain et de tout régler en fonction de ce niveau.

Cependant, j'ai eu quelques problèmes pour analyser la sortie de normalize-ogg avec quelques fichiers que j'ai. Il y a également un problème désagréable avec bc Il ne fait pas d'arrondi réel, il se contente de tronquer.

J'ai donc fini par abandonner les scripts Shell et je suis passé à Python.

Note1 : la partie exiftool est peut-être exagérée mais je voulais être sûr à 100% que le bitrate d'origine serait préservé.

Note2 : cette volonté écraser les originaux, si vous voulez les préserver, utilisez --backup dans le dernier appel à normalize-ogg. Mais j'ai trouvé plus pratique de garder une copie dans un répertoire séparé, plus sûr.

Note3 : cette solution concerne les fichiers ogg, mais il est trivial de l'adapter au mp3, il suffit de remplacer les occurrences de "ogg" par "mp3".

Voici mon point de vue sur le problème. La dernière version est disponible ici : regain.py

#!/usr/bin/python3
"""
Parallel normalize gains
"""
'
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
'

# Absolute value, in dB for the desired gain of each file
TARGET_GAIN = -12

# 
MAX_THREADS = 2

from subprocess import Popen, PIPE
from multiprocessing.dummy import Pool as ThreadPool
from os import listdir
import logging

def initlogger(logfile="log.log", mainlevel=logging.DEBUG,
               filelevel=logging.DEBUG, consolelevel=logging.DEBUG):
    '''initlogger'''
    # create logger 
    logger = logging.getLogger()
    logger.setLevel(mainlevel)
    # create file handler which logs even debug messages
    fh = logging.FileHandler(logfile)
    fh.setLevel(filelevel)
    # create console handler also logging at DEBUG level
    ch = logging.StreamHandler()
    ch.setLevel(consolelevel)
    # create formatter and add it to the handlers
    formatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s]  %(message)s")
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)
    # add the handlers to the logger
    logger.addHandler(fh)
    logger.addHandler(ch)

def logcommand(command=[]):
    '''logcommand'''
    if not isinstance(command, list):
        return "", "", -1
    logging.info("Command:\n" + " ".join(command) + "\n")
    proc = Popen(command, stdin=PIPE, stdout=PIPE, stderr=PIPE)
    output, err = proc.communicate()
    output = output.decode("utf-8")
    err = err.decode("utf-8")
    logging.info("Output:\n" + output + "\n")
    logging.info("Error:\n" + err + "\n")
    logging.info("Return Code:\n" + str(proc.returncode) + "\n")
    return output, err, proc.returncode

def regain(target):
    '''regain'''
    logging.info("============================ Start File  ============================")
    logging.warning(target["name"])
    logging.info("Extracting gain info.\n")
    commandgetlevels = ['normalize-ogg', '-n', target["name"]]
    output, err, retcode = logcommand(commandgetlevels)

    level  = output.split()[0]
    logging.debug("Level: " + level)
    if "dBFS" in level:
        level = level.split("dBFS")[0]
    level = level.replace(',', '.')
    level = int(round(float(level)))
    delta = target["gain"] - level
    logging.info("Required adjustment: " + str(delta) + "\n")
    if delta is 0:
        logging.warning(target["name"] + " is already at the correct level")
        return 0

    logging.info("Extracting average bitrate.\n")
    commandgetinfo = ['exiftool', target["name"]]
    output, err, retcode = logcommand(commandgetinfo)
    bitrate = '0'
    for line in output.split('\n'):
        if 'Nominal Bitrate' in line:
            bitrate = line.split(':')[1].split()[0]
            break
    logging.info("Average bitrate is: " + str(bitrate) + "\n")
    if bitrate is '0':
        logging.error("No valid bitrate found, aborting conversion.\n")
        exit(-1)

    logging.info("Re-normalizing.\n")
    commandrenormalize = ['normalize-ogg', '--ogg', '--bitrate', bitrate,
                          '-g', str(delta) + 'db', target["name"]]
    output, err, retcode = logcommand(commandrenormalize)
    if retcode is not 0:
        log.error("Output:\n" + output)
        log.error("err:\n" + err)
        exit(retcode)

    return retcode

# function to be mapped over
def parallelregain(gain=TARGET_GAIN, threads=MAX_THREADS):
    '''parallelregain'''
    logging.info("Creating thread pool with " + str(threads) + " elements.\n")
    pool = ThreadPool(threads)
    targets = []
    files_list = listdir(".")
    files_list.sort()
    counter = 0
    for filename in files_list:
        if filename.endswith("ogg"):
            target = {
                "name":filename,
                "gain":gain,
            }
            targets.append(target)
            counter = counter + 1
    pool.map(regain, targets)
    pool.close()
    pool.join()

if __name__ == "__main__":
    initlogger(logfile="normalize.log", consolelevel=logging.WARNING)
    parallelregain()

0voto

jrishaw Points 71

Sox

Si vous ne vous souciez pas des pertes de qualité vous pouvez utiliser sox en lot

for f in *.mp3; do
  sox --norm "$f" /tmp/sox.mp3;
  mv -v /tmp/sox.mp3 "$f";
done

Mais ce n'est pas parfait, cela réencode tous les fichiers et il n'y a aucun moyen de dire à Sox d'utiliser le bitrate le plus élevé possible.

mp3gain

Depuis que mp3gain a été retiré des dépôts debian, installez-le simplement avec

mkdir mp3gain;
cd mp3gain;
wget https://launchpad.net/ubuntu/+archive/primary/+sourcefiles/mp3gain/1.5.2-r2-6/mp3gain_1.5.2-r2.orig.tar.gz; tar -xvzf mp3gain_1.5.2-r2.orig.tar.gz;
make;
sudo make install

Les modifications apportées par mp3gain sont sans aucune perte. Il y a aucune perte de qualité dans le changement car le programme ajuste le fichier mp3 directement, sans décodage et réencodage.

Utiliser sur tous les fichiers du dossier en cours avec :

mp3gain -r *.mp3

LoudGain

Il semble que ce soit l'outil idéal : https://github.com/Moonbase59/loudgain

Il utilise le célèbre mp3gain mais ne modifiera jamais les données audio réelles. Tout ce que vous avez toujours voulu : Le meilleur de mp3gain, ReplayGain 2.0 et Linux combinés.

Il réduit le gain à -1 dBTP (au lieu de 0 dBTP, selon la recommandation de l'UER). Il s'agit presque d'une marge de sécurité dans le cas où la route de diffusion ultérieure comprend "seulement" ReplayGain, mais n'a pas de prévention de l'écrêtage.

Installer LoudGain (en utilisant Homebrew) :

wget https://raw.githubusercontent.com/Homebrew/install/master/install.sh
# first check what you get before install ;)
less install.sh
# press q and then install homebrew with:
/bin/bash -c install.sh
brew install Moonbase59/tap/loudgain

appliquer sur le dossier

utilisation recommandée pour numériser et étiqueter un album MP3 :

loudgain -I3 -S -L -a -k -s e *.mp3

Pour d'autres formats, voir https://github.com/Moonbase59/loudgain/blob/master/docs/loudgain.1.md#recommendations

accélère l'unité centrale pendant le traitement

Si vous avez un ordinateur portable avec intel >=8th gen. et que vous voulez l'utiliser sans être brûlé, désactiver le turbo-boost tout en traitant plusieurs fichiers en arrière-plan ;)

0voto

George Law Points 1

Une autre option pour mp3gain - je viens de l'utiliser pour installer mp3gain sur mon ordinateur Ubuntu 20.20 et il lit la bibliothèque à l'heure où j'écris.

git clone https://github.com/Sound-Linux-More/mp3gain.git
cd mp3gain/
sudo apt-get install libmpg123-dev
make
sudo make install

0voto

slm Points 2598

のことです。 normalize Le nom de CLI a été modifié il y a quelque temps pour devenir normalize-audio . Il est disponible dans le paquet normalize-audio sur Debian/Ubuntu.

$ dpkg-query -S /usr/bin/normalize-audio
normalize-audio: /usr/bin/normalize-audio

normalize-audio peut gérer à la fois les MP3, OGG et FLAC, il suffit d'utiliser l'interface de commande frontale (CLI) normalize-audio .

NOTE : Il peut gérer à la fois ce qu'il appelle un mode mixte et un mode par lots.

MIX MODE
       This  mode  is made especially for making mixed CD's and the like.  
       You want every song on the mix to be the same volume, but it 
       doesn't matter if they are the same volume as the songs on some 
       other mix you made last week. In mix mode, average level of all the 
       files  is  computed,  and  each file is separately normalized to 
       this average volume.

BATCH MODE
       When  operating on a group of unrelated files, you usually want all 
       of them at the same level, and this is the default behavior.  
       However, a group of music files all from the same album is 
       generally meant to be listened to at the relative volumes they were 
       recorded at.  In batch mode, all the specified  files  are  
       considered to be part of a single album and their relative volumes 
       are preserved.  This is done by averaging the volumes of all the 
       files, computing a single adjustment from that, and applying the 
       same adjustment to all the files.  Some analysis is  also  done  
       so  that files  with  volumes that appear to be statistical 
       aberrations are not considered in the average.  This is useful if 
       you have albums (like many of the author's) in which there is one 
       "quiet song" that throws off the average.

Pour les CD de mixage contenant des pistes provenant de diverses sources, j'utilise généralement le MODE MIX.

Exemple

Vous pouvez l'exécuter avec la commande -n qui est en fait un mode d'essai où il vous dira ce qui sera fait sans manipuler vos fichiers.

$ normalize-audio -m -n *.mp3
Computing levels...
  level        peak         gain
-6.7043dBFS  0.0000dBFS   -3.1662dB  01 - Danny Phantom theme.mp3
-6.9161dBFS  0.0000dBFS   -2.9544dB  02 - Way Less Sad - AJR.mp3
-10.8860dBFS 0.0000dBFS   1.0154dB   03 - Ghost - Telehope.mp3
-10.5776dBFS 0.0000dBFS   0.7070dB   04 - Another One of Those Days - Cavetown.mp3
-7.0341dBFS  0.0000dBFS   -2.8365dB  05 - 100 Years - OR3O.mp3
-10.5194dBFS -0.0252dBFS  0.6488dB   06 - Paul - Cavetown.mp3
-12.3048dBFS -0.5617dBFS  2.4343dB   07 - Sharpener's Calling Me Again (feat. Kina) - Cavetown.mp3
-7.7725dBFS  0.0000dBFS   -2.0981dB  08 - Meet Me in the Woods - Lord Huron.mp3
-10.4332dBFS 0.0000dBFS   0.5626dB   09 - World Burn - Mean Girls (covered by Annapantsu).mp3
-9.3893dBFS  0.0000dBFS   -0.4812dB  10 - What I Know Now - Leslie Kritzer, Beetlejuice Original Broadway Cast Recording Ensemble.mp3
-11.7401dBFS -0.6264dBFS  1.8695dB   11 - We're Through - The Hollies.mp3
-14.9380dBFS -1.4977dBFS  5.0674dB   12 - Catch You Catch Me - Cardcaptor Sakura.mp3
-16.2943dBFS 0.0000dBFS   6.4237dB   13 - I Don't Dance - High School Musical 2.mp3
-8.5112dBFS  0.0000dBFS   -1.3594dB  14 - Everything Moves - Bronze Radio Return.mp3
-8.3120dBFS  0.0000dBFS   -1.5586dB  15 - Shut It Down - Patent Pending.mp3
-25.5607dBFS -14.0065dBFS 15.6901dB  16 - 1 • 2 • 3 Pokemon Journeys OP - After the Rain.mp3
-11.3168dBFS 0.0000dBFS   1.4462dB   17 - Candle Queen - GHOST & Silverchordmusic (feat. Gumi English).mp3
-7.6292dBFS  0.0000dBFS   -2.2413dB  18 - World's Smallest Violin - AJR.mp3
-7.4818dBFS  0.0000dBFS   -2.3888dB  19 - Karma - OR3O.mp3
-8.5264dBFS  0.0000dBFS   -1.3441dB  20 - Three-Thirty - AJR.mp3
-7.0809dBFS  0.0000dBFS   -2.7897dB  21 - 3 O’Clock Things - AJR.mp3
-9.2129dBFS  0.0000dBFS   -0.6577dB  22 - All Eyes On Me - OR3O.mp3
-9.7747dBFS  0.0000dBFS   -0.0959dB  23 - Railroad Wrath - Cuphead OST.mp3
-11.8156dBFS 0.0000dBFS   1.9451dB   24 - 004 Fallen Down - Toby Fox.mp3
-13.4141dBFS 0.0000dBFS   3.5435dB   25 - 022 Snowdin Town - Toby Fox.mp3
-10.5288dBFS 0.0000dBFS   0.6582dB   26 - 014 Heartache - Toby Fox.mp3
-16.3542dBFS -5.1780dBFS  6.4836dB   27 - 033 Quiet Water - Toby Fox.mp3
-11.3877dBFS 0.0000dBFS   1.5172dB   28 - 063 It's Raining Somewhere Else - Toby Fox.mp3
-9.8706dBFS  average level

Pour ce faire, il faut utiliser la fonction -n de l'interrupteur.

$ normalize-audio -m *.mp3
Computing levels...
 28 - 063 It's Rai  99% done, ETA 00:00:00 (batch 100% done, ETA 00:00:00)
Applying adjustment of -3.17dB to 01 - Danny Phantom theme.mp3...
 01 - Danny Phanto 100% done, ETA 00:00:00 (batch   1% done, ETA 00:00:00)
Applying adjustment of -2.95dB to 02 - Way Less Sad - AJR.mp3...
 02 - Way Less Sad 100% done, ETA 00:00:00 (batch   6% done, ETA 00:00:00)
Applying adjustment of 1.02dB to 03 - Ghost - Telehope.mp3...
 03 - Ghost - Tele 100% done, ETA 00:00:00 (batch   9% done, ETA 00:00:00)
Applying adjustment of 0.71dB to 04 - Another One of Those Days - Cavetown.mp3...
 04 - Another One  100% done, ETA 00:00:00 (batch  15% done, ETA 00:00:00)
...
...
Applying adjustment of 3.54dB to 25 - 022 Snowdin Town - Toby Fox.mp3...
 25 - 022 Snowdin  100% done, ETA 00:00:00 (batch  93% done, ETA 00:00:00)
Applying adjustment of 0.66dB to 26 - 014 Heartache - Toby Fox.mp3...
 26 - 014 Heartach 100% done, ETA 00:00:00 (batch  96% done, ETA 00:00:00)
Applying adjustment of 6.48dB to 27 - 033 Quiet Water - Toby Fox.mp3...
 27 - 033 Quiet Wa 100% done, ETA 00:00:00 (batch  96% done, ETA 00:00:00)
Applying adjustment of 1.52dB to 28 - 063 It's Raining Somewhere Else - Toby Fox.mp3...
 28 - 063 It's Rai 100% done, ETA 00:00:00 (batch 100% done, ETA 00:00:00)

NOTE : A utiliser avec précaution, car il écrasera vos fichiers existants. Si vous souhaitez préserver les fichiers originaux, vous pouvez simplement les dupliquer et travailler à partir des copies.

Autres scripts inclus

Si vous voulez garder plus de contrôle sur votre conversion, vous pouvez choisir d'utiliser l'un des deux autres scripts inclus, normalize-mp3 o normalize-ogg .

$ dpkg -L normalize-audio | grep /usr/bin/no
/usr/bin/normalize-audio
/usr/bin/normalize-mp3
/usr/bin/normalize-ogg

L'utilisation de la normalize-mp3 script par exemple, vous pouvez spécifier de sauvegarder les originaux avant de les normaliser :

$ normalize-mp3 -m --backup *.mp3
Decoding 01 - Danny Phantom theme.mp3...
Decoding 02 - Way Less Sad - AJR.mp3...
Decoding 03 - Ghost - Telehope.mp3...
...
...
Decoding 27 - 033 Quiet Water - Toby Fox.mp3...
Decoding 28 - 063 It's Raining Somewhere Else - Toby Fox.mp3...
Running normalize...
Re-encoding 01 - Danny Phantom theme.mp3...
Re-encoding 02 - Way Less Sad - AJR.mp3...
Re-encoding 03 - Ghost - Telehope.mp3...
Re-encoding 04 - Another One of Those Days - Cavetown.mp3...
...
...
Re-encoding 26 - 014 Heartache - Toby Fox.mp3...
Re-encoding 27 - 033 Quiet Water - Toby Fox.mp3...
Re-encoding 28 - 063 It's Raining Somewhere Else - Toby Fox.mp3...

Ici, vous pouvez voir les fichiers sauvegardés avec un ~ ajouté à leur nom :

$ ls -l | head -7
total 220212
-rw-r--r-- 1 root users  897453 Apr  3 21:52 01 - Danny Phantom theme.mp3
-rw-r--r-- 1 root users 1711341 Apr  3 21:42 01 - Danny Phantom theme.mp3~
-rw-r--r-- 1 root users 3327405 Apr  3 21:52 02 - Way Less Sad - AJR.mp3
-rw-r--r-- 1 root users 6534189 Apr  3 21:42 02 - Way Less Sad - AJR.mp3~
-rw-r--r-- 1 root users 2944941 Apr  3 21:52 03 - Ghost - Telehope.mp3
-rw-r--r-- 1 root users 5572365 Apr  3 21:42 03 - Ghost - Telehope.mp3~

NOTE : Pour utiliser ces scripts, vous devrez vous assurer d'avoir mpg123 , oggenc , oggdec , & flac installé pour réencoder des fichiers MP3, OGG ou FLAC.

Vous pouvez procéder de la manière suivante :

$ apt install mpg123 vorbis-tools flac

Références

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X