Come cambiare la frequenza audio?


12

Voglio cambiare la frequenza di un file audio. Significato: l'intero file dovrebbe suonare (diciamo) un'ottava più in alto o più in basso. Come farlo? ffmpegSarebbe preferibile utilizzare o altri strumenti open source da riga di comando.

Risposte:


13

Con ffmpeg:

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

Qui, 0,5 è il fattore di tonalità. Oppure vedi l'altra risposta per maggiori dettagli.


Se hai bisogno di una GUI, usa Audacity , è uno strumento di editing audio gratuito, open source e multipiattaforma.

Caratteristiche: cambia il tono senza alterare il tempo, o viceversa.


In alternativa, prova sox . Qualcosa del genere:

sox <infile> <outfile> pitch <shift>

dove fornisce il pitch shift come 'centesimi' positivi o negativi (cioè centesimi di semitono). Ci sono 12 semitoni in un'ottava, quindi ciò significherebbe ± 1200come parametro.


fantastico ... sox è proprio quello di cui ho bisogno!
Tanon,

Il metodo che utilizza ffmpeg modifica la durata dell'audio?
mrgloom,

@mrgloom No, non dovrebbe.
Slhck,

Dopo l'uso ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wavvedo per ffmpeg -iwav originale Duration: 00:00:01.95, bitrate: 3080 kb/se wav modificato Duration: 00:00:02.60, bitrate: 1536 kb/s. Come ho capito Durationè la lunghezza in secondi.
mrgloom,

@mrgloom Invia una nuova domanda e includi l'output completo della riga di comando.
Slhck,

8

Trova in anticipo la frequenza audio in ingresso quindi:

ffmpeg -i input.mp4

Supponendo che la frequenza audio in ingresso sia 44.100 Hz, questo comando farà il lavoro:

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

Il fattore 3/4 cambierà la maggior parte delle voci femminili e "magre" (chipmunk) in voci maschili e "grasse". Usa 4/3 per il contrario:

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

Notare l'ordine del filtro invertito per prevenire il degrado del segnale. Ove possibile, l'operazione senza perdite dovrebbe precedere l'operazione in perdita. Non sono sicuro al 100% se non sto commettendo un errore qui da incomprensione dei filtri FFmpeg.

Il filtro FFmpeg asetratedovrebbe avere una variabile denominata irper la frequenza audio in ingresso, analogamente a iw× ihin alcuni filtri video, ma non ho trovato alcun riferimento nella documentazione.

Per fattori maggiori di 2 (come 4/1 o 1/4), è necessario utilizzare più atempofiltri (1/4 = 1/2 * 1/2 o 4/1 = 2/1 * 2/1):

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

Non so come ottenere una voce maschile "magra" e una voce femminile "grassa".

Invece di -af, puoi scrivere -filter:audioo -filter:a.

Riferimenti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.