Mise à jour : récemment, FFmpeg a ajouté afftdn
qui utilise la méthode du seuil de bruit par FFT-bin décrite ci-dessous, avec diverses options pour adapter / déterminer des valeurs de seuil appropriées en temps réel.
anlmdn
(moyennes non locales) est une technique qui fonctionne bien pour la vidéo; je n'ai pas essayé le filtre audio.
L'un ou l'autre de ceux-ci devrait être beaucoup mieux que le passe-haut / passe-bas, à moins que votre seule source de bruit soit un bourdonnement à 60 Hz ou quelque chose du genre. (La parole humaine peut quand même sonner correctement dans une bande passante assez étroite, mais il y a beaucoup de meilleures façons de nettoyer un bourdonnement de fond à large bande.)
ffmpeg n'a aucun filtre audio décent pour la réduction du bruit intégré. Audacity a un filtre de réduction de bruit assez efficace, mais il est conçu pour être utilisé en opération à 2 passes avec un échantillon juste du bruit, puis l'entrée.
Les commentaires en haut de https://github.com/audacity/audacity/blob/master/src/effects/NoiseReduction.cpp expliquent comment cela fonctionne. (en gros : supprimer chaque bin FFT qui est en dessous du seuil. Donc il laisse passer les signaux uniquement quand ils sont plus forts que le plancher de bruit dans cette bande de fréquence. Cela peut faire des choses étonnantes sans causer de problèmes. C'est comme un filtre passe-bande qui s'adapte au signal. Comme l'énergie du bruit est répartie sur tout le spectre, ne laisser passer que quelques bandes étroites le réduira énormément l'énergie totale du bruit.
Voir aussi Réduction du bruit audio : comment audacity se compare à d'autres options ? pour plus de détails sur son fonctionnement, et que le seuillage des bins FFT d'une manière ou d'une autre est à la base des filtres de réduction de bruit commerciaux typiques, aussi.
Porter ce filtre à ffmpeg serait un peu maladroit. Peut-être qu'en l'implémentant comme un filtre avec 2 entrées, au lieu d'un filtre à 2 passes, fonctionnerait le mieux. Comme il a juste besoin de quelques secondes pour obtenir un profil de bruit, ce n'est pas comme s'il devait lire tout le fichier. Et vous NE DEVRIEZ PAS lui fournir le flux audio entier comme échantillon de bruit, de toute façon. Il doit voir un échantillon UNIQUEMENT du bruit pour définir les seuils pour chaque bin FFT.
Donc oui, une 2e entrée, plutôt que 2 passes, aurait du sens. Mais cela le rend beaucoup moins facile à utiliser que la plupart des filtres ffmpeg. Vous auriez besoin de beaucoup de magie avec la division de flux / extraction de plage de temps. Et bien sûr, vous avez besoin d'intervention manuelle, à moins d'avoir un échantillon de bruit dans un fichier séparé qui conviendra à plusieurs fichiers d'entrée. (un seul échantillon de bruit du même micro / setup devrait fonctionner pour tous les extraits de ce setup.)