Comment puis-je supprimer le silence d'un MP3 programmatically?

j'ai des fichiers MP3 qui ont parfois le silence à la fin. Je voudrais supprimer ce silence automatiquement. De ce que je peux dire, c'est le silence" parfait " (0 amplitude), pas le bruit de fond. La longueur du contenu et le silence varie.

j'ai trouvé quelques autres questions à propos de recadrage pour les 30 premières secondes de ou recadrage pour X et X+N secondes à l'aide ffmpeg . Je pense que je pourrais utiliser un similaire approche, tant que j'ai un moyen de savoir quand le silence commence. Comment pourrais-je faire ça de façon programmatique?

Par exemple, une solution possible serait d'avoir une commande qui trouve le début du "silence". Je m'attendais à une séquence comme celle-ci

end=$(ffmpeg some-command-to-find-start-of-silence)
ffmpeg -t "$end" -acodec copy -i inputfile.mp3 outputfile.mp3

La solution n' pas utiliser ffmpeg , mais il ne doit être disponible sur Ubuntu.

21
demandé sur Community 2012-08-06 23:05:33

3 réponses

sox inputfile.mp3 outputfile.mp3 silence 1 0.1 0.1% reverse silence 1 0.1 0.1% reverse

ce sera couper tout silence plus de 0,1 seconde à partir de votre dossier. Si vous vous souciez seulement de tailler la fin, cela peut être simplifié à:

sox inputfile.mp3 outputfile.mp3 reverse silence 1 0.1 0.1% reverse

Un regard détaillé sur la façon dont sox 's silence œuvres ici .

34
répondu James 2012-08-06 19:35:40

vous cherchez probablement une solution sans perte , c'est-à-dire une solution qui ne nécessite pas de réencodage (ce qui réduit la qualité).

je crois mp3splt est ce que vous cherchez. Il peut être utilisé en ligne de commande et GUI.

sudo aptitude install mp3splt mp3splt-gtk

devrait fonctionner sur Debian et Ubuntu.

de la page de manuel:

You peut également essayer de diviser les fichiers automatiquement avec la détection de silence (voir l'option - s), fichiers de finition en utilisant la détection de silence (voir l'option-r), ou par une longueur de temps fixe (voir l'option-t)

7
répondu Anony-Mousse 2013-12-30 10:06:35

regardez le silencedetect Filtre Audio FFmpeg :

détecte le silence dans un flux audio.

ce filtre enregistre un message lorsqu'il détecte que le volume audio d'entrée est inférieur ou égal à une valeur de tolérance au bruit pour une durée supérieure ou égale à la durée minimale de bruit détectée.

les temps et la durée imprimés sont exprimés en secondes.

il a des paramètres pour ajuster comment calme quelque chose doit être considéré silence, et combien de temps le silence doit être noté.

5
répondu blahdiblah 2012-08-06 19:28:46