flac.mp3.de

Ratgeber · Praxis & Tools

FLAC zu MP3 per Kommandozeile: ffmpeg und Co

Wer viele FLAC-Dateien automatisiert nach MP3 wandeln will, kommt mit ffmpeg auf der Kommandozeile am weitesten. Dieser Ratgeber zeigt die Befehle, die wirklich funktionieren.

6 Min Lesezeit 1.377 Wörter 4 FAQs
Jan-Tristan Rudat
Jan-Tristan RudatRedakteur
Geprüft am

FLAC ist ein verlustfreies Format und damit ideal fürs Archiv. Für das Auto, einen alten MP3-Player oder einfach kleinere Dateien führt aber oft kein Weg an MP3 vorbei. Für einzelne Dateien reicht ein Browser-Tool, das die Konvertierung lokal im Tab erledigt. Sobald aber hunderte Tracks anstehen oder die Umwandlung Teil eines automatischen Ablaufs werden soll, ist die Kommandozeile das deutlich mächtigere Werkzeug. Das Mittel der Wahl ist ffmpeg.

Warum ffmpeg

ffmpeg ist ein freies Kommandozeilen-Werkzeug, das praktisch jedes Audio- und Videoformat lesen und schreiben kann. Für die MP3-Erzeugung bindet es den bewährten LAME-Encoder über die Bibliothek libmp3lame ein. Du bekommst damit denselben Encoder, den auch dedizierte LAME-Aufrufe nutzen, aber mit einer einheitlichen Befehlssyntax für Ein- und Ausgabe.

Bevor du startest, prüfe, ob dein ffmpeg-Build den MP3-Encoder mitbringt:

ffmpeg -encoders | grep mp3

Erscheint in der Liste libmp3lame, bist du startklar. Unter Windows lautet der Befehl in PowerShell sinngemäß:

ffmpeg -encoders | Select-String mp3

Fehlt libmp3lame, installiere ffmpeg über einen offiziellen Build (etwa von gyan.dev für Windows, über Homebrew auf macOS oder den Paketmanager deiner Linux-Distribution). Die meisten gängigen Builds haben den Encoder bereits aktiviert.

Eine einzelne Datei umwandeln

Der einfachste Fall ist eine FLAC-Datei, die du in MP3 mit fester Bitrate von 320 kbps wandeln willst:

ffmpeg -i song.flac -b:a 320k song.mp3

-i gibt die Eingabedatei an, -b:a 320k setzt die Audio-Bitrate auf 320 kbit pro Sekunde im CBR-Modus (konstante Bitrate). ffmpeg erkennt am Dateinamen song.mp3, dass MP3 herauskommen soll, und nutzt automatisch libmp3lame.

Willst du den Encoder explizit benennen, etwa um sicherzugehen, dass nicht ein anderer MP3-Encoder zum Einsatz kommt, gibst du ihn direkt an:

ffmpeg -i song.flac -codec:a libmp3lame -b:a 320k song.mp3

CBR oder VBR

Statt einer festen Bitrate ist die variable Bitrate (VBR) in den meisten Fällen die bessere Wahl. VBR teilt die Bits je nach Komplexität der Musik zu: ruhige Passagen brauchen weniger, dichte Passagen bekommen mehr. Das Ergebnis ist bei oft kleinerer Datei eine gleichwertige oder bessere Qualität. Gesteuert wird VBR über -q:a mit einem Wert von 0 (höchste Qualität, rund 245 kbps im Mittel) bis 9 (niedrigste):

ffmpeg -i song.flac -codec:a libmp3lame -q:a 0 song.mp3

Für gute Qualität bei spürbar kleinerer Datei ist -q:a 2 (rund 190 kbps im Mittel) ein verbreiteter Kompromiss. Wer maximale Kompatibilität mit eigenwilligen Abspielgeräten braucht, bleibt bei CBR und -b:a 320k.

Metadaten und Cover übernehmen

Ein häufiger Stolperstein: nach der Konvertierung fehlen plötzlich Titel, Interpret oder das Albumcover. ffmpeg übernimmt textliche Metadaten standardmäßig, du kannst es aber explizit erzwingen:

ffmpeg -i song.flac -map_metadata 0 -codec:a libmp3lame -q:a 0 song.mp3

-map_metadata 0 kopiert die Metadaten aus der ersten Eingabedatei (Index 0) in die Ausgabe. So wandern Titel, Album, Interpret, Track-Nummer und Jahr mit.

Das eingebettete Cover ist ein eigener Stream und wird nicht automatisch durchgereicht. Damit das Bild in der MP3 landet, mappst du beide Streams und kopierst den Bild-Stream unverändert:

ffmpeg -i song.flac -map 0:a -map 0:v -map_metadata 0 \
  -codec:a libmp3lame -q:a 0 -codec:v copy -id3v2_version 3 song.mp3

Hier passiert Folgendes: -map 0:a nimmt die Audiospur, -map 0:v nimmt das eingebettete Bild (als Video-Stream behandelt), -codec:v copy übernimmt das Bild ohne Neukodierung und -id3v2_version 3 sorgt für ID3v2.3-Tags, die von praktisch allen Playern korrekt gelesen werden. Falls eine FLAC-Datei kein Cover enthält, bricht ffmpeg mit dem -map 0:v ab. Für gemischte Sammlungen ist es daher sicherer, das Bild optional zu mappen:

ffmpeg -i song.flac -map 0:a -map 0:v? -map_metadata 0 \
  -codec:a libmp3lame -q:a 0 -codec:v copy -id3v2_version 3 song.mp3

Das Fragezeichen hinter 0:v? macht den Bild-Stream optional. Fehlt das Cover, läuft der Befehl trotzdem durch.

Wichtige Flags im Überblick

FlagWirkung
-i datei.flacEingabedatei festlegen
-codec:a libmp3lameLAME-Encoder explizit wählen
-b:a 320kKonstante Bitrate (CBR) auf 320 kbps
-q:a 0Variable Bitrate (VBR), 0 = beste, 9 = schlechteste
-map_metadata 0Textmetadaten aus Eingabe 0 übernehmen
-map 0:aAudiospur explizit auswählen
-map 0:v?Eingebettetes Cover optional mitnehmen
-codec:v copyCover-Bild ohne Neukodierung kopieren
-id3v2_version 3ID3v2.3-Tags schreiben (beste Kompatibilität)
-yVorhandene Ausgabedatei ohne Nachfrage überschreiben

Ganze Ordner im Batch wandeln

Der eigentliche Vorteil der Kommandozeile zeigt sich, wenn ein kompletter Ordner mit FLAC-Dateien in einem Rutsch gewandelt werden soll. Hier eine Schleife für Unix-Systeme (Linux, macOS, Git Bash unter Windows):

for f in *.flac; do
  ffmpeg -i "$f" -map 0:a -map 0:v? -map_metadata 0 \
    -codec:a libmp3lame -q:a 0 -codec:v copy -id3v2_version 3 \
    "${f%.flac}.mp3"
done

Die Schleife geht jede .flac-Datei im aktuellen Ordner durch. "${f%.flac}.mp3" schneidet die Endung .flac ab und hängt .mp3 an, sodass track01.flac zu track01.mp3 wird. Die Anführungszeichen um "$f" sind wichtig, damit Dateinamen mit Leerzeichen nicht zerbrechen.

Sollen auch Unterordner einbezogen werden, übernimmt find das Aufspüren:

find . -name "*.flac" -exec bash -c \
  'ffmpeg -i "$1" -map 0:a -map 0:v? -map_metadata 0 \
   -codec:a libmp3lame -q:a 0 -codec:v copy -id3v2_version 3 \
   "${1%.flac}.mp3"' _ {} \;

Unter Windows in PowerShell sieht die Schleife etwas anders aus, weil PowerShell mit Objekten statt mit Textzeilen arbeitet:

Get-ChildItem -Filter *.flac | ForEach-Object {
  $out = $_.BaseName + ".mp3"
  ffmpeg -i $_.FullName -map 0:a "-map" "0:v?" -map_metadata 0 `
    -codec:a libmp3lame -q:a 0 -codec:v copy -id3v2_version 3 $out
}

Get-ChildItem -Filter *.flac listet die FLAC-Dateien auf, $_.BaseName liefert den Dateinamen ohne Endung und der Backtick am Zeilenende setzt den Befehl in der nächsten Zeile fort. Für rekursive Verarbeitung samt Unterordnern fügst du -Recurse hinzu:

Get-ChildItem -Recurse -Filter *.flac | ForEach-Object {
  $out = [System.IO.Path]::ChangeExtension($_.FullName, "mp3")
  ffmpeg -i $_.FullName -map 0:a "-map" "0:v?" -map_metadata 0 `
    -codec:a libmp3lame -q:a 0 -codec:v copy -id3v2_version 3 $out
}

ChangeExtension ersetzt sauber die Endung im vollständigen Pfad, sodass die MP3 neben der jeweiligen FLAC-Datei landet, auch in tief verschachtelten Ordnern.

Vor dem großen Lauf testen

Bevor du eine Sammlung mit tausenden Dateien anstößt, lohnt ein Trockenlauf an wenigen Dateien. Prüfe das Ergebnis mit einem Player oder lass dir die Metadaten der fertigen MP3 anzeigen:

ffprobe -hide_banner song.mp3

ffprobe gehört zum ffmpeg-Paket und zeigt Bitrate, Tags und Streams der erzeugten Datei. Stimmen Cover und Tags, kannst du die Schleife guten Gewissens auf den gesamten Bestand loslassen.

Alternativen zu ffmpeg

ffmpeg ist nicht der einzige Weg, deckt aber die meisten Anwendungsfälle am elegantesten ab. Zwei Alternativen sind dennoch erwähnenswert.

LAME direkt

Der LAME-Encoder lässt sich auch direkt aufrufen. Allerdings versteht LAME selbst kein FLAC, sondern erwartet WAV oder rohes PCM als Eingang. Du müsstest also zuerst nach WAV dekodieren, etwa mit dem FLAC-Werkzeug, und dann LAME füttern. In der Praxis verkettet man das per Pipe:

flac -d -c song.flac | lame -V0 - song.mp3

flac -d -c dekodiert nach WAV auf die Standardausgabe, der Bindestrich bei lame liest von dort. -V0 entspricht der höchsten VBR-Qualität. Dieser Weg ist sinnvoll, wenn du LAME-spezifische Feinheiten brauchst, ist für den Alltag aber umständlicher als der direkte ffmpeg-Aufruf.

foobar2000

Wer lieber eine grafische Oberfläche mag, aber trotzdem große Mengen verarbeiten will, ist mit foobar2000 unter Windows gut bedient. Der Player bringt eine Stapelkonvertierung mit, in der du Quellordner, Zielformat, Encoder und Bitrate per Menü einstellst. Intern nutzt foobar2000 ebenfalls LAME. Das ist ein guter Mittelweg für alle, die einmalig eine Sammlung wandeln, sich aber nicht mit Kommandozeilen-Syntax beschäftigen möchten.

Welcher Weg wofür

Die Kommandozeile mit ffmpeg spielt ihre Stärke aus, sobald viele Dateien, wiederkehrende Abläufe oder Automatisierung ins Spiel kommen. Eine einmal getestete Schleife wandelt hunderte Alben mit identischen Einstellungen, übernimmt Cover und Tags zuverlässig und lässt sich in Skripte oder geplante Aufgaben einbauen. Der Aufwand, die Befehle einmal richtig zu bauen, zahlt sich bei jeder weiteren Datei aus.

Für die schnelle, einmalige Umwandlung einzelner Tracks ist dieser Aufwand dagegen oft übertrieben. Wer nur ein paar FLAC-Dateien fürs Handy braucht und keine ffmpeg-Installation hat, ist mit einem Browser-Tool schneller am Ziel, das die Konvertierung lokal und ohne Upload erledigt. Die Faustregel: einmalig und wenig spricht für das Browser-Tool, viel und wiederkehrend spricht für die Kommandozeile. Beide Wege führen zur selben MP3, nur der Weg dorthin unterscheidet sich im Komfort.

FAQ

Häufige Fragen

Verliere ich Qualität, wenn ich FLAC zu MP3 wandle?

Ja, MP3 ist ein verlustbehaftetes Format. Bei 320 kbps CBR oder VBR mit -q:a 0 ist der Verlust für die meisten Hörsituationen jedoch nicht hörbar. Behalte die FLAC-Originale als Archiv, falls du später erneut wandeln möchtest.

Übernimmt ffmpeg automatisch Titel, Interpret und Cover?

Metadaten wie Titel und Interpret übernimmt ffmpeg standardmäßig per -map_metadata 0. Das eingebettete Cover musst du mit zusätzlichen Stream-Mapping-Optionen explizit mitkopieren, sonst landet nur die Tonspur in der MP3.

Was ist besser, CBR mit -b:a 320k oder VBR mit -q:a?

VBR (-q:a 0 bis 2) liefert bei meist kleinerer Dateigröße eine vergleichbare oder bessere Qualität, weil Bits dort verteilt werden, wo sie gebraucht werden. CBR ist sinnvoll, wenn ein Zielgerät oder Stream eine feste Bitrate verlangt.

Brauche ich LAME separat, wenn ich ffmpeg nutze?

Nein. ffmpeg bindet den LAME-Encoder über libmp3lame intern ein. Prüfe mit ffmpeg -encoders nur, ob libmp3lame in deinem Build aktiviert ist. Eine separate LAME-Installation ist nur nötig, wenn du LAME direkt aufrufen willst.

Quellen

Worauf dieser Ratgeber sich stützt

Veröffentlicht · zuletzt geprüft
Verantwortlich: Jan-Tristan Rudat