#!/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."