Werkzeug zur Massenbeschleunigung / Konvertierung einer Audiodatei

6525
User1

Ich möchte bestimmte Podcasts auf meinem Telefon anhören, habe aber zwei Probleme:

  1. Das Audio ist in einem seltsamen Format (manche werden auf meinem Handy nicht abgespielt).
  2. Der Ton ist langsam.

Ich möchte etwas verwenden soxoder avconvdie Dateien massenweise konvertieren. Da dies nur eine Stimme ist und auf ein Mobiltelefon geht, sind kleine Dateien von geringer Qualität am besten für mich. Ich hatte einen guten Erfolg mit avconv:

avconv -i weird.wma normal.ogg

Leider erstellt dieser Befehl eine riesige ogg-Datei, und ich kann sie nicht schneller abspielen. Idealerweise würde diese bestimmte Datei mit 170% der ursprünglichen Geschwindigkeit abgespielt.

6
Ihr Player kann keine wma-Dateien abspielen, aber es kann ogg spielen. Scott Chamberlain vor 11 Jahren 0

1 Antwort auf die Frage

9
slhck

Mit FFmpeg konvertieren

FFmpeg verfügt über einen eingebauten Audiofilter, um das Tempo ohne Änderung der Tonhöhe zu ändern. Wir müssen die Datei in ein Format kodieren, das Ihr Telefon wiedergibt. Das hängt natürlich vom Telefon ab. Viele moderne Smartphones wie AAC-Audio:

ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libfaac -q:a 100 final.m4a 

Hier können Sie die Qualität mit der -q:aOption ändern, wobei der Wert in Prozent und höher bedeutet besser.

Oder MP3-Audio mit einer (durchschnittlichen) Qualität von 4, wobei weniger besser ist (0 führt zu etwa 245 kBit / s):

ffmpeg -i weird.wma -filter:a "atempo=1.7" -c:a libmp3lame -q:a 4 final.mp3 

Wenn Ihr Telefon keine davon unterstützt, müssen wir weiter suchen. Oh, und ich benutze hier ffmpegsynonym mit avconv. Sie sind nicht ganz dasselbe, aber für die oben genannten Fälle können Sie eines der beiden Werkzeuge verwenden. Wenn Ihre Version von FFmpeg oder avconv weder FAAC noch LAME enthält, holen Sie sich einen statischen Linux-Build von der FFmpeg-Downloadseite .


Wenn Sie die FFmpeg-Filter nicht mögen, haben Sie einen anderen Ansatz:

Rohes Audio extrahieren

Zunächst müssen Sie den rohen Audiostream in einem unkomprimierten Format extrahieren, z. B. PCM Stereo 16-Bit-Audio in einem WAV-Container.

ffmpeg -i weird.wma temp.wav 

Jetzt können wir die Datei verwenden temp.wav, um den Ton zu verkürzen. Dafür haben wir einige Möglichkeiten:

Option 1: SoX

SoX bietet verschiedene Filter an, mit denen Sie Geschwindigkeit, Tonhöhe oder Tempo ändern können. Wenn Sie einfach die Geschwindigkeit ändern, wird die Tonhöhe erhöht, um die Länge zu kompensieren. Dies kann unnatürlich klingen.

Der tempoFilter verwendet einen erweiterten Algorithmus, um die Dateien zu verkürzen, die Tonhöhe jedoch beizubehalten, indem sie in kleinere Zeitfenster unterteilt und dann "zusammengeführt" werden, wodurch das Tempo beschleunigt wird. Zum Beispiel:

sox temp.wav output.wav -tempo 1.7 

Das hört sich vielleicht etwas komisch an. Wenn dies der Fall ist, wählen Sie Option 2.

Option 2: Pauls extreme Sounddehnung

Dieses Programm verspricht, bessere Qualität als SoX zu bieten, und es gibt eine in GitHub verfügbare Befehlszeilenversion in Python . Ein Befehl könnte wie folgt aussehen: Denken Sie daran, dass die Datei standardmäßig gedehnt wird. Um sie zu verkürzen, berechnen wir die Umkehrung von 1.7 (0,59):

python paulstretch_stereo.py -s 0.59 temp.wav output.wav 

Konvertieren Sie Roh-Audio in eine komprimierte Datei

Jetzt haben wir eine gekürzte WAV-Datei, die jedoch immer noch nicht komprimiert ist und daher erneut komprimiert werden muss. Informationen zu den verschiedenen Formaten finden Sie in den Optionen oben in diesem Beitrag.

ffmpeg -i output.wav -c:a … 

Die oben beschriebenen Nicht-ffmpeg-Methoden verlieren Ihre Metadaten. Sie können es wieder hinzufügen, wenn Sie output.wav in ein komprimiertes Format konvertieren:

ffmpeg -i output.wav -i weird.wma -map 0 -map_metadata 1 -c:a ... 
Ich mag Option 1, aber verliere ich nicht die Meta-Informationen in der Datei, wenn ich in eine WAV-Datei konvertiere? Hat ffmpeg keinen entsprechenden "-tempo" -Schalter? User1 vor 11 Jahren 0
Sie würden alle Metadaten verlieren, ja. Ich habe meine Antwort mit einem nativen FFmpeg-Ansatz aktualisiert, der theoretisch Ihre Metadaten beibehalten sollte. slhck vor 11 Jahren 0