Normaliser les musiques et vidéos
Reprise améliorée de l’article de 2019.
Toutes les musiques et vidéos ne sont pas enregistrées de la même manière, et les outils dits de « normalisation » se base exclusivement sur les crêtes. Mais les crêtes ne concernent qu’une ou quelques fréquences, et n’est pas en lien avec le volume global perçu.
Ainsi, il existe la notion de RMS (Root Mean Square), un algorithme de moyenne du volume sonore de chaque crête dans un fichier audio. Elle se mesure également en dB.
J’ai donc créé deux scripts, sur la base d’un programme écrit en Python, pour normaliser mes musiques et mes vidéos. Dans les deux cas, la version normalisée sera créée dans un sous-dossier normalized.
Normaliser les musiques
Pour se faire, on crée une version WAV de la musique normalisée, et on réencode en MP3 192kbps le morceau. Il n’y a de WAV que si le gain est probant.
#!/bin/bash
BASENAME= »${1##*/} »
DIRNAME=$(dirname « $1 »)
~/.local/bin/ffmpeg-normalize –verbose –level -10 –force –dir « $1 »
NORMALIZED=$DIRNAME/normalized/${BASENAME%.mp3}
if test -f « $NORMALIZED.wav »; then
ffmpeg -i « $NORMALIZED.wav » -b:a 192k -y « $NORMALIZED.mp3 »
rm « $NORMALIZED.wav »
rm « $1 »
cp -f « $NORMALIZED.mp3 » « $1 »
rm « $NORMALIZED.mp3 »
fi
Normaliser les vidéos
Pour normaliser une vidéo, on doit d’abord extraire l’audio, la normaliser et refusionner les deux éléments. Je repasse ainsi tous mes films et séries ! J’ai parfois des gains de plus de 12 dB !!!
#!/bin/bash
BASENAME= »${1##*/} »
DIRNAME=$(dirname « $1 »)
~/.local/bin/ffmpeg-normalize –verbose –level -10 –force –dir « $1 »
NORMALIZEDWAV=$DIRNAME/normalized/${BASENAME%.mp4}.wav
NORMALIZEDMP4=$DIRNAME/normalized/$BASENAME
rm « $1 »
cp « $NORMALIZEDMP4 » « $1 »
rm -r « $DIRNAME/normalized »
Aller plus loin : tester si besoin de normaliser
Nécessite ImageMagick.
- Faire une image de l’onde sonore : ffmpeg -i input -filter_complex « showwavespic,scale=128:128,crop=128:64:0:32 » -frames:v 1 image.jpg
- compter les pixels noirs : noirs=$(convert Upscales/tmp.jpg -threshold 1% -format %c histogram:info:- | grep black | cut -c5-8)
- Si l’on a trop de pixels noirs, on a une faible onde, donc on normalise ! [ « $noirs » -ge 6500 ] && ffmpeg-normalize input