2013-08-06 10 views
7

Sto provando a generare i timestamp di inizio dei periodi di silenzio (poiché c'è un rumore di fondo, per silenzio intendo una soglia) in un dato file audio. Alla fine, voglio dividere il file audio in file audio più piccoli, dati questi timestamp. È importante che nessuna parte del file originale venga scartata.Rilevamento e stampa di timestamp di periodi di silenzio utilizzando SoX

ho cercato

sox in.wav out.wav silence 1 0.5 1% 1 2.0 1% : newfile : restart 

(per gentile concessione http://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence/)

Anche se, in qualche modo ha fatto il lavoro, ma ha anche tagliato e scartato i periodi di silenzio, che non voglio accada.

"Silenzio" è l'opzione giusta oppure esiste un modo più semplice per eseguire ciò che devo fare?

Grazie.

+0

ci sono novità su questo argomento? Potresti realizzare questo? Ho bisogno di fare esattamente la stessa cosa. Attualmente rilevo il silenzio con audacity ed esporta l'etichetta-traccia come file di testo. – 3244611user

risposta

2

Esiste (attualmente, almeno) nessun modo per rendere l'effetto silence in uscita nella posizione in cui ha rilevato il silenzio o per mantenere tutto l'audio silenzioso.

Se è possibile ricompilare da soli il SoX, è possibile aggiungere una dichiarazione di uscita per scoprire le posizioni di taglio, quindi utilizzare trim in una chiamata separata per dividere il file. Con la versione originale, sei sfortunato.

+0

Ciao chirlu, Speravo che non fosse vero. Vedrò cosa può fare. – progfan

0

necroposting: È possibile eseguire uno script separato che itera tutti i file di output sox, (per f in * .wav) e utilizzare il comando; soxi -D $f per ottenere la DURATA della clip audio. Quindi, ottenere il tempo di sistema in secondi date "+%s", quindi sottrarre per trovare il tempo di inizio della registrazione.

4

Purtroppo non Sox, ma ffmpeg ha un filtro silencedetect che fa esattamente quello che stai cercando:

ffmpeg -i in.wav -af silencedetect=noise=-50dB:d=1 -f null - 

(rilevamento della soglia di 50dB, per un minimo di 1 secondi, cribbed from the ffmpeg documentation)

... questo sarebbe stampare un risultato come questo:

Press [q] to stop, [?] for help 
[silencedetect @ 0x7ff2ba5168a0] silence_start: 264.718 
[silencedetect @ 0x7ff2ba5168a0] silence_end: 265.744 | silence_duration: 1.02612 
size=N/A time=00:04:29.53 bitrate=N/A 
+0

Ci sono nuove biblioteche nel 2017 che possono raggiungere questo obiettivo? dato un file audio, essere in grado di rilevare ed emettere timestamp di periodi di parola e periodi di silenzio. Grazie. –