Option 1 : Filtres de normalisation intégrés
Current ffmpeg possède deux filtres qui peuvent être directement utilisés pour la normalisation - bien qu'ils soient déjà assez avancés, ils n'appliquent donc pas simplement le gain pour atteindre un niveau de crête. Les voici :
-
loudnorm
: normalisation de l'intensité sonore selon la norme R128 de l'UER. Vous pouvez définir une cible de volume sonore intégrée, une cible de plage de volume sonore ou un pic réel maximum. Cette méthode est recommandée pour la publication d'audio et de vidéo et est utilisée par les diffuseurs du monde entier.
-
dynaudnorm
: normalisation “intelligente” du volume sonore sans écrêtage, qui applique la normalisation de façon dynamique sur les parties fenêtrées du fichier. Cela peut modifier les caractéristiques du son, et doit donc être appliqué avec prudence.
De plus, le filtre volume
peut être utilisé pour effectuer de simples réglages de volume. Voir l'entrée du wiki Manipulation du volume audio pour en savoir plus.
Le filtre loudnorm
peut être utilisé avec une seule passe, mais il est recommandé d'effectuer deux passes, ce qui permet une normalisation linéaire plus précise. C'est un peu difficile à automatiser. De plus, si vous souhaitez une normalisation “simple” basée sur le RMS ou la crête à 0 dBFS (ou toute autre cible), lisez ce qui suit.
Option 2 : Utiliser l'outil ffmpeg-normalize
J'ai créé un programme Python pour normaliser les fichiers média , disponible sur PyPi également . Il suffit de :
- télécharger ffmpeg (choisir un static build, version 3. 1 ou supérieure)
- mettre l'exécutable
ffmpeg
dans votre $PATH
en l'ajoutant, par exemple, dans /usr/local/bin
, ou ajouter son répertoire à $PATH
- exécuter
pip install ffmpeg-normalize
- utiliser
ffmpeg-normalize
Par exemple :
ffmpeg-normalize input.mp4 -o output.mp4 -c:a aac -b:a 192k
Ou, pour simplement normaliser par lots un certain nombre de fichiers audio et les écrire en WAV non compressé dans un dossier de sortie :
ffmpeg-normalize *.m4a -of /path/to/outputFolder -ext wav
L'outil prend en charge la norme R128 de l'UER (par défaut), RMS et peak. Consultez la page ffmpeg-normalize -h
pour plus d'options et la page README pour quelques exemples.
Il prend également en charge le réencodage avec d'autres encodeurs (par exemple, AAC ou MP3), ou la fusion automatique de l'audio dans la vidéo.
Option 3 : Normalisation manuelle de l'audio avec ffmpeg
Dans ffmpeg, vous pouvez utiliser le filtre volume
pour modifier le volume d'une piste. Assurez-vous que vous téléchargez une version récente du programme.
Ce guide est destiné à la normalisation des crêtes, c'est-à-dire qu'il fera en sorte que la partie la plus forte du fichier se situe à 0 dB au lieu de quelque chose de plus faible. Il existe également une normalisation basée sur le RMS qui tente de rendre le volume sonore moyen identique dans plusieurs fichiers. Pour ce faire, n'essayez pas de pousser le volume maximum à 0 dB, mais le volume moyen au niveau dB de votre choix (par exemple -26 dB).
Trouvez le gain à appliquer
Vous devez d'abord analyser le flux audio pour le volume maximum afin de voir si la normalisation serait même payante :
ffmpeg -i video.avi -af "volumedetect" -vn -sn -dn -f null /dev/null
Remplacer /dev/null
par NUL
sur Windows.
Les arguments -vn
, -sn
, et -dn
indiquent à ffmpeg d'ignorer les flux non audio pendant cette analyse. Cela accélère considérablement l'analyse.
Cela donnera quelque chose comme ce qui suit :
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] mean_volume: -16.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] max_volume: -5.0 dB
[Parsed_volumedetect_0 @ 0x7f8ba1c121a0] histogram_0db: 87861
Comme vous pouvez le voir, notre volume maximum est de -5,0 dB, ce qui nous permet d'appliquer un gain de 5 dB. Si vous obtenez une valeur de 0 dB, alors vous n'avez pas besoin de normaliser le son.
Appliquez le filtre de volume :
Maintenant, nous appliquons le filtre [ volume
(http://ffmpeg.org/ffmpeg-filters.html#volume)] à un fichier audio. Notez que l'application du filtre signifie que nous devrons réencoder le flux audio. Le codec que vous voulez pour l'audio dépend bien sûr du format d'origine. Voici quelques exemples :
Fichier audio simple: Encodez simplement le fichier avec le codec dont vous avez besoin :
Format AVI: Habituellement, il y a de l'audio MP3 avec de la vidéo qui vient dans un conteneur AVI :
Format MP4: Avec un conteneur MP4, vous trouverez généralement de l'audio AAC. Nous pouvons utiliser l'encodeur AAC intégré à ffmpeg.
Dans les exemples ci-dessus, le flux vidéo sera copié en utilisant le format -c:v copy
. S'il y a des sous-titres dans votre fichier d'entrée, ou plusieurs flux vidéo, utilisez l'option -map 0
avant le nom du fichier de sortie.