Comment changer la fréquence audio?

12

Je souhaite modifier la fréquence d'un fichier audio. Signification: le fichier entier devrait sonner (disons) une octave plus haut ou plus bas. Comment faire? Utiliser ffmpegou un autre outil open source en ligne de commande serait préférable.

tanon
la source

Réponses:

13

Avec ffmpeg:

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

Ici, 0,5 est le facteur de hauteur. Ou consultez l'autre réponse pour plus de détails.


Si vous avez besoin d'une interface graphique, utilisez Audacity , c'est un outil d'édition audio multiplateforme gratuit et open source.

Caractéristiques: changez la hauteur sans modifier le tempo, ou vice-versa.


Comme alternative, essayez sox . Quelque chose comme ca:

sox <infile> <outfile> pitch <shift>

où donne le changement de hauteur sous forme de «cents» positifs ou négatifs (c'est-à-dire 100e de demi-ton). Il y a 12 demi-tons par octave, ce qui signifie ± 1200comme paramètre.

slhck
la source
génial ... sox est juste ce dont j'ai besoin!
tanon
La méthode utilisant ffmpeg modifie-t-elle la durée de l'audio?
mrgloom
@mrgloom Non, ça ne devrait pas.
slhck
Après utilisation, ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wavje vois par ffmpeg -iwav original Duration: 00:00:01.95, bitrate: 3080 kb/set wav modifié Duration: 00:00:02.60, bitrate: 1536 kb/s. Si je comprends bien, Durationc'est la longueur en secondes.
mrgloom
@mrgloom Veuillez poster une nouvelle question et inclure la sortie complète de la ligne de commande.
slhck
8

Trouvez au préalable le débit audio d'entrée ainsi:

ffmpeg -i input.mp4

En supposant un débit audio d'entrée de 44 100 Hz, cette commande fera le travail:

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

Le facteur 3/4 changera la plupart des voix féminines et «maigres» (tamias) en voix masculines et «grasses». Utilisez 4/3 pour le contraire:

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

Remarquez l'ordre du filtre inversé pour éviter la dégradation du signal. Dans la mesure du possible, le fonctionnement sans perte doit précéder le fonctionnement avec perte. Je ne suis pas sûr à 100% si je ne me trompe pas en raison d'une mauvaise compréhension des filtres FFmpeg.

Le filtre FFmpeg asetratedevrait avoir une variable nommée irpour le débit audio d'entrée, par analogie à iw× ihdans certains filtres vidéo, mais je n'ai trouvé aucune mention à ce sujet dans la documentation.

Pour les facteurs supérieurs à 2 (tels que 4/1 ou 1/4), vous devez utiliser plusieurs atempofiltres (1/4 = 1/2 * 1/2 ou 4/1 = 2/1 * 2/1):

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

Je ne sais pas comment obtenir une voix masculine "maigre" et une voix féminine "grasse".

Au lieu de -af, vous pouvez écrire -filter:audioou -filter:a.

Références

7vujy0f0hy
la source