Ajouter une voix off IA à une vidéo avec FFmpeg
FFmpeg peut poser n’importe quel son sur n’importe quelle vidéo, mais ne fabrique pas de parole naturelle : son filtre facultatif flite sonne comme un robot, et la plupart des builds ne l’incluent pas. La méthode pratique tient en deux étapes : lire le script avec un moteur de synthèse vocale, puis laisser FFmpeg placer cet audio sur la vidéo.
Ce guide réalise la première étape hors ligne avec le moteur gratuit SuperClonica et donne les commandes FFmpeg pour la seconde. Nous avons exécuté chaque commande sur une vidéo de test : elles laissent le flux vidéo intact avec -c:v copy et se terminent en quelques secondes, même pour de longs clips.
Lire le script
Installez le moteur une fois avec python -m pip install superclonica-cpu ; il télécharge son modèle au premier lancement puis fonctionne hors ligne. Enregistrez la narration dans un fichier texte et lisez-la :
superclonica --text-file script.txt --voice M3 --lang fr --normalize --output voice.wav
Choisissez d’abord la voix sur sa page du catalogue, où une phrase de 30 à 100 caractères est lue gratuitement et sans compte. Chaque voix parle 31 langues ; changez --lang pour lire le même script en anglais, en espagnol ou en japonais. Le chinois n’est pas encore pris en charge.
Remplacer la piste audio
Pour un enregistrement d’écran ou un clip muet, prenez l’image de la vidéo et le son de la voix off :
ffmpeg -i video.mp4 -i voice.wav -map 0:v -map 1:a -c:v copy -c:a aac voiced.mp4
La vidéo garde sa durée complète ; si la voix est plus courte, la suite est silencieuse. N’ajoutez pas -shortest ici : avec la copie de flux, il peut bloquer ou couper l’image à la durée de la voix.
Mettre la voix sur la musique
Pour garder le son d’origine ou la musique sous la narration, baissez-les et mixez les deux :
ffmpeg -i video.mp4 -i voice.wav -filter_complex "[0:a]volume=0.25[music];[music][1:a]amix=inputs=2:duration=first:normalize=0[a]" -map 0:v -map "[a]" -c:v copy -c:a aac voiced.mp4
volume=0.25 met la musique au quart, duration=first garde la durée de la vidéo et normalize=0 empêche amix de diviser la voix par deux.
Baisser la musique seulement pendant la voix
Un compresseur sidechain baisse la musique quand la voix parle et la remonte dans les pauses, comme le ferait un monteur :
ffmpeg -i video.mp4 -i voice.wav -filter_complex "[1:a]asplit=2[v][key];[0:a][key]sidechaincompress=threshold=0.02:ratio=10:attack=20:release=400[music];[music][v]amix=inputs=2:duration=first:normalize=0[a]" -map 0:v -map "[a]" -c:v copy -c:a aac voiced.mp4
Augmentez ratio pour une baisse plus marquée et allongez release si la musique revient trop vite.
Placer plusieurs répliques au bon moment
Lisez chaque réplique dans son propre fichier, décalez chacune jusqu’à son moment en millisecondes et mixez-les toutes :
ffmpeg -i video.mp4 -i line1.wav -i line2.wav -filter_complex "[1:a]adelay=500:all=1[l1];[2:a]adelay=4000:all=1[l2];[0:a]volume=0.25[music];[music][l1][l2]amix=inputs=3:duration=first:normalize=0[a]" -map 0:v -map "[a]" -c:v copy -c:a aac voiced.mp4
Ici la première réplique commence à 0,5 s et la seconde à 4 s. Comme chaque réplique est un fichier distinct, une modification du script ne demande de relire qu’une réplique, pas toute la piste. Si vous avez déjà des sous-titres, notre guide SRT en voix construit la piste minutée pour vous.