# to-m4b Kleines Bash‑Skript, das Hörbuch‑Ordner unter `src/` erkennt und mit [m4b-tool](https://github.com/sandreas/m4b-tool) zu einzelnen `.m4b`‑Dateien zusammenführt. Metadaten (Autor, Serie, Titel, Jahr, Sprecher:in) werden aus der Ordnerstruktur extrahiert und als Tags gesetzt. Die Ergebnisse werden unter `out/` abgelegt. > Das Skript startet `m4b-tool` über Nix (`nix run github:sandreas/m4b-tool#m4b-tool-libfdk`). ## Voraussetzungen - Nix installiert (für den Aufruf von `m4b-tool` via `nix run`) - Audio‑Quellen in unterstützten Formaten: `mp3`, `m4a`, `m4b`, `aac`, `flac`, `wav`, `ogg` - Bash (unter macOS/Linux vorhanden) ## Quickstart 1) Quellen in die passende Ordnerstruktur unter `src/` legen (siehe Beispiele unten). 2) Script ausführbar machen: `chmod +x to-m4b.sh` 3) Konvertierung starten: `./to-m4b.sh` 4) Ergebnis unter `out/` prüfen. ## Verzeichnisstruktur Das Skript erwartet unter `src/` je Hörbuch einen Ordner in einer der beiden Formen: 1) Serie (mit Folgennummer) ``` src///Book - - {}/ ``` Beispiel: ``` src/WinterZeit Verlag/Das Schwarze Auge/Book 15 - 2022 - Auf Schusters Rappen/ 249_Das schwarze Auge_Teil 1 - Folge 15_ Auf Schusters Rappen.ogg ... ``` 2) Einzelband (ohne Serie) ``` src// - {}/ ``` Die Angabe `{}` ist optional; Leerzeichen dürfen enthalten sein. ## Ausgabepfade Für jede erkannte Quelle wird genau eine `.m4b` erzeugt und unter `out/` abgelegt. - Serie: - Ordner: `out///Book - - /` - Datei: ` - {}.m4b` - Einzelband: - Ordner: `out// - {}/` - Datei: ` - {}.m4b` Hinweis: `` ist die null‑aufgefüllte Folgennummer (Standard: 2 Stellen, z. B. `01`). ## Verwendete Tags - Autor → `writer` - Sprecher:in → `artist` - Titel → `album` - Jahr → `year` - Serie → `series`, Folgennummer → `series-part` ## Nutzung 1) Quellen in die passende Ordnerstruktur unter `src/` legen (siehe oben). 2) Skript ausführbar machen (einmalig): ``` chmod +x to-m4b.sh ``` 3) Konvertierung starten: ``` ./to-m4b.sh ``` Das Skript durchsucht `src/` rekursiv auf den erwarteten Ebenen, erzeugt pro gefundenem Hörbuch eine `.m4b` und schreibt Ausgaben nach `out/`. ## Konfiguration Die wichtigsten Einstellungen stehen am Anfang von `to-m4b.sh` und können bei Bedarf angepasst werden: ```bash # to-m4b.sh (Auszug) LEADING_ZEROES=2 # Stellen für Serienfolgen (z. B. 01, 02, ...) SRC="${script_dir}/src" # Quellverzeichnis OUT="${script_dir}/out" # Zielverzeichnis ``` Weitere relevante `m4b-tool`‑Parameter (im Skript `m4b-merge()`): - `--jobs=6` (Parallelität) - `--audio-samplerate=44100` - `--audio-quality=100` - Ausführung über `m4b-tool-libfdk` (AAC‑Encoder libfdk_aac) Wenn du `m4b-tool` lokal ohne Nix verwenden willst, kannst du den Aufruf in `m4b-merge()` entsprechend auf ein lokales `m4b-tool` ändern. ## Beispiele Serien‑Quelle (src): ``` src/WinterZeit Verlag/Das Schwarze Auge/Book 15 - 2022 - Auf Schusters Rappen/ 249_Das schwarze Auge_Teil 1 - Folge 15_ Auf Schusters Rappen.ogg 250_Das schwarze Auge_Teil 2 - Folge 15_ Auf Schusters Rappen.ogg ... ``` Serien‑Ergebnis (out): ``` out/WinterZeit Verlag/Das Schwarze Auge/Book 15 - 2022 - Auf Schusters Rappen/ 2022 - Auf Schusters Rappen.m4b ``` Einzelband‑Quelle (src): ``` src/Corvus Corax/2017 - Der Fluch des Drachen/ 101_Intro.flac 102_Nimmer mehr (Die Ballade von Adamas).flac ... ``` Einzelband‑Ergebnis (out): ``` out/Corvus Corax/2017 - Der Fluch des Drachen/ 2017 - Der Fluch des Drachen.m4b ``` ## Fehlersuche - „No book directories found …“: Struktur unter `src/` prüfen; siehe Abschnitt „Verzeichnisstruktur“. - „Skipping '…': could not parse …“: Ordnername an die erwartten Muster anpassen. - „nix: command not found“: Nix installieren oder den `m4b-tool`‑Aufruf auf ein lokales Binary umstellen. - „permission denied“ beim Start: `chmod +x to-m4b.sh` ausführen. ## Hinweise - Cover/weitere Dateien im Quellordner werden nicht explizit an `m4b-tool` übergeben; das Tagging beruht vollständig auf der Ordnerbenennung. - Unterstützte Audioformate werden automatisch erkannt; die Reihenfolge bestimmt `m4b-tool` anhand von Track‑Infos/Dateinamen.