2012-08-06 9 views
20

Ho file MP3 che a volte hanno il silenzio alla fine. Vorrei rimuovere automaticamente questo silenzio. Da quello che posso dire, è il silenzio "perfetto" (0 ampiezza), non il rumore di fondo. La lunghezza del contenuto e il silenzio varia.Come posso rimuovere il silenzio da un MP3 a livello di programmazione?

Ho trovato altre domande su cropping to the first 30 seconds o cropping to X and X+N seconds utilizzando ffmpeg. Penserei che potrei usare un approccio simile, purché abbia un modo per trovare quando inizia il silenzio. Come lo farei programmaticamente?

Ad esempio, una possibile soluzione sarebbe quella di avere un comando che trova l'inizio del "silenzio". Mi aspetto una sequenza come questo

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

la soluzione non non devono utilizzare ffmpeg, ma ha bisogno di essere disponibili su Ubuntu.

+0

Sei veramente interessato solo al silenzio perfetto? È molto raro, con il dithering dei master a 24 bit e la compressione con perdita di dati.FFMPEG è la strada da percorrere, in ogni caso. – Brad

+0

@Brad Stiamo praticamente lavorando a un bug in un servizio di registrazione che usiamo. Sembra dare sempre questo silenzio "perfetto" quando si verifica il problema. –

+0

Sembra che tu possa essere interessato al filtro audio ['silencedetect' FFmpeg] (http://ffmpeg.org/ffmpeg.html#silencedetect). – blahdiblah

risposta

5

Date un'occhiata al silencedetect FFmpeg audio filter:

Rileva silenzio in un flusso audio.

Questo filtro registra un messaggio quando rileva che il volume dell'audio in ingresso è inferiore o uguale a un valore di tolleranza del rumore per una durata maggiore o uguale alla durata minima del disturbo rilevato.

I tempi e la durata stampati sono espressi in secondi.

Ha parametri che consentono di impostare qualcosa di tranquillo deve essere quello di considerare il silenzio, e per quanto tempo il silenzio deve essere da notare.

+2

Il filtro 'silenceremove' è documentato qui https://ffmpeg.org/ffmpeg-filters.html#toc-silenceremove Questa risposta potrebbe rivelarsi utile anche: http://stackoverflow.com/a/29411973/1717535 –

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

Questo riduce qualsiasi silenzio superiore a 0,1 secondi dal file. Se sei preoccupato solo di tagliare la fine, questo può essere semplificata:

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

Uno sguardo dettagliato sul modo in cui sox 's silence opere si trovano here.

+0

La soluzione funziona , ma la tua spiegazione è sbagliata. L'autore originale ha detto "assottigliare il silenzio (qualsiasi volume inferiore all'1% del volume) finché non incontriamo un suono della durata superiore a 0,1 secondi". – duleshi

7

Probabilmente alla ricerca di un lossless soluzione, vale a dire uno che fa non richiedono re-encoding (che riduce la qualità).

Credo che mp3splt sia quello che stai cercando. Può essere utilizzato dalla riga di comando e dalla GUI.

sudo aptitude install mp3splt mp3splt-gtk 

dovrebbe funzionare su Debian e Ubuntu.

Dalla pagina man:

Si può anche provare a dividere i file automaticamente con rilevazione del silenzio (vedi opzione -s), file di assetto utilizzando il rilevamento silenzio (vedi -r opzione), o da un tempo fisso (vedi opzione -t)