﻿﻿{"id":2349,"date":"2026-02-17T10:25:00","date_gmt":"2026-02-17T09:25:00","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/ffmpeg-comment-normaliser-le-volume-audio-proprement-avec-loudnorm\/"},"modified":"2026-02-17T10:25:00","modified_gmt":"2026-02-17T09:25:00","slug":"ffmpeg-comment-normaliser-le-volume-audio-proprement-avec-loudnorm","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/ffmpeg-comment-normaliser-le-volume-audio-proprement-avec-loudnorm\/","title":{"rendered":"FFmpeg &#8211; Comment normaliser le volume audio proprement avec loudnorm"},"content":{"rendered":"<p>Vous avez d\u00e9j\u00e0 remarqu\u00e9 comment le volume varie d&#8217;une vid\u00e9o \u00e0 l&#8217;autre sur YouTube, ou pire, comment certaines pubs sont 10 fois plus fortes que le contenu ? Bah c&#8217;est parce que tout le monde n&#8217;utilise pas la m\u00eame norme de volume. Et si vous produisez du contenu audio\/vid\u00e9o, c&#8217;est le genre de d\u00e9tail qui fait la diff\u00e9rence entre un truc amateur et un rendu pro.<\/p>\n<p>La bonne nouvelle, c&#8217;est que <strong>FFmpeg<\/strong> int\u00e8gre d\u00e9j\u00e0 un filtre qui s&#8217;appelle loudnorm et qui g\u00e8re tout \u00e7a automatiquement. La norme utilis\u00e9e, c&#8217;est le LUFS (Loudness Units Full Scale), qui est devenue le standard de l&#8217;industrie, et YouTube, Spotify, les TV&#8230; tout le monde utilise \u00e7a maintenant pour mesurer et normaliser le volume audio.<\/p>\n<p>D&#8217;ailleurs, si vous d\u00e9butez compl\u00e8tement avec cet outil, je vous conseille de jeter un \u0153il \u00e0 mon guide<br \/>\n<a href=\"https:\/\/korben.info\/ffmpeg-pour-les-nuls.html\">FFmpeg pour les nuls<\/a><br \/>\npour bien piger les bases de la ligne de commande.<\/p>\n<p>Allez, c&#8217;est partiii ! <strong>Temps estim\u00e9 :<\/strong> 2-5 minutes par fichier (selon la m\u00e9thode choisie)<\/p>\n<p>Mais, avant de se lancer dans les commandes, un petit point sur les param\u00e8tres qu&#8217;on va manipuler. Le filtre loudnorm utilise trois valeurs principales. D&#8217;abord I (Integrated loudness), c&#8217;est le volume moyen global mesur\u00e9 en LUFS. La valeur standard pour le streaming, c&#8217;est -16 LUFS pour YouTube et Spotify, ou -23 LUFS pour la diffusion broadcast. Ensuite TP (True Peak), le niveau maximal que le signal ne doit jamais d\u00e9passer. On met g\u00e9n\u00e9ralement -1.5 dB pour avoir une marge de s\u00e9curit\u00e9. Et enfin LRA (Loudness Range), qui d\u00e9finit la plage dynamique autoris\u00e9e, g\u00e9n\u00e9ralement autour de 11 dB.<\/p>\n<h2>M\u00e9thode 1 : Normalisation simple (single-pass)<\/h2>\n<p>C&#8217;est la m\u00e9thode la plus rapide, parfaite pour du traitement \u00e0 la vol\u00e9e :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">ffmpeg -i entree.wav -af loudnorm=I=-16:TP=-1.5:LRA=11 -ar 48000 sortie.wav\n<\/span><\/span><\/code><\/pre>\n<p><strong>Pourquoi ces valeurs :<\/strong> -16 LUFS c&#8217;est le standard YouTube\/Spotify, -1.5 dB de true peak \u00e9vite le clipping, et 11 dB de range dynamique garde un son naturel.<\/p>\n<p>Le truc c&#8217;est que cette m\u00e9thode fait une analyse en temps r\u00e9el et ajuste \u00e0 la vol\u00e9e. C&#8217;est bien, mais pas parfait. Pour un r\u00e9sultat vraiment pr\u00e9cis, y&#8217;a mieux.<\/p>\n<h2>M\u00e9thode 2 : Normalisation en deux passes (dual-pass)<\/h2>\n<p>Cette m\u00e9thode analyse d&#8217;abord le fichier complet, puis applique les corrections exactes. C&#8217;est plus long mais beaucoup plus pr\u00e9cis.<\/p>\n<p>Premi\u00e8re passe, on analyse :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">ffmpeg -i entree.wav -af loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json -f null -\n<\/span><\/span><\/code><\/pre>\n<p>FFmpeg va vous sortir un bloc JSON avec les mesures du fichier (input_i, input_tp, input_lra, input_thresh). Notez-les bien, car vous allez les injecter dans la deuxi\u00e8me passe.<\/p>\n<p>Deuxi\u00e8me passe, on applique avec les valeurs mesur\u00e9es (remplacez les chiffres par ceux obtenus \u00e0 l&#8217;\u00e9tape pr\u00e9c\u00e9dente) :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">ffmpeg -i entree.wav -af loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-24.35:measured_TP=-2.15:measured_LRA=8.54:measured_thresh=-35.21:offset=0:linear=true -ar 48000 sortie.wav\n<\/span><\/span><\/code><\/pre>\n<p><strong>Pourquoi cette m\u00e9thode ?<\/strong> En fait, en passant les valeurs mesur\u00e9es, FFmpeg sait exactement de combien ajuster. L&#8217;option linear=true force une normalisation lin\u00e9aire plut\u00f4t que dynamique, ce qui pr\u00e9serve mieux la dynamique originale.<\/p>\n<h2>Pour les fichiers vid\u00e9o<\/h2>\n<p>Le principe est le m\u00eame, on ajoute juste <code>-c:v copy<\/code> pour garder la vid\u00e9o intacte sans la r\u00e9-encoder :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">ffmpeg -i video.mp4 -c:v copy -af loudnorm=I=-16:TP=-1.5:LRA=11 -ar 48000 video_normalise.mp4\n<\/span><\/span><\/code><\/pre>\n<p>D&#8217;ailleurs, pour ceux qui veulent automatiser \u00e7a \u00e0 l&#8217;extr\u00eame, j&#8217;avais parl\u00e9 de<br \/>\n<a href=\"https:\/\/korben.info\/ffmpegfs-un-systeme-de-fichiers-qui-convertit-vos-videos-automatiquement.html\">FFmpegfs<\/a><br \/>\n, un syst\u00e8me de fichiers qui transcode automatiquement ce que vous d\u00e9posez dessus. C&#8217;est pratique si vous avez une grosse biblioth\u00e8que \u00e0 g\u00e9rer.<\/p>\n<h2>Traitement par lots avec ffmpeg-normalize<\/h2>\n<p>Si vous avez plein de fichiers \u00e0 traiter, y&#8217;a un outil Python qui automatise la m\u00e9thode dual-pass :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">pip install ffmpeg-normalize\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ffmpeg-normalize *.wav -o output_folder\/ -c:a pcm_s16le\n<\/span><\/span><\/code><\/pre>\n<p>Cet outil fait automatiquement les deux passes et supporte le traitement parall\u00e8le. Pratique pour normaliser une biblioth\u00e8que enti\u00e8re.<\/p>\n<h2>Et en cas de probl\u00e8me ?<\/h2>\n<p><strong>Erreur &#8220;No such filter: loudnorm&#8221;<\/strong> : Votre version de FFmpeg est trop ancienne (il faut la 3.1 minimum). Mettez \u00e0 jour votre binaire.<\/p>\n<p><strong>Le son est distordu apr\u00e8s normalisation<\/strong> : Le fichier source \u00e9tait probablement d\u00e9j\u00e0 satur\u00e9. Essayez de baisser le target (-18 LUFS au lieu de -16) ou augmentez le headroom du true peak (-2 dB au lieu de -1.5).<\/p>\n<p>Voil\u00e0, maintenant vous n&#8217;avez plus d&#8217;excuse pour avoir des niveaux audio qui varient dans tous les sens. Le LUFS c&#8217;est le standard, FFmpeg g\u00e8re \u00e7a nativement, et \u00e7a prend 30 secondes.<\/p>\n<p>Vos auditeurs vous remercieront.<\/p>\n<p>\n<a href=\"https:\/\/ffmpeg.org\/ffmpeg-filters.html#loudnorm\">Source<\/a>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Vous avez d\u00e9j\u00e0 remarqu\u00e9 comment le volume varie d&#8217;une vid\u00e9o \u00e0 l&#8217;autre sur YouTube, ou pire, comment certaines pubs sont 10 fois plus fortes que le contenu ? Bah c&#8217;est parce que tout le monde n&#8217;utilise pas la m\u00eame norme de volume. Et si vous produisez du contenu audio\/vid\u00e9o, c&#8217;est le genre de d\u00e9tail qui fait la diff\u00e9rence entre un truc amateur et un rendu pro. La bonne nouvelle, c&#8217;est que FFmpeg int\u00e8gre d\u00e9j\u00e0 un filtre qui s&#8217;appelle loudnorm et qui g\u00e8re tout \u00e7a automatiquement. La norme utilis\u00e9e, c&#8217;est le LUFS (Loudness Units Full Scale), qui est devenue le standard de l&#8217;industrie, et YouTube, Spotify, les TV&#8230; tout le monde utilise \u00e7a maintenant pour mesurer et normaliser le volume audio. D&#8217;ailleurs, si vous d\u00e9butez compl\u00e8tement avec cet outil, je vous conseille de jeter un \u0153il \u00e0 mon guide FFmpeg pour les nuls pour bien piger les bases de la ligne de commande. Allez, c&#8217;est partiii ! Temps estim\u00e9 : 2-5 minutes par fichier (selon la m\u00e9thode choisie) Mais, avant de se lancer dans les commandes, un petit point sur les param\u00e8tres qu&#8217;on va manipuler. Le filtre loudnorm utilise trois valeurs principales. D&#8217;abord I (Integrated loudness), c&#8217;est le volume moyen global mesur\u00e9 en LUFS. La valeur standard pour le streaming, c&#8217;est -16 LUFS pour YouTube et Spotify, ou -23 LUFS pour la diffusion broadcast. Ensuite TP (True Peak), le niveau maximal que le signal ne doit jamais d\u00e9passer. On met g\u00e9n\u00e9ralement -1.5 dB pour avoir une marge de s\u00e9curit\u00e9. Et enfin LRA (Loudness Range), qui d\u00e9finit la plage dynamique autoris\u00e9e, g\u00e9n\u00e9ralement autour de 11 dB. M\u00e9thode 1 : Normalisation simple (single-pass) C&#8217;est la m\u00e9thode la plus rapide, parfaite pour du traitement \u00e0 la vol\u00e9e : ffmpeg -i entree.wav -af loudnorm=I=-16:TP=-1.5:LRA=11 -ar 48000 sortie.wav Pourquoi ces valeurs : -16 LUFS c&#8217;est le standard YouTube\/Spotify, -1.5 dB de true peak \u00e9vite le clipping, et 11 dB de range dynamique garde un son naturel. Le truc c&#8217;est que cette m\u00e9thode fait une analyse en temps r\u00e9el et ajuste \u00e0 la vol\u00e9e. C&#8217;est bien, mais pas parfait. Pour un r\u00e9sultat vraiment pr\u00e9cis, y&#8217;a mieux. M\u00e9thode 2 : Normalisation en deux passes (dual-pass) Cette m\u00e9thode analyse d&#8217;abord le fichier complet, puis applique les corrections exactes. C&#8217;est plus long mais beaucoup plus pr\u00e9cis. Premi\u00e8re passe, on analyse : ffmpeg -i entree.wav -af loudnorm=I=-16:TP=-1.5:LRA=11:print_format=json -f null &#8211; FFmpeg va vous sortir un bloc JSON avec les mesures du fichier (input_i, input_tp, input_lra, input_thresh). Notez-les bien, car vous allez les injecter dans la deuxi\u00e8me passe. Deuxi\u00e8me passe, on applique avec les valeurs mesur\u00e9es (remplacez les chiffres par ceux obtenus \u00e0 l&#8217;\u00e9tape pr\u00e9c\u00e9dente) : ffmpeg -i entree.wav -af loudnorm=I=-16:TP=-1.5:LRA=11:measured_I=-24.35:measured_TP=-2.15:measured_LRA=8.54:measured_thresh=-35.21:offset=0:linear=true -ar 48000 sortie.wav Pourquoi cette m\u00e9thode ? En fait, en passant les valeurs mesur\u00e9es, FFmpeg sait exactement de combien ajuster. L&#8217;option linear=true force une normalisation lin\u00e9aire plut\u00f4t que dynamique, ce qui pr\u00e9serve mieux la dynamique originale. Pour les fichiers vid\u00e9o Le principe est le m\u00eame, on ajoute juste -c:v copy pour garder la vid\u00e9o intacte sans la r\u00e9-encoder : ffmpeg -i video.mp4 -c:v copy -af loudnorm=I=-16:TP=-1.5:LRA=11 -ar 48000 video_normalise.mp4 D&#8217;ailleurs, pour ceux qui veulent automatiser \u00e7a \u00e0 l&#8217;extr\u00eame, j&#8217;avais parl\u00e9 de FFmpegfs , un syst\u00e8me de fichiers qui transcode automatiquement ce que vous d\u00e9posez dessus. C&#8217;est pratique si vous avez une grosse biblioth\u00e8que \u00e0 g\u00e9rer. Traitement par lots avec ffmpeg-normalize Si vous avez plein de fichiers \u00e0 traiter, y&#8217;a un outil Python qui automatise la m\u00e9thode dual-pass : pip install ffmpeg-normalize ffmpeg-normalize *.wav -o output_folder\/ -c:a pcm_s16le Cet outil fait automatiquement les deux passes et supporte le traitement parall\u00e8le. Pratique pour normaliser une biblioth\u00e8que enti\u00e8re. Et en cas de probl\u00e8me ? Erreur &#8220;No such filter: loudnorm&#8221; : Votre version de FFmpeg est trop ancienne (il faut la 3.1 minimum). Mettez \u00e0 jour votre binaire. Le son est distordu apr\u00e8s normalisation : Le fichier source \u00e9tait probablement d\u00e9j\u00e0 satur\u00e9. Essayez de baisser le target (-18 LUFS au lieu de -16) ou augmentez le headroom du true peak (-2 dB au lieu de -1.5). Voil\u00e0, maintenant vous n&#8217;avez plus d&#8217;excuse pour avoir des niveaux audio qui varient dans tous les sens. Le LUFS c&#8217;est le standard, FFmpeg g\u00e8re \u00e7a nativement, et \u00e7a prend 30 secondes. Vos auditeurs vous remercieront. Source<\/p>\n","protected":false},"author":1,"featured_media":2350,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-2349","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=2349"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2349\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/2350"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=2349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}