¿Cómo cambiar la frecuencia de audio?


12

Quiero cambiar la frecuencia de un archivo de audio. Significado: todo el archivo debe sonar (digamos) una octava más o menos. ¿Cómo hacerlo? Usar ffmpegu otra herramienta de código abierto de línea de comando sería preferible.

Respuestas:


13

Con ffmpeg:

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

Aquí, 0.5 es el factor de tono. O vea la otra respuesta para más detalles.


Si necesita una GUI, use Audacity , es una herramienta de edición de audio multiplataforma gratuita y de código abierto.

Características: Cambia el tono sin alterar el tempo, o viceversa.


Como alternativa, prueba sox . Algo como eso:

sox <infile> <outfile> pitch <shift>

donde da el cambio de tono como 'centavos' positivos o negativos (es decir, centésimas de semitono). Hay 12 semitonos por octava, por lo que eso significaría ± 1200como parámetro.


increíble ... ¡sox es justo lo que necesito!
Tanon

¿El método que usa ffmpeg cambia la duración del audio?
mrgloom

@mrgloom No, no debería.
slhck

Después de usar ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wavveo por ffmpeg -iwav original Duration: 00:00:01.95, bitrate: 3080 kb/sy wav modificado Duration: 00:00:02.60, bitrate: 1536 kb/s. Según tengo entendido Durationes longitud en segundos.
mrgloom

@mrgloom Por favor, publique una nueva pregunta e incluya la salida completa de la línea de comandos.
slhck

8

Encuentre la velocidad de entrada de audio de antemano así:

ffmpeg -i input.mp4

Suponiendo una velocidad de entrada de audio de 44,100 Hz, este comando hará el trabajo:

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

El factor de 3/4 cambiará la mayoría de las voces femeninas y "flacas" (ardillas) en voces masculinas y "gordas". Use 4/3 para lo contrario:

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

Observe el orden inverso del filtro para evitar la degradación de la señal. Siempre que sea posible, la operación sin pérdida debe venir antes de la operación con pérdida. No estoy 100% seguro de si no estoy cometiendo algún error al malinterpretar los filtros FFmpeg.

El filtro FFmpeg asetratedebe tener una variable con el nombre irde velocidad de audio de entrada, en analogía a iw× ihen algunos filtros de video, pero no pude encontrar ninguna mención de ello en la documentación.

Para factores mayores que 2 (como 4/1 o 1/4), debe usar varios atempofiltros (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

No sé cómo obtener la voz masculina "flaca" y la voz femenina "gorda".

En lugar de -af, puedes escribir -filter:audioo -filter:a.

Referencias

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.