HOWTO · Python
Konvertieren Sie MP3 in WAV in Python
In diesem Tutorial werden wir diskutieren, wie man MP3 in WAV in Python umwandelt
Auf dieser Seite
Um eine MP3-Datei in Python in WAV umzuwandeln, können Sie pydub mit seiner kompakten Bibliotheksschnittstelle verwenden oder ffmpeg direkt aufrufen, wenn Sie die Befehlszeilenoptionen gezielt steuern möchten. Für beide Ansätze muss das ausführbare Programm ffmpeg verfügbar sein. WAV ist üblicherweise unkomprimiert und kann deutlich größer als MP3 sein. Bei der Umwandlung einer verlustbehafteten MP3-Datei lassen sich die bei der Komprimierung verworfenen Audiodetails nicht wiederherstellen.
MP3 mit pydub in WAV umwandeln
Installieren Sie pydub mit python -m pip install pydub in der Umgebung, in der Ihr Skript ausgeführt wird. Außerdem muss das ausführbare Programm ffmpeg installiert und über PATH erreichbar sein; die Installation von pydub allein bringt es nicht mit. Hintergrundinformationen finden Sie in der ffmpeg-Anleitung. Die Installationsschritte unterscheiden sich je nach Betriebssystem. Verwenden Sie daher den Paketmanager oder die Installationsmethode, die Ihr System unterstützt.
In diesem Beispiel ist input.mp3 die Quelldatei und test.wav die Zieldatei. Ersetzen Sie diese Pfade durch die Ihrer Dateien. Der Code prüft, ob die Eingabedatei vorhanden ist, bevor er pydub importiert. So lässt sich das Beispiel als Vorlage verwenden; wenn die Eingabedatei existiert, lädt es die MP3-Datei und exportiert sie als WAV-Datei.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
from pathlib import Path
source_path = Path("input.mp3")
destination_path = Path("test.wav")
if not source_path.is_file():
print(f"Place an MP3 file at {source_path} and run again.")
else:
from pydub import AudioSegment
audio = AudioSegment.from_mp3(str(source_path))
audio.export(str(destination_path), format="wav")
print(f"Created {destination_path}")
MP3 direkt mit ffmpeg in WAV umwandeln
Sie können ffmpeg in einem Terminal ausführen, ohne eine Python-Audiobibliothek zu verwenden. Stellen Sie sicher, dass ffmpeg installiert und über seinen Namen aufrufbar ist, oder verwenden Sie den vollständigen Pfad zur ausführbaren Datei. Mit dem Argument -i geben Sie die Eingabedatei an; das letzte Argument ist der Ausgabepfad: ffmpeg -i input.mp3 test.wav.
Dieser Befehl setzt voraus, dass sich input.mp3 im aktuellen Verzeichnis befindet, und schreibt test.wav. Damit stimmen die Pfade mit den Python-Beispielen weiter unten überein. Liegt die Eingabedatei an einem anderen Ort, geben Sie den richtigen Pfad an. Wenn die Zieldatei bereits existiert, fragt ffmpeg möglicherweise nach, ob sie überschrieben werden soll. Wählen Sie einen neuen Namen oder verwenden Sie die Überschreiboption nur, wenn die vorhandene Datei tatsächlich ersetzt werden soll.
MP3 mit subprocess in Python in WAV umwandeln
In einem Python-Skript kann subprocess.run() eine Argumentliste an das externe Programm ffmpeg übergeben. Dadurch müssen Sie keinen Shell-Befehlsstring zusammensetzen, und Python kann einen Prozessstatus ungleich null erkennen. Das Beispiel verwendet wie die anderen Methoden input.mp3 als Quelldatei und test.wav als Zieldatei. Ersetzen Sie beide Pfade durch die Ihrer Dateien. Vor dem Aufruf von ffmpeg wird geprüft, ob die Quelldatei vorhanden ist.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
from pathlib import Path
import subprocess
source_path = Path("input.mp3")
destination_path = Path("test.wav")
if not source_path.is_file():
print(f"Place an MP3 file at {source_path} and run again.")
else:
subprocess.run(
["ffmpeg", "-i", str(source_path), str(destination_path)],
check=True,
)
print(f"Created {destination_path}")
Mit check=True meldet Python eine fehlgeschlagene Konvertierung, statt unbemerkt fortzufahren. ffmpeg schreibt die Audiodatei am Zielpfad; subprocess leitet seine Standardausgabe nicht in diese WAV-Datei um. Fangen Sie bei Stapelverarbeitungen subprocess.CalledProcessError ab und protokollieren Sie den Quellpfad sowie die Fehlerdetails, damit sich eine fehlgeschlagene Datei untersuchen lässt.
WAV-Ausgabe prüfen und häufige Probleme beheben
Alle drei Konvertierungsbeispiele verwenden input.mp3 als Quelldatei und test.wav als Zieldatei. Wenn Sie in einem Beispiel den Zielpfad geändert haben, passen Sie destination_path unten genau an diesen Pfad an. Die Prüfung stellt zuerst fest, ob die Datei existiert, und öffnet sie anschließend mit dem Python-Modul wave, um zu bestätigen, dass sie einen lesbaren WAV-Container enthält. Diese Prüfung ist unabhängig von der folgenden künstlich erzeugten WAV-Testdatei: Diese dient dazu, das Auslesen von WAV-Daten zu testen, und wandelt keine MP3-Datei um.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
from pathlib import Path
import wave
# Match this path to the destination used by the conversion example.
destination_path = Path("test.wav")
if not destination_path.is_file():
print(f"WAV file not found: {destination_path}")
else:
try:
with wave.open(str(destination_path), "rb") as wav_file:
print(
f"WAV: {wav_file.getnchannels()} channel(s), "
f"{wav_file.getframerate()} Hz"
)
except (OSError, wave.Error) as error:
print(f"Could not read WAV file: {error}")
Das folgende eigenständige Beispiel erstellt mit der Python-Standardbibliothek eine kleine WAV-Testdatei und prüft ihre grundlegenden Metadaten. Es veranschaulicht ausschließlich das Auslesen einer WAV-Datei und decodiert keine MP3-Datei.
from pathlib import Path
import tempfile
import wave
with tempfile.TemporaryDirectory() as directory:
output_path = Path(directory) / "test.wav"
with wave.open(str(output_path), "wb") as wav_file:
wav_file.setnchannels(1)
wav_file.setsampwidth(2)
wav_file.setframerate(8000)
wav_file.writeframes(b"\x00\x00" * 800)
with wave.open(str(output_path), "rb") as wav_file:
print(f"WAV: {wav_file.getnchannels()} channel(s), {wav_file.getframerate()} Hz")
Ausgabe:
WAV: 1 channel(s), 8000 Hz
Die ausgegebenen Werte beschreiben den WAV-Datenstrom, nicht ob seine Klangqualität besser ist als die der MP3-Quelldatei. Wenn Python ffmpeg nicht findet, installieren Sie das ausführbare Programm oder fügen Sie dessen Verzeichnis zu PATH hinzu. Starten Sie danach das Terminal oder den Prozess neu, in dem Python ausgeführt wird. Kann ffmpeg die Eingabedatei nicht öffnen, prüfen Sie den Dateinamen und den Quellpfad relativ zum Arbeitsverzeichnis des Skripts. Schlägt die Konvertierung fehl, lesen Sie die Diagnoseausgabe von ffmpeg und prüfen Sie, ob die Eingabedatei lesbar und das Zielverzeichnis beschreibbar ist. Wählen Sie pydub, wenn die einfachere API gut zu Ihrem Skript passt; verwenden Sie ffmpeg über subprocess, wenn Sie direkten Zugriff auf Optionen und Prozessstatus benötigen.