diff --git a/.gitignore b/.gitignore index 5ae08bf..050b3f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ ** !.gitignore +!README.md !to-m4b.sh !/out !/out/.gitkeep diff --git a/README.md b/README.md new file mode 100644 index 0000000..4f23964 --- /dev/null +++ b/README.md @@ -0,0 +1,154 @@ +# 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.