2013-08-06 26 views
7

Próbuję wyprowadzać początkowe znaczniki okresów ciszy (ponieważ w tle jest szum tła, przez ciszę mam na myśli próg) w danym pliku audio. Ostatecznie chcę podzielić plik audio na mniejsze pliki audio, biorąc pod uwagę te znaczniki czasu. Ważne jest, aby żadna część oryginalnego pliku nie została odrzucona.Wykrywanie i drukowanie znaczników czasu okresów ciszy przy użyciu SoX

Próbowałem

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

(dzięki uprzejmości http://digitalcardboard.com/blog/2009/08/25/the-sox-of-silence/)

Mimo, że trochę nie praca, to także przycięte i odrzucono okresy ciszy, której nie chcę dzieje.

Czy "cisza" jest właściwą opcją, czy też istnieje prostszy sposób osiągnięcia tego, co muszę zrobić?

Dzięki.

+0

Wszelkie informacje na ten temat? Czy możesz to zrobić? Muszę zrobić dokładnie to samo. Obecnie wykrywam ciszę z audacity i eksportuję ścieżkę etykiety jako plik tekstowy. – 3244611user

Odpowiedz

2

Istnieje (obecnie przynajmniej) brak możliwości wyświetlenia wyniku efektu silence w miejscu, w którym wykryto ciszę, lub w celu zachowania cichego dźwięku.

Jeśli możesz sam przekompilować SoX, możesz dodać instrukcję wyjścia samodzielnie, aby dowiedzieć się o pozycjach cięcia, a następnie użyj trim w osobnym wywołaniu, aby podzielić plik. W wersji magazynowej nie masz szczęścia.

+0

Cześć, chirlu, Miałem nadzieję, że to nie jest prawda. Zobaczę, co da się zrobić. – progfan

0

Necroposting: Możesz uruchomić oddzielny skrypt, który iteruje wszystkie pliki wyjściowe sox, (dla f w * .wav), i użyj polecenia; soxi -D $f, aby uzyskać CZAS TRWANIA klipu dźwiękowego. Następnie uzyskaj czas systemowy w sekundach date "+%s", a następnie odejmij, aby znaleźć czas rozpoczęcia nagrywania.

4

niestety nie Sox, ale ffmpeg ma silencedetect filtr, który robi dokładnie to, czego szukasz:

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

(wykrywającego progu -50dB, przez co najmniej 1 sekundę, żłobienia from the ffmpeg documentation)

... byłoby to wydrukować wynik takiego:

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

Czy są jakieś nowe biblioteki w 2017 roku, które mogą to osiągnąć? , tj. Podając plik audio, być w stanie wykryć i wydrukować sygnatury czasowe okresów wypowiedzi i okresów ciszy. Dzięki. –

Powiązane problemy