diff --git a/m4b_mp3_splitted.sh b/m4b_mp3_splitted.sh new file mode 100644 index 0000000..3d62929 --- /dev/null +++ b/m4b_mp3_splitted.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# Dieses Script für den Fall, dass die m4b-Dateien bereits nach Kapiteln in einzelnen +# Dateien gesplittet vorliegen. +# +# Abhängigkeiten: sudo apt-get install ffmpeg id3v2 +# +# USAGE: +# cd /pfad/zum/hörbuch/ +# bash ~/convert_m4b.sh +# +# Funktioniert mit: +# - Monolithischen m4b-Dateien mit internen Kapiteln → werden aufgesplittet +# - Bereits aufgeteilten m4b-Dateien (eine Datei pro Kapitel) → werden direkt konvertiert + +track=1 + +for i in *.m4b; do + name="${i%.m4b}" + echo "==> Verarbeite: $i" + + # Kapitelinfo aus der m4b auslesen (nicht aus der konvertierten mp3) + ffmpeg -i "$i" 2> tmp.txt + chapter_count=$(grep -c "Chapter #" tmp.txt || true) + + if [[ "$chapter_count" -gt 0 ]]; then + # Monolithische Datei: erst zu mp3 konvertieren, dann nach Kapiteln splitten + title=$(basename "$(pwd)") + full_file_path="${name}.mp3" + + echo " Konvertiere zu mp3..." + ffmpeg -i "$i" \ + -acodec libmp3lame \ + -b:a 128k \ + -map_metadata 0 \ + -id3v2_version 3 \ + "$full_file_path" + + echo " Splitte nach Kapiteln..." + while read -r first _ _ start _ end; do + if [[ "${first}" = "Chapter" ]]; then + read # Metadata:-Zeile überspringen + read _ _ chapter + track_padded=$(printf "%02d" "$track") + base_name="${title} - ${track_padded} - ${chapter}" + chapter_file="${base_name}.mp3" + suffix=1 + while [[ -e "$chapter_file" ]]; do + chapter_file="${base_name}_(${suffix}).mp3" + suffix=$((suffix + 1)) + done + echo " -> $chapter_file" + ${name}.mp3" + track=$((track + 1)) + fi + + rm -f tmp.txt +done + +echo "==> Fertig." \ No newline at end of file