Blog Digitalgesellschaft Verwaltungsbetrieb Textarchiv Textarchiv Walter Kirk (✝) Impressum
Audiobook erstellen (.m4b) - III: Ergänzungen
Dateiliste erstellenohne .extmit .extDateinamen umbenennenBindestrich durch Leerzeichen ersetzenLeerzeichen durch Bindestrich ersetzenDateinamen durch dreistellige Nummer ersetzenErweiterung von Dateinamen hinzufügen oder entfernenTitellisteEpisodentitel auslesenEpisodentitel umbenennenPlaylist erstellenPodgetUpdate der Podcast mit CronjobCronjobBash-ScriptVergleich Inhalt - DateilisteCheckliste Dateinamen ändernMindmapZusammenfassung
An dieser Stelle noch ergänzende Hinweise, die während einer Bearbeitung von Audiodateien auftretende Schwierigkeiten beseitigen können:
test@geraet:~$ sed 's/.mp3//g' dateiliste.txt | sort -V > output.txt
Hiermit wird .mp3 in jeder Zeile einer vorhandenen Dateiliste gelöscht. Man erhält die Titel ohne .ext.
xxxxxxxxxx
test@geraet:~$ ls *.mp3 | sort -V >dateiliste.txt
Die Sortierung erfolgt in der Reihenfolge der Dateinamen: sort -V
Damit Dateinamen nicht durch kryptische Zeichen bei einer Sicherung ersetzt werden, ist es sinnvoll, etwaige Leerzeichen durch einen Bindestrich zu ersetzen. Für die Übernahme der Kapitelnamen in eine meta.txt wiederum sind Leerzeichen zu entfernen.
xxxxxxxxxx
test@geraet:~$ find . -type f -name '*-*' -exec rename 's/-/ /g' {} \;
xxxxxxxxxx
test@geraet:~$ find -name "* *" -type f | rename 's/ /-/g'
In dieser Form kann jedes beliebige Zeichen ersetzt bzw. eingefügt werden, z.B. der Unterstrich (_).
Im Original liegen die .wav regelmäßig in der Form Track 1.wav, Track 2.wav, etc. vor. Um eine nummerische Form einzuhalten, lassen sich die .wav umbenennen zu 001.wav, 002.wav, etc.:
Alternative
# Zähler initialisieren
counter=1
# Durch alle Dateien im Ordner und seinen Unterordnern iterieren
find . -type f -name "*.wav" | sort -V | while read file; do
# Dateiname ohne Erweiterung und Pfad
filename=$(basename "${file%.wav}")
# Neue Datei mit nummeriertem Namen erstellen
new_filename=$(printf "%03d.wav" $counter)
# Datei umbenennen
mv "$file" "$(dirname "$file")/$new_filename"
# Zähler inkrementieren
((counter++))
do
Alternative
xxxxxxxxxx
# https://stackoverflow.com/questions/3211595/renaming-files-in-a-folder-to-sequential-numbers
find . -type f -name '*.wav' | sort -V | nl -nrz -w3 -v1 | while read -r n f; do
mv "$f" "$n.wav"
done
Hinzufügen
1. Alternative (ohne Ordner)
xxxxxxxxxx
test@geraet:~$ for f in *; do if [ "${f##*.}" != "$f" ]; then
echo "Datei $f hat bereits eine Endung, überspringe..."
else
mv "$f" "$f.mp3"
fi
done
Vorhandene Unterordner werden umbenannt. Deshalb nur in Verzeichnissen ohne Unterordner ausführen.
2. Alternative
xxxxxxxxxx
find . -type f -not -name "*.*" -exec mv {} {}.mp3 \;
Vorhandene Unterordner werden nicht umbenannt.
3. Alternative
Weitere Methoden:
a) Hinzufügen von .mp3, unabhängig von der vorhandenen Erweiterung:
xxxxxxxxxx
test@geraet:~$ for file in *; do if [ -f "$file" ]; then mv "$file" "$file.mp3" fi done
b) Hinzufügen von .mp3 bei Dateien ohne eine ext
xxxxxxxxxx
test@geraet:~$ for file in *; do if [[ -f "$file" && "$file" != *.* ]]; then mv $file" $file.mp3" fi done
c) Ersetzen einer vorhandenen ext mit .mp3:
xxxxxxxxxx
test@geraet:~$ for file in *.*; do if [ -f "$file" ]; then mv "$file" ${file%.*}.mp3" fi done
Entfernen
xxxxxxxxxx
test@geraet:~$ for v in *.mp3 ; do mv "$v" "$(basename "$v" .mp3)"; done
Die Audiodateien können entsprechend angepasst werden: .wav, opus, m4b, etc..
Sind die vorhandenen .mp3 bereits mit Titelangaben als Tag gekennzeichnet, lassen sich diese Titel-angaben mit Hilfe des Programms mp3info auslesen.
xxxxxxxxxx
test@geraet:~$ mp3info -p "%t\n" *.mp3 >titelliste.txt
Der Schalter \n bewirkt, dass jeder Titel in einer neuen Zeile in der titelliste.txt eingetragen wird. Allerdings werden nur Daten ausgelesen, die der IDTag-Version 1 entsprechen. Mit eyeD3 kann dieses Manko ausgeglichen werden:
xxxxxxxxxx
test@geraet:~$ eyeD3 *.mp3 | grep "title:" | cut -d ":" -f2- >titelliste.txt
Mit Hilfe der titelliste.txt lassen sich die Dateien entsprechend umbenennen:
1. Alternative
xxxxxxxxxx
test@geraet:~$ i=1; for file in *.mp3; do echo "$file" wird zu "$(sed -n ${i}p titelliste.txt)"; mv "$file" "$(sed -n ${i}p titelliste.txt)"; i=$((i+1)); done
2. Alternative
xxxxxxxxxx
test@geraet:~$ for file in *.mp3; do read line; mv -v "${file}" "${line}"; done < titelliste.txt
Das Ergebnis wird in ähnlicher Form dargestellt:
xxxxxxxxxx
test@geraet:~$ for file in *.mp3; do read line; mv -v "${file}" "${line}"; done < titelliste.txt
Datei umbenannt '00.mp3' -> '0 Trailer'
Datei umbenannt '01.mp3' -> '1 Die Ankunft'
Datei umbenannt '02.mp3' -> '2 Der Zwiespalt'
Datei umbenannt '03.mp3' -> '3 Die Weihnachtsferien'
Datei umbenannt '04.mp3' -> '4 Der Onkel'
Datei umbenannt '05.mp3' -> '5 Die Skitou'
Datei umbenannt '06.mp3' -> '6 Die Krankheit'
Datei umbenannt '07.mp3' -> '7 Die Schikanen'
Datei umbenannt '08.mp3' -> '8 Die Mutter'
Datei umbenannt '09.mp3' -> '9 Die Großeltern'
Datei umbenannt '10.mp3' -> '10 Die Weihnachtsgeschenke'
Datei umbenannt '11.mp3' -> '11 Die Laotische Mutter'
Datei umbenannt '12.mp3' -> '12 Der Vater'
Datei umbenannt '13.mp3' -> '13 Die Schule'
Datei umbenannt '14.mp3' -> '14 Die Freunde'
Datei umbenannt '15.mp3' -> '15 Die Musik'
Datei umbenannt '16.mp3' -> '16 Die Liebe'
Datei umbenannt '17.mp3' -> '17 Die Krankheit'
Datei umbenannt '18.mp3' -> '18 Die Familie'
Datei umbenannt '19.mp3' -> '19 Die Zukunft'
3. Alternative
xxxxxxxxxx
test@geraet:~$ paste <(ls *.mp3) titelliste.txt | while read file line; do mv -v -n "$file" "$line"; done
Das Audioformat ist den eigenen Verhältnissen anzupassen: .mp3, m4a, .wav, etc.
Damit alle Dateien in der richtigen Reihenfolge umbenannt werden, ist die Nummerierung mit zwei oder drei Stellen im Titel erforderlich.
Eigene Audiodateien in den unterschiedlichen Formaten können in Playlists erfasst werden:
xxxxxxxxxx
test@geraet:~$ find -type f -iname "*.mp3" -or -iname "*.flac" -or -iname "*.m4a" > playlist.m3ux
Eine Alternative zu den üblichen Podcatchern ist das Programm Podget, das über keine eigene Benutzeroberfläche verfügt, jedoch gerade für das zeit-geplante Abrufen (cronjob) und die Verwaltung eigener Kategorien (Kinder, Krimi, Lesung, Märchen, etc.) weitestgehend an die eigenen Bedürfnisse angepasst werden kann. Das Kommandozeilen-Programm wird installiert mit:
xxxxxxxxxx
test@geraet:~$ sudo apt install podget
Die Verwaltung erfolgt mit Einstellungen in zwei Dateien: 1. podgetrc (a), 2. serverlist (b), die im Verzeichnis /home/nutzer/.config/podget gespeichert sind. In der Datei a werden die Einstellungen für den Speicherort der Podcast vorgenommen. In der Datei b werden Daten für das Herunterladen in der Form URL/Kategorie/Ordnername eingetragen.
Die Nutzung von Kategorien hilft, den Überblick zu behalten. Das setzt bei der Einrichtung die Vorarbeit voraus, solche Kategorien festzulegen und sodann in der Datei b einzutragen. Beispiel für eine serverlist:
xxxxxxxxxx
# Default Server List for podget
#
# Default format with category and name:
# <url> <category> <name>
#
# Alternate Formats:
# 1. With a category but no name.
# <url> <category>
# 2. With a name but no category (2 ways).
# <url> No_Category <name>
# <url> . <name>
# 3. With neither a category or name.
# <url>
#
# For additional formating documentation, please refer to 'man podget'.
#
#FEEDS:
# ----------------------------------------------------------------------------------------------------------------------------------
https://www.ndr.de/media/podcast5992.xml kinder der-ard-kinder-adventskalender-2024
xxxxxxxxxx
# gPodder
30 6 * * * /usr/bin/bash /home/nutzer/speicherort/update-gpodder.sh >/home/nutzer/verzeichnis/log/$(date +\%Y\%m\%d-\%H\%M\%S)-gpodder.log 2>&1
# Podget
0 8 * * * /usr/bin/podget -s oder
0 8 * * * /usr/bin/bash /home/nutzer/speicherort/update-podget.sh >/home/nutzer/verzeichnis/log/$(date +\%Y\%m\%d-\%H\%M\%S)-podget.log 2>&1
Speicherort/Verzeichnis sind den eigenen Verhältnissen anzupassen.
Das Bash-Script update-gpodder.sh:
xxxxxxxxxx
gpo -v -q update && gpo -q -v download && gpo -q -v sync
Der Zusatz sync ist nur dann notwendig, wenn ein zusätzlicher Speicherort (Gerät, Server) in gPodder eingerichtet ist.
Das Bash-Script update-podget.sh
xxxxxxxxxx
podget -s
Die Tabelle veranschaulicht im Vergleich die Übertragung eines vorhandenen Inhaltsverzeichnisses mit Angabe der Track-Nummern in die korrespondierende Form der umbenannten Dateien. Außerdem ist ersichtlich, das einige Dateien zusammen gefasst worden sind: Die zusammen gehörenden .mp3 eines Kapitels sind zu einer .mp3 zusammen gefügt. Die Teile und Kapitel sind in beiden Fassungen grundsätzlich identisch.
Einleitung | 001 | 0-0-Einleitung-|--0-1-Der-Riss-in-der-Gesellschaft |
---|---|---|
Der Riss in der Gesellschaft | 001 | 0-2-Aktive-und-passive-Stabilität |
Aktive und passive Sensibilität | 002 | 0-3-Die-vier-Dimensionen-der-Sensibilität |
Leiblich, psychisch, ethisch, ästhetisch: die vier Dimensionen der Sensibilität | 010 | 0-4-Ziel-dieses-(Hör-)Buches |
Ziel dieses (Hör-)Buches | 012 | 1-0-Prozess-der-Sensibilisierung-|-1-1-Geschichte-der-Zivilisation-mit-Norbert-Elias |
I Prozess der Sensibilisierung | 012 | 1-2-Das-sensible-Selbst |
Geschichte der Zivilisation mit Norbert Elias | 012 | 1-3-Verfeinerung-des-Verhaltens |
Das sensible Selbst | 014 | 1-4-Disziplinierung-und-Empfindsamkeit |
Verfeinerung des Verhaltens | 017 | 1-5-Höhepunkt-als-Kipppunkt? |
Disziplinierung und Empfindsamkeit | 018 | 2-0-Die-Kraft-der-Wunde-|-2-1-Resilient-oder-sensibel:-Selbsttest |
Höhepunkt als Kipppunkt? | 020 | 2-2-Nietsche-oder-Levinas:-Ein-Streitgespräch |
II Die Kraft der Wunde | 023 | 2-3-Problematische-Verabsolutierungen |
Resilient oder sensibel: Selbsttest | 023 | 2-4-Sensible-Resilienz |
Nietzsche contra Lévinas: ein Streitgespräch | 025 | 2-5-Resiliente-Sensibilität? |
Problematische Verabsolutierungen | 029 | 3-0-Das-Jahrhundert-der-Empathie-|-3-1-MeToo-avant-la-lettre |
Sensible Resilienz | 030 | 3-2-David-Hume-und-die-Gefühlsansteckung |
Resiliente Sensibilität? | 032 | 3-3-Rousseaus-Feminisierung-der-Moral |
III Das Jahrhundert der Empathie | 033 | 3-4-Empfindsamkeit-mit-Sade |
MeToo avant la lettre | 033 | 3-5-Höhere-Stufe-der-Zivilisation? |
David Hume und die Gefühlsansteckung | 036 | 4-0-Die-Gewalt-in-uns-|-4-1-Freud-und-das-unvergängliche-Primitive |
Rousseaus Feminisierung der Moral | 043 | 4-2-Ernst-Jüngers-inneres-Erlebnis |
Empfindsamkeit mit Sade | 050 | 4-3-Schmerz-als-Konstanzprinzip |
Höhere Stufe der Zivilisation? | 053 | 4-4-Die-Gewalt-der-Disziplinierung |
IV Die Gewalt in uns | 054 | 4-5-Kalte-Persona-und-Ich-Panzer |
Freud und das unvergängliche Primitive | 054 | 4-6-Was-ist-ein-Opfer? |
Ernst Jüngers inneres Erlebnis | 057 | 5-4-Algophobie? |
Schmerz als Konstanzprinzip | 060 | 6-0-Sprachsensibilität-|-6-1-Realitätseffekte |
Die Gewalt der Disziplinierung | 062 | 6-2-Derrida-und-Butler:-Spiel-als-Widerstand |
Kalte Persona und Ich-Panzer | 066 | 6-3-Verletzende-Rede |
Was ist ein Opfer? | 068 | 6-4-Kontextsensivität |
V Trauma und Trigger | 069 | 6-5-Ambivalenz-der-Sprache |
Der Organismus als Bläschen | 069 | 6-6-Anmaßender-Anspruch? |
Opfer: Vom Zählen zum Erzählen | 071 | 7-0-Die-Grenzen-der-Einfühlung-|-7-1-In-einer-anderen-Haut |
Vom Trieb zum Trigger: die posttraumatische Belastungsstörung | 074 | 7-2-Verschlossenes-Ich:-Thomas-Nagel-und-Jean-Améry |
Algophobie? | 077 | 7-3-Betroffemheitsperpektive-und-Standpunktheorie |
VI Sprachsensibilität | 078 | 7-4-Empathie-und-Ich-Verlust |
Realitätseffekte | 078 | 7-5-Ich-fühle-was,-was-du-nicht-fühlst |
Derrida und Butler: Spiel als Widerstand | 081 | 7-6-Intensiver-fühlen? |
Verletzende Rede | 083 | 8-0-Die-Gesellschaft-der-Sensibilitäten-|-8-1-Hochsensibilität-und-das-Paradigma-des-Besonderen |
Kontextsensitivität | 084 | 8-2-Resonanzsensibilität |
Ambivalenz der Sprache | 087 | 8-3-Paul-Verléry-und-der-Safe-Space |
Anmaßender Anspruch? | 088 | 8-4-Snow-Flakes-versus-OK-Boomer |
VII Die Grenzen der Einfühlung | 089 | 8-5-Fass-mich-nicht-an? |
In einer anderen Haut | 089 | 9-0-Abstandsregeln-|-9-1-Modernes-Distanzverlangen-und-anthropologische-Berührungsfurcht |
Verschlossenes Ich: Thomas Nagel und Jean Améry | 094 | 9-2-Regulierung-des-Sozialen |
Betroffenenperspektive und Standpunkttheorie | 096 | 9-3-Feinste-Vibrationen:-Plessners-Plädoyer-für-den-Takt |
Empathie und Ich-Verlust | 099 | 9-4-Was-ist-zumutbar? |
Ich fühle was, was du nicht fühlst | 100 | 10-0-Schluß-|-10-1-Das-Tocquevielle-Paradox |
Intensiver fühlen? | 102 | 10-2-Struktur-und-Individuum |
VIII Gesellschaft der Sensibilitäten | 103 | 10-3-Der-zweifache-Blick |
Hochsensibilität und das Paradigma des Besonderen | 103 | 10-4-Das-neue-Bündnis |
Resonanzsensibilität | 107 | |
Paul Valéry und der Safe Space | 109 | |
„Snowflakes“ versus „OK Boomer“ | 112 | |
Fass mich nicht an? | 113 | |
IX Abstandsregeln | 114 | |
Modernes Distanzverlangen und anthropologische Berührungsfurcht | 114 | |
Regulierung des Sozialen | 118 | |
Feinste Vibrationen: Plessners Plädoyer für den Takt | 121 | |
Was ist zumutbar? | 123 | |
X Schluss | 124 | |
Das Tocqueville-Paradox | 124 | |
Struktur und Individuum | 127 | |
Der zweifache Blick | 130 | |
Das neue Bündnis | 134 |
1. Nummerierung 2. titelliste.txt erstellen 3. titelliste.txt prüfen, ggf. korrigieren, mit Nummern versehen und einlesen 4. Tag "title" setzen 5. ggf. .ext hinzufügen
Mit Hilfe eines Bash-Scripts lassen sich diese Vorgänge für .mp3 vereinfacht erledigen:
xxxxxxxxxx
# Stand: 2024-12-26
# 1. Nummerierung
for f in $(find . -type f -name "*.mp3"); do
num=$(printf "%04d" $(seq -f "%03g" 1)); # 4d ist vierstellige Ziffer
new_name="${num}${f##*/}"
mv "$f" "$new_name"
done
# 2. Titel aus Tag-Informationen auslesen und in .txt schreiben
eyeD3 *.mp3 | grep "title:" | cut -d ":" -f2- >titelliste.txt
cp titelliste.txt titel.txt # Kopie für nächsten Schritt erforderlich
# 3. titelliste.txt mit Nummern versehen
awk '{print NR, $0}' titel.txt > titelliste.txt
# 4. Dateien mit titelliste.txt umbenennen
i=1; for file in *.mp3; do echo "$file" wird zu "$(sed -n ${i}p titelliste.txt)"; mv "$file" "$(sed -n ${i}p titelliste.txt)"; i=$((i+1)); done
# 5. Tag title korrepondierend zum Dateinamen setzen
for x in *; do
eyeD3 --title="${x%.*}" "$x"
echo $a
done
# 6. Erweiterung hinzufügen (.ext)
for f in *; do
if [ "${f##*.}" != "$f" ]; then
echo "Datei $f hat bereits eine Endung, überspringe..."
else
mv "$f" "$f.mp3"
fi
done
Die Blogserie Audiobook erstellen (.m4b) I - III zeigt auf, welche Möglichkeiten in einem Betriebssytem vorhanden sind, wenn man die System eigenen Mitteln nutzt. Das von Apple Inc. prinzipiell für die eigenen Betriebssyteme entwickelte Format .m4b, das heute auch eine ISO-Norm darstellt, ist in den übrigen genutzten Betriebssystemen nicht weit verbreitet. Es bietet jedoch erheblich bessere Möglichkeiten wie Kapiteleinteilung und höhere Klangqualität als andere Formate. Für Linux ist aktuell keine Software bekannt, die das Format zur Erstellung unterstützt.
Die Nutzung der System eigenen Mittel zur Erstellung von .m4b ist daher auf einem Linux-System sinnvoll, aber auch notwendig. So lassen sich jedenfalls Musik und Sprache in einem einzigen Format zusammen fassen, in Kapitel aufteilen und abspielen. Außerdem lässt sich die Anzahl der Dateien mit dieser Methode umfassend verringern.
Wolfgang Kirk
Veröffentlicht: 2024-12-16, 08:00 Uhr aktualisiert: 2025-03-10, 13:30 Uhr