/docs · SignalLab · Intro
Ein brauchbares Tag-Schema für Audio-Archive
Was in deine Audio-Metadaten gehört, damit nachgelagerte Tools sie auch wirklich nutzen können.
Die meisten Audio-Archive gehen am selben Problem zugrunde: schlechte Metadaten. Dateien werden als final_v2_FINAL.wav mit einem vagen Ordnernamen hochgeladen, und ein Jahr später findet niemand mehr irgendetwas wieder.
Ein Tag-Schema, das überlebt, hat ein paar feste Regeln und viel Nachsicht bei allem anderen. Hier ist das Schema, das SignalLab für jede indexierte Datei ausgibt, und warum sich jeder Tag seinen Platz verdient.
Die Kern-Tags
Jeder Tag folgt dem Muster namespace:value, damit nachgelagerte Tools sauber filtern und gruppieren können.
content:*
Der wichtigste. voice, music, mixed, noise oder silence. Das ist der Tag, den dein Editor zuerst braucht, noch vor allem anderen. Ist eine Datei content:silence, muss nichts Nachgelagertes sie überhaupt ansehen.
format:*, sample-rate:*, channels:*, bit-depth:*
Technische Fakten. Nützlich zum Filtern (“zeig mir nur 48kHz/24-bit-Voiceovers”) und zum Routen von Dateien in die richtige Pipeline (“komprimierte Dateien durchlaufen zuerst einen Re-Encode-Schritt”).
brightness:*, dynamics:*
Buckets für spektralen und dynamischen Charakter: dark/balanced/bright/very-bright und flat/compressed/modern/dynamic. Diese sind nützlich für die Suche und für nachgelagerte Verarbeitungsentscheidungen. Ein Voiceover mit dem Tag brightness:very-bright braucht wahrscheinlich einen De-Esser.
issue:*
Die am unmittelbarsten verwertbare Familie. issue:clipping, issue:noisy, issue:dc-offset, issue:lots-of-silence. Diese lassen sich direkt auf QA-Workflows abbilden: “jede Datei mit issue:clipping beim Ingest abweisen” ist eine einzeilige Regel.
hint:*
Weichere Signale. hint:has-headroom, hint:loud, hint:mono-content-in-stereo. Diese sind für Tools gedacht, die Kontext wollen, aber nicht daran scheitern sollten.
Was das Schema bewusst nicht enthält
- Stimmungs-Tags (
happy,melancholicusw.). Diese sind allein aus dem Signal unzuverlässig und legen dich auf ein kontrolliertes Vokabular fest, das schlecht altert. - Genre-Tags. Dasselbe Problem, nur schlimmer. Genre-Klassifizierung ist eine Aufgabe für die Nutzerseite, nicht für die Metadaten-Schicht.
- Sprecheridentität. Personenbezogen. Sollte opt-in sein und in einem separaten Namespace leben.
- Freitext-Beschreibungen. Wunderbar für Menschen, furchtbar für nachgelagerte Automatisierung.
Die Disziplin lautet: tagge nur, was sich zuverlässig berechnen und zuverlässig konsumieren lässt. Der Rest gehört in eine von Menschen kuratierte Schicht oder in die nutzerseitige App, nicht in das Schema.
Ein durchgerechnetes Beispiel
Für ein 12-minütiges Podcast-Interview mit 48k/16-bit Stereo:
content:voice
content-confidence:0.82
format:audio/wav
sample-rate:48000
channels:stereo
bit-depth:16-bit
brightness:balanced
dynamics:modern
duration:720
peak:-2.1dB
rms:-19.4dB
noise-floor:-52.1dB
hint:has-headroom
Zwölf Tags. Auf jeden lässt sich abfragen, auf jeden filtern, jeder wurde automatisch berechnet. Kein “interview”, kein “Alex_and_Sara_episode_42”, kein “tolle Folge, aber der Raum klingt komisch”. Das gehört in dein CMS.
Warum das wichtig ist
Audio ist ein elendes Format zum Durchgrep’en. Der einzige Grund, warum ein Audio-Archiv über ein paar tausend Dateien hinaus skaliert, ist die Metadaten-Schicht. Ein Schema wie dieses ist genau das, was einen nachgelagerten Editor sagen lässt: “Zeig mir jede Voice-Content-Datei unter fünf Minuten, kein Clipping, brightness balanced, aufgenommen seit März.” Ohne das bittest du jemanden, sich alles anzuhören.
Verwandt
More in SignalLab docs
- Practical
Streaming-Clipping-Erkennung im großen Maßstab
Wie man Clipping in Audio bereits beim Ingest erkennt, ohne die ganze Datei zu dekodieren.
- Deep
Segmentierung von Sprecherwechseln: der pragmatische Stack
Diarisierung ist ein schwieriges ML-Problem. Die Segmentierung von Sprecherwechseln, die günstige Variante, ist gut genug gelöst, um sie überall einzusetzen.