chore: update .gitignore to include README.md; add README.md with project details and usage instructions

This commit is contained in:
Philip Henning 2025-09-10 15:42:25 +02:00
parent 7f8c2202b0
commit 7611a9f4cb
2 changed files with 155 additions and 0 deletions

1
.gitignore vendored
View file

@ -1,5 +1,6 @@
**
!.gitignore
!README.md
!to-m4b.sh
!/out
!/out/.gitkeep

154
README.md Normal file
View file

@ -0,0 +1,154 @@
# to-m4b
Kleines BashSkript, das HörbuchOrdner 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`)
- AudioQuellen 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/<Autor>/<Serie>/Book <Folge> - <YYYY> - <Titel> {<Sprecher>}/
```
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/<Autor>/<YYYY> - <Titel> {<Sprecher>}/
```
Die Angabe `{<Sprecher>}` 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/<Autor>/<Serie>/Book <NN> - <YYYY> - <Titel>/`
- Datei: `<YYYY> - <Titel> {<Sprecher>}.m4b`
- Einzelband:
- Ordner: `out/<Autor>/<YYYY> - <Titel> {<Sprecher>}/`
- Datei: `<YYYY> - <Titel> {<Sprecher>}.m4b`
Hinweis: `<NN>` ist die nullaufgefü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` (AACEncoder 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
SerienQuelle (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
...
```
SerienErgebnis (out):
```
out/WinterZeit Verlag/Das Schwarze Auge/Book 15 - 2022 - Auf Schusters Rappen/
2022 - Auf Schusters Rappen.m4b
```
EinzelbandQuelle (src):
```
src/Corvus Corax/2017 - Der Fluch des Drachen/
101_Intro.flac
102_Nimmer mehr (Die Ballade von Adamas).flac
...
```
EinzelbandErgebnis (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 TrackInfos/Dateinamen.