Audio-Kapitel für Podcast-Apps
Drei Kapitel, die bei 0, 120 und 1800 Sekunden beginnen, werden zu einer Datei, aus der Podcast-Apps ein Inhaltsverzeichnis bauen und durch die Folge springen. Die Zeiten müssen immer vorwärts laufen, sonst wird nichts exportiert. Kostenlos in Ihrem Browser.
- Kostenlos
- Läuft in Ihrem Browser
- Ohne Anmeldung
- Ihre Daten bleiben auf Ihrem Gerät
Im Browser ausführen – kostenlos
Läuft direkt in Ihrem Browser – kostenlos. Ihre Datei verlässt Ihren Browser nicht und wird an keinen Server übertragen.
Produzierende kennen Abschnittstitel und Startzeitpunkt bereits; sie brauchen einen korrekten, app-lesbaren Export mit camelCase-startTime-Feldern, optionalem Artwork und Deep-Links sowie die Garantie, dass Zeitstempel nie rückwärts laufen.
Was eine Kapiteldatei für Ihre Hörer leistet
Podcast-Apps mit Kapitelunterstützung lesen die Kapitel nicht aus der Audiodatei selbst. Sie laden eine kleine separate Datei, die von der Folge in Ihrem Feed verlinkt ist, und zeigen damit ein Inhaltsverzeichnis, springen zu jedem Abschnitt und wechseln beim Abspielen das Bild. Jedes Kapitel braucht eine Startzeit in Sekunden ab Beginn der Aufnahme; ein Titel wird dringend empfohlen, damit Hörer lesbare Namen sehen. Sie können jedem Kapitel ein Bild und einen Link geben, ein Kapitel als stumm markieren, damit es nicht in der Liste erscheint, und bei Bedarf eine Endzeit festlegen.
Kapitel vorbereiten und Fehler vermeiden
Schreiben Sie die Abschnitte der Reihe nach auf, jeweils mit Titel und der Sekunde, in der sie beginnen, etwa ein Intro bei 0, das Hauptthema bei 120 und den Abschluss bei 1800. Das Werkzeug wandelt sie in das Standardformat um und liefert den Text, den Sie unter einer festen Webadresse ablegen. Der häufigste Fehler ist eine Startzeit, die sich wiederholt oder zurückspringt. Die Kapitel werden nie für Sie umsortiert, denn ein stilles Umsortieren könnte einen Fehler verbergen und das falsche Bild dem falschen Abschnitt zuordnen; stattdessen stoppt das Werkzeug und nennt die Zeile, die nicht passt.
So ist eine Kapiteldatei für Podcasts aufgebaut
Der Podcasting-2.0-Namespace verweist jede Episode auf eine externe Kapiteldatei mit dem MIME-Typ application/json+chapters. Jedes Kapitel braucht mindestens startTime als Gleitkommazahl in Sekunden ab Audio-Anfang; title ist dringend empfohlen, damit Hörerinnen und Hörer ein lesbares Inhaltsverzeichnis sehen. Optionale Kapitelfelder sind img für Abschnittsartwork, url für eine Webseite oder Shownotes, toc auf false für stille reine Metadaten-Marker und endTime, wenn Sie ein explizites Ende wünschen.
Die Kapitelreihenfolge wird validiert, nicht geraten: Die Fähigkeit sortiert ungeordnete Zeiten nie still um, weil ein stilles Umsortieren Produktionsfehler verdecken und falsches Artwork auf den falschen Abschnitt legen könnte. Stattdessen verlangt sie streng aufsteigende Startzeiten und scheitert klar, wenn eine spätere Zeile gleich oder früher als die vorige ist. Apps holen die Datei zur Wiedergabe, sodass Sie Titel korrigieren oder Bilder nach der Veröffentlichung ergänzen können, ohne die Episode neu zu encodieren.
Häufige Fragen
Was geschieht, wenn Startzeiten nicht streng aufsteigend sind?
Gleiche oder fallende Zeiten werden abgelehnt, damit Podcast-Apps nie ungeordnete Marker erhalten.
Kann ich Kapitelbilder und -links einbinden?
Ja. Optionale img- und url-Strings je Kapitel werden zu den Podcasting-2.0-Feldern img und url. Leere Zeichenketten entfallen im Export.
Wie füge ich die Kapitel zu meinem Podcast-Feed hinzu?
Legen Sie die Datei, die das Werkzeug liefert, unter einer festen Webadresse ab und verlinken Sie sie bei der Folge in Ihrem Feed als Kapiteldatei. Kompatible Apps laden sie, sobald die Folge abgespielt wird.
Kann ich einen Titel nach dem Veröffentlichen ändern?
Ja. Apps laden die Kapiteldatei erst beim Abspielen, daher können Sie Titel später korrigieren oder Bilder ergänzen und die neue Datei unter derselben Adresse ablegen, ohne die Aufnahme neu zu kodieren.
Kann ein Kapitel aus dem Inhaltsverzeichnis herausbleiben?
Ja. Markieren Sie es als stumm; es dient dann als Markierung, die Apps behalten, ohne sie den Hörern anzuzeigen. Standardmäßig erscheinen alle Kapitel in der Liste, Sie ändern also nur die, die verborgen bleiben sollen.
Verwandte Tools
Für Entwickler — API-Zugang
Alles auf dieser Seite ist auch per API verfügbar. Dieser Abschnitt richtet sich an Teams, die es in ihre eigenen Systeme einbinden möchten; alle anderen nutzen einfach das Tool oben.
Endpunkt
Authentifizierung per Bearer-Token. Ein einziger POST stellt die Aufgabe in die Warteschlange; das Ergebnis erhalten Sie per Webhook oder über einen signierten Link.
Aufruf aus Ihrem Stack
curl -X POST https://api.kit.forhosting.com/audio/audio-chapter-export-format \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"chapters":[{"title":"Intro","start_time":0},{"title":"Main topic","start_time":120,"img":"https://example.com/art/main.jpg","url":"https://example.com/notes/main"},{"title":"Outro","start_time":1800}]}'const res = await fetch("https://api.kit.forhosting.com/audio/audio-chapter-export-format", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"chapters": [
{
"title": "Intro",
"start_time": 0
},
{
"title": "Main topic",
"start_time": 120,
"img": "https://example.com/art/main.jpg",
"url": "https://example.com/notes/main"
},
{
"title": "Outro",
"start_time": 1800
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/audio/audio-chapter-export-format",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"chapters": [
{
"title": "Intro",
"start_time": 0
},
{
"title": "Main topic",
"start_time": 120,
"img": "https://example.com/art/main.jpg",
"url": "https://example.com/notes/main"
},
{
"title": "Outro",
"start_time": 1800
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/audio/audio-chapter-export-format", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"chapters":[{"title":"Intro","start_time":0},{"title":"Main topic","start_time":120,"img":"https://example.com/art/main.jpg","url":"https://example.com/notes/main"},{"title":"Outro","start_time":1800}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"chapters":[{"title":"Intro","start_time":0},{"title":"Main topic","start_time":120,"img":"https://example.com/art/main.jpg","url":"https://example.com/notes/main"},{"title":"Outro","start_time":1800}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/audio/audio-chapter-export-format", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Beispiel-Anfrage
{
"chapters": [
{
"title": "Intro",
"start_time": 0
},
{
"title": "Main topic",
"start_time": 120,
"img": "https://example.com/art/main.jpg",
"url": "https://example.com/notes/main"
},
{
"title": "Outro",
"start_time": 1800
}
]
}Beispiel-Antwort
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "audio.audio_chapter_export_format",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}Die API arbeitet asynchron: Sie erhalten sofort eine task_id. Polling ist mit 1 Anfrage pro Sekunde erlaubt.
Preis
Der Preis steht auf der Seite – keine Tokens, keine Credits. Fehlgeschlagene Aufgaben werden nicht berechnet.
Limits
max_mb | 200 |
max_minutes | 180 |
Fehler
| HTTP | Code | Bedeutung |
|---|---|---|
401 | unauthorized | Der API-Schlüssel fehlt oder ist ungültig – prüfen Sie den Authorization-Header (Bearer). |
402 | insufficient_balance | Ihr Guthaben reicht für diese Aufgabe nicht aus – Aufladungen verfallen nicht. |
404 | unknown_type | Unbekannter Aufgabentyp – prüfen Sie das Feld „type“ gegen den Katalog. |
429 | rate_limited | Zu viele Anfragen – warten Sie kurz; Polling ist mit 1 Anfrage pro Sekunde erlaubt. |
Technische Hinweise
Podcast-Apps mit Unterstützung für Podcasting-2.0-Kapitel erwarten eine kleine JSON-Datei, die vom RSS-Element der Episode verlinkt wird—nicht Kapitel-Tags, die im MP3 stecken. Diese Fähigkeit nimmt Ihre geordneten Kapitelzeilen—Titel plus Startzeit in Sekunden, mit optionalem Bild und URL pro Kapitel—und liefert das standardisierte versionierte chapters-Objekt sowie eine formattierte json_text-Zeichenkette, die Sie hosten und mit dem podcast:chapters-Tag referenzieren können. Sind die Startzeiten nicht streng aufsteigend, schlägt die Aufgabe mit invalid_input fehl, damit fehlerhafte Marker den Feed nie erreichen.
So sieht Podcasting-2.0-Kapitel-JSON aus
Diese Datei ist ein JSON-Objekt, dessen Pflichtschlüssel version (üblicherweise 1.2.0) und chapters sind—ein Array von Markern, geordnet nach aufsteigendem startTime. Optionale Dateiebene-Felder wie author, title, podcastName und description helfen Webplayern und Archiven, ohne zu ändern, wie Apps im Audio springen. Dieser Exporter mappt Ihre zeilenorientierte Eingabe—start_time und title je Kapitel, optional img und url—in diese camelCase-Form, damit Sie weder Klammern von Hand editieren noch die Versionszeichenkette vergessen. Hosten Sie den resultierenden json_text unter einer stabilen HTTPS-URL und fügen Sie podcast:chapters mit type application/json+chapters im Item hinzu.
Eingabevertrag, Antwortform und Validierungsregeln
Optionale Ausgabeschlüssel werden ganz weggelassen statt auf null gesetzt. Senden Sie per POST einen JSON-Body mit einem Pflicht-Array chapters aus mindestens einem Objekt. Jedes Objekt muss title als nicht leere Zeichenkette und start_time als endliche nicht negative Sekundenzahl enthalten (Aliasse wie startTime werden je Zeile akzeptiert). Optionale Felder pro Kapitel sind img und url als nicht leere Strings, toc als boolesch (false markiert ein stilles Kapitel; true ist Standard und entfällt im Export) sowie end_time als nicht negative Zahl nicht kleiner als der Start dieses Kapitels. Optionale Dateiebene-Strings—version (Standard 1.2.0), episode_title, author, podcast_name und description—werden bei Angabe in das chapters-Objekt kopiert. Bei Erfolg liefert der Body version, chapter_count, chapters als Podcasting-2.0-Array mit startTime-Schlüsseln, json_text als formatierte Upload-Datei, mime_type application/json+chapters sowie gelieferte Episodenmetadaten unter author, title, podcast_name und description. Validierungsfehler werfen invalid_input und werden nicht abgerechnet: fehlende chapters, leerer title, negative oder nicht endliche Zeiten, Ende vor Start, mehr als fünfhundert Zeilen oder Startzeiten, die nicht streng aufsteigend sind. Beispiel: drei Zeilen bei null, hundertzwanzig und eintausendachthundert Sekunden mit Bild und Link im mittleren Kapitel erzeugen ein chapters-Array mit drei Einträgen und einen json_text, der strukturell den öffentlichen Podcasting-2.0-Beispielen entspricht.
Wo ein deterministischer Kapitel-Exporter sich lohnt
Transkript- oder Kapitelvorschlags-Tools, die schlichte Titel-Sekunden-Paare ausgeben, können ihr Ergebnis hierher leiten und das app-seitige Format erhalten, ohne Podcasting-2.0-Wissen in jeden Client einzubetten. Fehlgeschlagene Validierung wird nicht berechnet. Kombinieren Sie diesen Exporter mit getrennten ASR-Kapitelgeneratoren, wenn Zeitstempel aus dem Audio erfunden werden müssen; nutzen Sie diesen Pfad, wenn Marker bereits bekannt sind und nur ein standardkonformer Export fehlt. Unabhängige Produzierende, die eine Episode in einer DAW abschließen, haben Zeitstempel bereits in Tabelle oder Shownotes; sie brauchen eine korrekte JSON-Datei, ohne den Namespace in jeder App per Versuch und Irrtum zu lernen. Weil die Implementierung pure parse der Stufe A ist, kostet jeder erfolgreiche Aufruf den veröffentlichten Basispreis $0.002 ohne Modell-Tokens und ohne ausgehendes Netz. Halten Sie Kapiteltitel kurz genug für mobile Inhaltsverzeichnis-UIs, bevorzugen Sie absolute HTTPS-URLs für img und url, und führen Sie den Formatter nach jeder Bearbeitung erneut aus, damit streng aufsteigende Ordnung erzwungen bleibt.
Integrationsbeispiele
Veröffentlichungsreife Kapitel aus der Notiztabelle
Fügen Sie Titel- und Startzeit-Zeilen aus dem Episodenplan ein, ergänzen Sie optionale Artwork-Links und laden Sie den Podcasting-2.0-json_text zum Hosten neben dem MP3 herunter.
Prüfungen in CMS- und Hosting-Pipelines
Rufen Sie die API aus dem Publish-Job auf, damit die Kapitelliste jeder Episode auf streng aufsteigende Zeiten geprüft wird, bevor der RSS-Tag podcast:chapters geschrieben wird.
Brücke von einfachen Markern zu App-JSON
Wandeln Sie Titel-plus-Sekunden-Ausgabe aus Editoren oder Transkript-Tools in camelCase-startTime-Kapitel um, ohne JSON-Klammern von Hand zu editieren.
Technische Fragen
Welches Format erzeugt der Audio-Kapitel-Export?
Podcasting-2.0-JSON-Kapitel: eine version-Zeichenkette (Standard 1.2.0), ein chapters-Array mit startTime und title (plus optionale img, url, toc, endTime) und eine formatierte json_text-Datei mit MIME-Typ application/json+chapters.
Wie hänge ich die Datei an meinen RSS-Feed an?
Hosten Sie json_text unter einer öffentlichen HTTPS-URL und fügen Sie <podcast:chapters url="…" type="application/json+chapters" /> am Episoden-Item hinzu. Apps holen die Datei zur Wiedergabe.
Was kostet das Formatieren von Audio-Kapiteln?
Das Browser-Tool ist kostenlos. API-Anfragen nutzen das vorausbezahlte KIT-Guthaben zu $0.002 pro erfolgreichem Aufruf; ungültige Eingabe wird nicht berechnet.