Wie ändere ich die Audiofrequenz?

12

Ich möchte die Frequenz einer Audiodatei ändern. Das heißt: Die gesamte Datei sollte eine Oktave höher oder niedriger klingen (sagen wir). Wie es geht? Die Verwendung eines ffmpeganderen Open Source-Befehlszeilentools wäre vorzuziehen.

Tanon
quelle

Antworten:

13

Mit ffmpeg:

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

Hier ist 0,5 der Tonhöhenfaktor. Oder sehen Sie sich die andere Antwort für weitere Details an.


Wenn Sie eine grafische Benutzeroberfläche benötigen, verwenden Sie Audacity , ein kostenloses Open Source-Tool zur plattformübergreifenden Audiobearbeitung.

Features: Ändern Sie die Tonhöhe, ohne das Tempo zu ändern, oder umgekehrt.


Versuchen Sie alternativ Sox . So ähnlich:

sox <infile> <outfile> pitch <shift>

Dabei wird die Tonhöhenverschiebung als positiver oder negativer 'Cent' angegeben (dh 100stel eines Halbtons). Eine Oktave hat 12 Halbtöne, das würde also ± 1200als Parameter bedeuten .

slhck
quelle
super ... sox ist genau das was ich brauche!
Tanon
Ändert die Methode mit ffmpeg die Dauer des Audios?
Mrgloom
@ Mrgloom Nein, sollte es nicht.
Slhck
Nach der Verwendung ffmpeg -i man.wav -af asetrate=48000*0.75,aresample=48000 man_pitch_down.wavsehe ich durch ffmpeg -iOriginal-WAV Duration: 00:00:01.95, bitrate: 3080 kb/sund modifizierte WAV Duration: 00:00:02.60, bitrate: 1536 kb/s. Soweit ich weiß, Durationist die Länge in Sekunden.
Mrgloom
@mrgloom Bitte stellen Sie eine neue Frage und geben Sie die vollständige Befehlszeilenausgabe an.
Slhck
8

Finden Sie die Audio-Eingangsrate vorher wie folgt:

ffmpeg -i input.mp4

Unter der Annahme einer Eingangsaudiorate von 44.100 Hz führt dieser Befehl folgende Aufgabe aus:

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

Der Faktor 3/4 ändert die meisten weiblichen und "dünnen" (Chipmunk) Stimmen in männliche und "fette" Stimmen. Verwenden Sie 4/3 für das Gegenteil:

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

Beachten Sie die umgekehrte Filterreihenfolge, um eine Signalverschlechterung zu verhindern. Wann immer möglich, sollte ein verlustfreier Betrieb vor einem verlustbehafteten Betrieb erfolgen. Ich bin mir nicht 100% sicher, ob ich hier keinen Fehler mache, weil ich FFmpeg-Filter falsch verstanden habe.

Der FFmpeg-Filter asetratesollte eine Variable irhaben, die analog zu iw× ihin einigen Videofiltern nach der Eingangsaudiorate benannt ist , aber ich konnte in der Dokumentation keine Erwähnung finden.

Für Faktoren größer als 2 (z. B. 4/1 oder 1/4) müssen Sie mehrere atempoFilter verwenden (1/4 = 1/2 * 1/2 oder 4/1 = 2/1 * 2/1):

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

Ich weiß nicht, wie ich eine "dünne" Männerstimme und eine "fette" Frauenstimme bekommen soll.

Stattdessen -afkönnen Sie schreiben -filter:audiooder -filter:a.

Verweise

7vujy0f0hy
quelle