Ffmpeg : l'audio mixé est joué de plus en plus fort, comment définir une intensité constante ?

a marqué ce sujet comme résolu.

Salut !

Je possède ces éléments :

  • Une vidéo (my_video_with_music.webm)
  • Trois sons (tmp_music/forest_15s.wav, tmp_music/forest2_15s.wav et tmp_music/creak_15s.wav)
  • Une musique de fond (tmp_music/original_music.mp3)

Je mélange tous ces éléments en deux étapes. Tout d’abord, je mixe la vidéo avec la musique de fond. Ensuite, je mixe le résultat avec les sons.

Mon problème est que la vidéo résultant de ce mixage (avec la musique et les sons) augmente en volume le long de la vidéo. Au début, ce n’est pas très fort. À la fin de la vidéo, ça l’est. Je ne sais pas pourquoi. Je voudrais avoir un volume sonore constant (pas trop fort, pas trop faible).

Comment puis-je y arriver ? Notez que le volume sonore des fichiers musicaux et des sons originaux n’augmente pas : ils ont eux-mêmes une intensité constante. C’est donc en fait FFMPEG qui l’augmente lorsqu’on les mélange avec la vidéo.

Sources

Mélanger la musique de fond avec la vidéo (cette commande ne déclenche pas le bug) :

C:/Users/x/Downloads/ffmpeg/bin/ffmpeg.exe -i my_video.webm -stream_loop -1 -i tmp_music/original_music.mp3 -c:v copy -short -fflags +short -max_interleave_delta 100M my_video_with_music.webm

Rajouter les sons (c’est cette commande qui déclenche le bug) :

C:/Users/x/Downloads/ffmpeg/bin/ffmpeg.exe -i my_video_with_music.webm -i tmp_music/forest_15s.wav -i tmp_music/creak_15s.wav -i tmp_music/forest2_15s. wav -filter_complex [1]adelay=7000|7000[a1];[1]adelay=37000|37000[a2];[1]adelay=88000|88000[a3];[2]adelay=118000|118000[a4];[0][a1][a2][a3][a4]amix=5 -c:v copy my_video_with_music_with_songs.webm

Merci d’avance !

+0 -0

Hello @Eskimon,

Sur la deuxieme commande tu comprends ce à quoi servent les différents paramètres ?

Eskimon
  • -i: on annonce un fichier d’entrée

  • -filter_complex: on annonce un filtre

  • -c:v copy: on définit le codec vidéo en disant qu’on souhaite juste copier la sortie du filtre dans my_video_with_music_with_songs.webm et ainsi avoir exactement la même qualité (le même bitrate, j’sais pas ce que ça veut dire)

  • Dans le filtre complexe (oui j’y reviens seulement maintenant par souci de lisibilité) : [1], [2], [0] font respectivement référence aux inputs tmp_music/forest_15s.wav, tmp_music/creak_15s.wav, my_video_with_music.webm[1]adelay=7000|7000[a1] signifie qu’on retarde l’apparition du fichier audio [1] de 7 secondes dans les deux flux audio (y en a deux vu qu’on est sur du sterero) et qu’on nomme l’output de cette opération "[a1]" … [0][a1][a2][a3][a4]amix=5 signifie qu’on mixe tous ces résultats des opérations similaires, ainsi que la vidéo : on obtient donc une vidéo avec les audio mixés nommée 5.

Voilà donc je pense comprendre à peu près oui, mais je vois toujours pas pourquoi le son diminue :(

Edit : est-ce que mon pb ne serait pas lié à https://stackoverflow.com/questions/35509147/ffmpeg-amix-filter-volume-issue-with-inputs-of-different-duration ?

+0 -0

Bon alors j’ai trouvé, je crois que amix augmente le volume à chaque fois qu’un audio a fini d’être joué par défaut, car à chaque frame audio, ça rescale le volume de chaque input de type audio par "1/nombre d’inputs audio non-joués".

Ma solution est de rajouter :duration=first:dropout_transition=1000000 à amix. Je dis que le délai de transition audio correspond à la durée du premier input, mais je surcharge ça par 1000000ms. Bon c’est un peu chelou je pense que je comprends pas trop :duration= car c’est bizarre de surcharger ça…

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte