Jak zmienić częstotliwość dźwięku?

12

Chcę zmienić częstotliwość pliku audio. Znaczenie: cały plik powinien brzmieć (powiedzmy) o jedną oktawę wyżej lub niżej. Jak to zrobić? ffmpegPreferowane byłoby użycie narzędzia open source lub innego wiersza poleceń.

tanon
źródło

Odpowiedzi:

14

Z ffmpeg:

ffmpeg -i <input> -af asetrate=44100*0.5,aresample=44100 <output>

Tutaj 0,5 to współczynnik skoku. Lub zobacz drugą odpowiedź, aby uzyskać więcej informacji.


Jeśli potrzebujesz GUI, skorzystaj z Audacity , to darmowego, wieloplatformowego narzędzia do edycji dźwięku.

Funkcje: Zmień wysokość dźwięku bez zmiany tempa lub odwrotnie.


Alternatywnie spróbuj sox . Coś w tym stylu:

sox <infile> <outfile> pitch <shift>

gdzie daje zmianę wysokości tonu jako dodatnie lub ujemne „centy” (tj. setne części półtonu). Na oktawę składa się 12 półtonów, więc oznaczałoby to ± 1200jako parametr.

slhck
źródło
super ... sox jest tym, czego potrzebuję!
tanon
Czy metoda wykorzystująca ffmpeg zmienia czas trwania dźwięku?
mrgloom
@mrgloom Nie, nie powinno.
slhck
Po użyciu ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wavwidzę ffmpeg -ioryginalne wav Duration: 00:00:01.95, bitrate: 3080 kb/si zmodyfikowane wav Duration: 00:00:02.60, bitrate: 1536 kb/s. Rozumiem, że Durationdługość w sekundach.
mrgloom
@mrgloom Zadaj nowe pytanie i dołącz pełny wynik wiersza poleceń.
slhck
9

Znajdź wcześniej wejściową szybkość dźwięku w ten sposób:

ffmpeg -i input.mp4

Przy założeniu wejściowej częstotliwości audio 44,100 Hz to polecenie wykona zadanie:

ffmpeg -i input.mp4 -af asetrate=44100*3/4,atempo=4/3 output.mp4

Współczynnik 3/4 zmieni większość głosów kobiecych i „chudych” (wiewiórek) w głosy męskie i „tłuste”. Użyj 4/3 na odwrót:

ffmpeg -i input.mp4 -af atempo=3/4,asetrate=44100*4/3 output.mp4

Zwróć uwagę na odwróconą kolejność filtrów, aby zapobiec degradacji sygnału. O ile to możliwe, operacja bezstratna powinna nastąpić przed operacją stratną. Nie jestem w 100% pewien, czy nie popełniam tutaj błędu przez nieporozumienie z filtrami FFmpeg.

Filtr FFmpeg asetratepowinien mieć zmienną o nazwie irwejściowej częstotliwości audio, analogicznie do iw× ihw niektórych filtrach wideo, ale nie mogłem znaleźć żadnej wzmianki o tym w dokumentacji.

W przypadku czynników większych niż 2 (takich jak 4/1 lub 1/4), musisz użyć wielu atempofiltrów (1/4 = 1/2 * 1/2 lub 4/1 = 2/1 * 2/1):

ffmpeg -i input.mp4 -af asetrate=44100*4,atempo=1/2,atempo=1/2 output.mp4

Nie wiem, jak uzyskać „chudy” męski głos i „gruby” żeński głos.

Zamiast tego -afmożesz pisać -filter:audiolub -filter:a.

Bibliografia

7vujy0f0hy
źródło