Initialcommit

This commit is contained in:
Alf
2025-07-09 18:12:26 +02:00
commit c27706704e

76
m4b_mp3.sh Normal file
View File

@ -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<total_chapters; idx++ )); do
start=$(jq -r ".chapters[$idx].start_time" <<< "$chapters_json")
end=$(jq -r ".chapters[$idx].end_time" <<< "$chapters_json")
chapter=$(jq -r ".chapters[$idx].tags.title // \"Kapitel $((idx+1))\"" <<< "$chapters_json")
duration=$(printf "%.3f" "$(echo "$end - $start" | bc -l)")
# Kapitelname optional formatieren (z.B. Nummern nullpadden)
chapter=$(sed -re ":r;s/\b[0-9]{1,$((1))}\b/0&/g;tr" <<< "$chapter")
# base_name="${title} - ${chapter}"
# zweistellige Tracknummer erzeugen
track_padded=$(printf "%02d" "$track")
safe_chapter=$(echo "$chapter" | sed 's/[:\/\\<>*?"|]/-/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."