commit c27706704e59c143036a9208998ef9b61cbb2388 Author: Alf Date: Wed Jul 9 18:12:26 2025 +0200 Initialcommit diff --git a/m4b_mp3.sh b/m4b_mp3.sh new file mode 100644 index 0000000..f991b5a --- /dev/null +++ b/m4b_mp3.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +# Locale für Dezimalzahlen auf C setzen, damit Punkt als Dezimaltrennzeichen genutzt wird +export LC_NUMERIC=C + +# Prüfen, ob alle Tools vorhanden sind +for cmd in ffmpeg ffprobe jq gum id3v2; do + command -v "$cmd" >/dev/null 2>&1 || { + echo "Fehler: '$cmd' ist nicht installiert. Bitte installieren." >&2 + exit 1 + } +done + +# Ungültige Zeichen in Dateinamen ersetzen (z. B. ":" durch "-") +for f in *.m4b; do + safe_name=$(echo "$f" | sed 's/[:\/\\<>*?"|]/-/g') + if [[ "$f" != "$safe_name" ]]; then + mv -- "$f" "$safe_name" + echo "📁 Umbennen: '$f' → '$safe_name'" + fi +done + +track=1 + +for i in *.m4b; do + title=$(basename "$PWD" | cut -d ',' -f 1) + full_file_path="$i" + echo "🎧 Bearbeite Datei: $full_file_path" + + # Kapitel als JSON auslesen + chapters_json=$(ffprobe -loglevel error -print_format json -show_chapters "$full_file_path") + total_chapters=$(jq '.chapters | length' <<< "$chapters_json") + echo "📚 Enthaltene Kapitel: $total_chapters" + + for (( idx=0; idx*?"|]/-/g') + base_name="${track_padded} - ${safe_chapter}" + + # base_name="${track_padded} - ${chapter}" + + chapter_file="${base_name}.mp3" + + # Suffix anhängen bei Dopplungen + suffix=1 + while [[ -e "$chapter_file" ]]; do + chapter_file="${base_name}_(${suffix}).mp3" + suffix=$((suffix + 1)) + done + + gum spin --title "Extrahiere Kapitel $((idx+1))/$total_chapters: $chapter" -- \ + ffmpeg -loglevel error -stats -ss "$start" -i "$full_file_path" -t "$duration" \ + -avoid_negative_ts make_zero -map 0:a:0 -codec:a libmp3lame -ar 44100 -b:a 192k \ + -metadata track="$track" "$chapter_file" + + id3v2 --song "$chapter" "$chapter_file" + id3v2 --album "$title" "$chapter_file" + id3v2 --track "$track" "$chapter_file" + id3v2 --genre "Audiobooks" "$chapter_file" + + track=$((track + 1)) + done +done + +gum style --foreground 10 --bold "✅ Alle Kapitel erfolgreich extrahiert und getaggt."