Skip to main content

M4A zu MP3 Massenumwandlung

Dieser IP Logger loggt die eigene IP-Adresse in eine CSV-Datei. Dies hat den Grund, dass man Vorwürfe jeder Art durch Vorlage der zu der Zeit genutzten IP-Adresse vorweisen könnte.
Nützlich in Verbindung mit einem Cronjob.

Das Script holtwandelt viarekursiv "icanhazip.com"beginnend dieab aktuelleeinem IP-AdressePfad und($1) speichert sieM4A-Audiodateien in dieMP3 CSV-Datei.um. WennDie viaQualität Cronjobbleibt dasnahezu Scriptgleich. ausgeführtDer wird,Pfad empfehleist ichdem den Intervall auf stündlich$1-Argument zu setzen. Eine Zeit von-bis einzubauen halte ich für nicht sinnvoll, da das Internet zu dieser Zeit auch ausfallen könnte. Daher halte ich es für nicht sinnvoll, die IP-Adresse zu speichern und erst bei Änderung erneut zu schreiben.
übergeben.

 

🧾 Was macht das Script?Skript?

📁 1. AllgemeineEingabeparameter Initialisierung:prüfen

DIR="$1"
  • BestimmeErwartet denein aktuellenVerzeichnis Benutzerals erstes Argument

  • Wenn kein Argument oder kein Verzeichnis → Fehlermeldung + Exit


🔍 2. Suche nach .m4a-Dateien

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

  • Ignoriert Groß-/Kleinschreibung (whoami-iname)

  • SetzeLiefert eine Liste aller .m4a-Dateien


🔁 3. Verarbeitung jeder Datei

Für jede .m4a-Datei:

a. Bestimme Zieldateiname .mp3:
MP3="$data{M4A%.m4a}.mp3"
b. Überspringen, wenn .mp3 auf:
bereits existiert:
/home/<user>/script-data/<scriptname>if [ -f "$MP3" ]; then ... continue
(z. B.
c. Umwandlung per ffmpeg:
ffmpeg -i "$M4A" -codec:a libmp3lame -qscale:a 4 "$MP3" -y < /home/pi/script-data/iplogger.shdev/null
  • Eingabe: M4A-Datei

  • Ausgabe: MP3 mit LAME-Codec (libmp3lame)

  • SetzeQualität: $ippage-qscale:a 4 auf= icanhazip.com

    gute
  • VBR-Qualität
  • Hole(~160 aktuelle öffentliche IP via curl

📬 Benötigte Tools:

  • curlkbps)

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

  • sed< /dev/null, = verhindert interaktive Prompts

d. Erfolgskontrolle
awkif [ $? -eq 0 ]; then echo "Erfolg" ... ,
grep,
uniq

✅ Ausgabe:

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

    • übersprungen wurde

    • Basherfolgreich >=konvertiert 4wurde

    • 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

user=DIR="$(whoami)1"

data="/home/$user/script-data/$(basenameif [ -z "$0")"DIR" ippage="icanhazip.com"] ipneu=$(curl -s "$ippage")

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

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

    echo "Wandle um: $M4A → $MP3"

    ffmpeg -i "$data/ipdb.csv"M4A" |-codec:a sedlibmp3lame 's/;/-qscale:a /g' | sed 's/\([0-9]\{4\}\)-\([0-9]\{2\}\)-\([0-9]\{2\}\)/\3.\2.\1/' | grep4 "$2"MP3" |-y awk< '{print $1, "", "", $3}' | uniq
	exit
else/dev/null

    if nc[ $? -zeq -w0 1 "$ippage" 443 2>/dev/null;]; then
        echo "$(date +"%Y-%m-%d;%H:%M");$ipneu" >> "$data/ipdb.csv"
		echo "OK:Erfolg: $ipneu"
	else
		if nc -z -w 1 "google.de" 443 2>/dev/null; then
			echo "Fehler, $ippage nicht erreichbar."
			echo "$(date +"%Y-%m-%d;%H:%M");$ippage nicht erreichbar" >> "$data/ipdb.csv"MP3"
    else
        echo "KeinFehler Internet."bei: echo "$(date +"%Y-%m-%d;%H:%M");offline" >> "$data/ipdb.csv"M4A"
    fi
fi
fidone