Skip to main content

M4A zu MP3 Massenumwandlung (Debian / 09.04.2025)

Das Script wandelt rekursiv beginnend ab einem Pfad ($1) M4A-Audiodateien in MP3 um. Die Qualität bleibt nahezu gleich. Der Pfad ist dem $1-Argument zu übergeben.
Die daraus entstehende MP3 ist gleichnamig wie die M4A Datei.

ffmpeg

🧾und Was macht das Skript?

📁 1. Eingabeparameter prüfen

DIR="$1"
  • Erwartet ein Verzeichnis als erstes Argument

  • Wenn kein Argument oder kein Verzeichnis → Fehlermeldung + Exit


🔍 2. Suche nach .m4a-Dateien


find "$DIR"werden -type f -iname "*.m4a"
  • Durchsucht rekursiv das Verzeichnis

  • Ignoriert Groß-/Kleinschreibung (-iname)

  • Liefert eine Liste aller .m4a-Dateien


🔁 3. Verarbeitung jeder Datei

dafür jede .m4a-Datei:benötigt.

a. Bestimme Zieldateiname .mp3:

MP3="${M4A%.m4a}.mp3"
b. Überspringen, wenn .mp3 bereits existiert:

if [ -f "$MP3" ]; then ... continue
c. Umwandlung per ffmpeg:

ffmpeg -i "$M4A" -codec:a libmp3lame -qscale:a 4 "$MP3" -y < /dev/null
  • Eingabe: M4A-Datei

  • Ausgabe: MP3 mit LAME-Codec (libmp3lame)

  • Qualität: -qscale:a 4 = gute VBR-Qualität (~160 kbps)

  • -y = automatische Überschreibung (falls Datei entstehen würde)

  • < /dev/null = verhindert interaktive Prompts

d. Erfolgskontrolle

if [ $? -eq 0 ]; then echo "Erfolg" ...

✅ Ausgabe:

  • Gibt für jede Datei an, ob sie:

    • übersprungen wurde

    • erfolgreich konvertiert wurde

    • einen Fehler erzeugt hat


🧰 Benötigte Pakete / Tools

ToolZweckInstallationsbefehl (Debian/Ubuntu)
findDatei-Suchein findutils enthalten (Standard)
ffmpegKonvertierung M4A → MP3sudo apt install ffmpeg

Script:

#!/bin/bash

DIR="$1"

if [ -z "$DIR" ] || [ ! -d "$DIR" ]; then
    echo "Usage: $0 /pfad/zum/verzeichnis"
    exit 1
fi

find "$DIR" -type f -iname "*.m4a" | while read -r M4A; do
    MP3="${M4A%.m4a}.mp3"
    
    # Nur umwandeln, wenn mp3 nicht schon existiert
    if [ -f "$MP3" ]; then
        echo "Überspringe (bereits vorhanden): $MP3"
        continue
    fi

    echo "Wandle um: $M4A → $MP3"

    ffmpeg -i "$M4A" -codec:a libmp3lame -qscale:a 4 "$MP3" -y < /dev/null

    if [ $? -eq 0 ]; then
        echo "Erfolg: $MP3"
    else
        echo "Fehler bei: $M4A"
    fi
done