⚠ Vertragsstatus: Handwerk ist aktuell, Code ist es nicht
Das Output-Framework dieses Stacks ist Remotion + React (
/hyperframes-core). Die Bewegungshandwerkskunst hier gilt weiterhin: Timing, Easing-Entscheidungen, die Form einer Bewegung, die benannten Regeln und Blaupausen. Der Code gilt nicht: Beispiele und Adapter sind gegen die ausgemusterte HTML + pausierte GSAP-Timeline-Laufzeitumgebung geschrieben.Übersetzen Sie beim Lesen:
Hier In Remotion gsap.fromTo(el, {x:-40}, {x:0, dauer:0.5})interpolate(frame, [0, SEK(0.5)], [-40, 0], {…"clamp"})ease: "back.out(1.7)"spring({frame, fps, config:{dämpfung}}), nach Augenmaß angepassteine pausierte Timeline unter window.__timelines[id]nichts; jeder Wert ist eine Funktion von useCurrentFrame()data-start/data-durationauf einem Clip<Sequence from>/durationInFrames, in Bildernein CSS-Keyframe oder -Übergang bildabgeleiteter Inline- style(CSS-Animation rendert nicht)Fügen Sie niemals ein Beispiel aus dieser Fähigkeit unverändert in ein Remotion-Projekt ein.
HyperFrames Audio
Ein Mix ist eine Reihe von Beziehungen, kein Stapel von Prozessoren. Zwei Spuren, die einzeln gut klingen, können zusammen unerträglich sein, und die Lösung ist fast nie, eine leiser zu drehen – es geht darum, herauszufinden, worüber sie streiten, und es dem zu geben, der es braucht. Jedes Werkzeug hier existiert, um eine dieser Beziehungen auszudrücken.
Effekte leben auf dem Element als data-fx-chain, und Vorschau und Rendering verwenden
dieselbe Web-Audio-Grafik – das Studio in einem Live-Kontext, die Engine in einem Offline-Kontext
innerhalb des Browsers, den sie bereits steuert. Es gibt eine Implementierung jedes Effekts,
also ist das, was Sie beim Scrubbing hören, das, was geschrieben wird. Sie stimmen nie zweimal ab.
Clip-Timing bleibt /hyperframes-core: Audio-/Video-Trimmungen und Quellbereiche verwenden
data-start, data-duration und data-media-start, und Überblendungen überlappen
Clips auf verschiedenen Spuren. Diese Fähigkeit verwaltet die Ein-/Ausblendung von platzierten Spuren,
Überblendungshüllkurven, Spurverstärkung/Spurlautstärke, Lautstärke- und Effektautomation,
Ducking/Voiceover-Carve und die Effektkette. /media-use verwaltet Beschaffung,
Generierung und Vorverarbeitung.
Konstantes data-playback-rate (0.1..5) ist rendertolerant für Bild und
tonhöhenerhaltenen Ton, wenn übereinstimmende Audio-/Videoelemente dasselbe Timing,
dieselbe Quellverschiebung und dieselbe Rate verwenden. Quellgeschwindigkeitsrampen werden nicht
unterstützt, da es keine Ratenhüllkurve gibt; verarbeiten Sie ein abgeleitetes synchronisiertes Asset vor.
HyperFrames bietet keine automatische Wellenformsynchronisation oder Driftkorrektur.
Für kopierbare Schnitt-/Überblend-/Zeitlupenrezepte verwenden Sie /hyperframes-core → references/editing-recipes.md.
Drei Attribute tragen alles, alle auf dem Audio-/Videoelement selbst:
| Attribut | Enthält |
|---|---|
data-fx-chain | die Effekte, in Signalreihenfolge |
data-automation | Hüllkurven auf der Lautstärke dieser Spur oder ihren Effektparametern |
data-fx-carve | die eigenen Einstellungen des Carve, damit es neu abgeleitet werden kann |
Die ausgelieferten Effektfamilien sind Gain, EQ (Hochpass, Tiefpass, Peak, Shelves), Kompressor, Limiter, Gate, Sättigung, Delay, Hall, Chorus, Phaser und Bitcrush.
Exaktes JSON für jeden und die Regeln, die eine Spur erfüllen muss: references/attributes.md.
Jeder Effekt mit seinen Parametern, Bereichen und Einheiten: references/fx-registry.md.
Wie man herausfindet, was mit einer Datei falsch ist, die man nicht hören kann:
references/diagnosis.md.
Presets, benannte Jobs und Ein-Knopf-Profile, plus eine Symptom-zu-Lösung-Tabelle:
references/presets.md – lesen Sie das, bevor Sie eine Kette von Hand bauen, denn eines
der Presets oder benannten Jobs benennt das Problem normalerweise bereits.
Wie es zusammenhängt
Zwei Authoring-Oberflächen schreiben diese Attribute; zwei Laufzeitumgebungen lesen sie durch dieselben Builder. Diese gemeinsame Mitte ist der Grund, warum die Vorschau das Rendering vorhersagt.
flowchart TB
voice["Voice-Spur<br/>Mediendatei"]
bed["Musikbett<br/>Mediendatei"]
subgraph AUTHOR["Authoring – die einzigen Dinge, die Attribute schreiben"]
panel["Studio<br/>Voiceover-Carve-Steuerung"]
script["scripts/carve.mjs<br/>erkennt das Paar, standardmäßig dynamisch"]
analysis["core/audioCarve.ts<br/>carveProfile · analyseCarveBands<br/>analyseCarveDuck · analyseCarveDynamics"]
panel --> analysis
script --> analysis
end
voice --> analysis
bed --> analysis
subgraph ATTRS["Auf das Bettelement geschrieben"]
carveAttr["data-fx-carve<br/>Quelle · Stärke · Dynamik"]
chainAttr["data-fx-chain<br/>Peaking xN + Gain, getaggt mit fromCarve"]
autoAttr["data-automation<br/>eine Spur pro gecarvtem Parameter"]
end
analysis --> carveAttr
analysis --> chainAttr
analysis --> autoAttr
subgraph SHARED["Eine Implementierung, von beiden gelesen"]
build["audioFxGraph.ts · buildFxChain"]
sched["audioFxAutomation.ts · scheduleChainAutomation"]
end
chainAttr --> build
autoAttr --> sched
build --> preview["Vorschau<br/>Live AudioContext<br/>attachElementFxChain"]
sched --> preview
build --> render["Rendering<br/>OfflineAudioContext im kopflosen Browser<br/>applyAudioFxChain"]
sched --> render
preview --> heard["was Sie beim Scrubbing hören"]
render --> wav["verarbeitete WAV<br/>+ chainTailSeconds, damit der Mix den Ausklang durchlässt"]
wav --> mix["Engine · audioMixer<br/>Lautstärkespur hier in das PCM eingebacken, nicht in der Grafik"]
mix --> out["der gerenderte Mix"]
edit["Bearbeiten des Attributs während der Wiedergabe"] -.->|MutationObserver| preview
Die eigenen Einstellungen des Carve werden nie bei der Wiedergabe gelesen – die Kette und Spuren,
die es erzeugt hat, werden abgespielt. data-fx-carve existiert, damit die Stärke bei einem
vorhandenen Carve geändert werden kann, anstatt sie aus den Filtern zurückraten zu müssen.
Innerhalb eines gecarvten Betts durchläuft das Signal zuerst die Einbrüche, dann den Pegelabgleich, dann alles, was Sie selbst gebaut haben – weshalb ein Limiter, den Sie hinzufügen, immer noch als letzte Begrenzung fungiert:
flowchart LR
src["decodiertes Bett"] --> p1["Peaking<br/>400 Hz"]
p1 --> p2["Peaking<br/>1 kHz"]
p2 --> p3["Peaking<br/>1,6 kHz"]
p3 --> g["Gain<br/>Pegelabgleich"]
g --> hand["eigene Effekte<br/>z. B. Limiter"]
hand --> dest["Spurverstärkung, dann raus"]
l1["Spur fx.n1.gain"] -.->|"Hüllkurve des Voice-<br/>Pegels in diesem Band"| p1
l4["Spur fx.n4.gain"] -.->|"wie stark das Bett<br/>insgesamt duckt"| g
Ein statischer Carve ist dieselbe Grafik mit festen Werten und überhaupt keinen Spuren.
Finden Sie zuerst heraus, was falsch ist
Die folgende Tabelle geht von „es klingt dröhnend“ aus – was voraussetzt, dass jemand bereits zugehört und das gesagt hat. Wenn Sie eine Datei und „behebe das“ bekommen, haben Sie keinen solchen Satz und Sie können nicht zuhören, also müssen Sie messen. Eine Regel regiert alles:
Das absolute Spektrum einer einzelnen unbekannten Stimme kann nicht diagnostiziert werden. Formanten sind ±10 dB, Grundfrequenzen liegen bei 85–255 Hz, und Sätze fallen um 5–6 dB ab, wenn sie enden. Jeder dieser Werte liest sich für sich genommen als Defekt, und jeder einzelne von ihnen ist der Sprecher.
Vergleichen Sie also, und vergleichen Sie mit etwas innerhalb derselben Datei: dem sauberen Original, falls vorhanden, ansonsten den Pausen – was in einer Lücke hörbar ist, ist additiv, und das Spektrum der Lücke ist der Kanal und nicht die Stimme. Der Vergleich mit einem veröffentlichten Durchschnittsspektrum oder einer synthetisierten Kontrollstimme funktioniert nicht: Zwei Sprecher unterscheiden sich mehr als die meisten Defekte, und beide falschen Antworten in der Evaluation hinter dieser Anleitung kamen genau daher.
Wenn es kein Original und keine nutzbare Stille gibt, ist ein statischer tonaler Defekt tatsächlich unterbestimmt. Sagen Sie das und bieten Sie die Messwerte an, die passen, anstatt einen auszuwählen und eine Kette darauf aufzubauen.
Befehle, Fallstricke und erprobte Rezepte: references/diagnosis.md. Lesen Sie es,
bevor Sie eine Datei diagnostizieren, die niemand beschrieben hat.
Beginnen Sie mit dem Symptom
Sobald Sie das Band und die Art kennen, benennen Sie, was mit dem Audio falsch ist. Die meisten schlechten Audiodateien sind eines oder zwei davon, und jedes hat eine ausgelieferte Antwort:
| Es klingt wie | Greifen Sie zu |
|---|---|
| Brummen oder dumpfes Poltern darunter | rumble-cut, oder ein highpass bei 80 Hz |
| Dröhnend, brustig | Zähme Dröhnen Job (200 Hz) |
| Gedämpft, hinter Pappe | Reduziere Matsch Job (250 Hz) |
| Wörter schwer zu verstehen | Füge Klarheit hinzu Job (3 kHz) oder carve das Bett |
| Schrill und ermüdend | Weiche Härte Job (3,2 kHz) |
| Manche Wörter viel lauter als andere | Gleichmäßigkeit mit einem Kompressor oder Gleiche Pegel aus |
| Raumton zwischen Sätzen | room-gate |
| Stimme und Musik kämpfen | Voiceover-Carve – kein EQ auf einem von beiden |
| Trocken, nirgendwo aufgenommen | room-tight oder room-natural |
| Einfach „Amateur“ | voice-clean, das vier der obigen in Reihenfolge ist |
Vollständiger Katalog, was jedes Preset enthält, das Bandvokabular und was bewusst NICHT
abgedeckt wird (De-Essing, Rauschentfernung, Tonanpassung):
references/presets.md.
Subtrahieren Sie, bevor Sie hinzufügen, gleichen Sie den Pegel nach dem Filtern an, Beziehungen nach dem Pegel, Charakter und Begrenzung zuletzt. Jeder Schritt ändert, was der nächste hört – ein Kompressor, der vor einem Hochpass eingestellt wird, verbringt seine Zeit damit, Brummen zu jagen.
Greifen Sie nach einer Familie basierend auf dem Problem, nicht dem Namen
Filter (highpass, lowpass, peaking, lowshelf, highshelf) entscheiden,
welche Frequenzen eine Spur belegen darf. Dies ist das erste Werkzeug für zwei
Quellen, die kollidieren, weil Kollisionen in Bändern passieren: Ein Bett und eine Stimme wollen
beide 1–3 kHz, und dem Bett dies zu nehmen, kostet das Bett weit weniger, als es dem Mix kostet,
das Ganze leiser zu drehen. Ein Hochpass auf einer Stimme ist die Standardlösung
für Brummen; ein Tiefpass verdunkelt oder dämpft absichtlich.
Dynamikprozessoren (gain, kompressor, limiter, gate) entscheiden, wie sich der Pegel
einer Spur über die Zeit verhält. Kompression verringert den Abstand zwischen Laut und Leise,
damit die leisen Teile angehoben werden können. Ein Limiter ist eine Begrenzung – er formt
nichts, er stellt sicher, dass nichts darüber hinausgeht. Ein Gate entfernt, was unter einem
Schwellwert liegt, und so schalten Sie den Raumton zwischen Phrasen aus. gain ist eine
einfache Pegelstufe, und sie ist das, was eine Automationsspur reitet, wenn eine Spur
aus dem Weg gehen muss.
Nichtlineare (saturate, bitcrush) verändern die Wellenform, wodurch Obertöne
hinzugefügt werden, die nicht da waren. Greifen Sie danach, wenn eine Spur Charakter oder
Rauheit statt Korrektur braucht – und denken Sie daran, dass sie generativ ist: Sie macht eine
dünne Quelle dichter, nicht sauberer.
Zeitbasierte (delay, reverb, chorus, phaser) versetzen eine Spur in einen Raum oder
geben ihr Breite. Diese können einen Mix am leichtesten ruinieren, weil ein Ausklang oder eine
verstimmte Kopie denselben Raum belegt, den eine Stimme braucht. Verwenden Sie sie auf dem Ding,
das hinter etwas anderem sitzen soll, und halten Sie den Nassanteil niedriger, als es in
Isolation richtig klingt.
Die Kette ist seriell: Jeder Effekt verarbeitet das, was der vorherige produziert hat. Also geht korrigierendes Filtern früh, Charakter in der Mitte, und ein Limiter zuletzt, wo er tatsächlich als Begrenzung wirken kann.
Voiceover-Carve
Das Problem, das es löst. Ein Musikbett unter einer Stimme macht die Stimme schwer verständlich. Der Reflex ist, das ganze Bett zu ducken, was funktioniert und das Bett seine ganze Präsenz kostet – die Musik wird für das gesamte Voiceover schlaff. Aber die Stimme braucht nicht das gesamte Spektrum. Sie braucht die wenigen Bänder, die sie tatsächlich belegt. Carve nimmt nur diese, und das Bett behält seine Tiefen und seine Höhen, also ist es immer noch Musik, während die Stimme immer noch verständlich ist.
Es ist eine Beziehung, kein Effekt. Die Einstellungen leben auf dem Bett – der Spur, die verarbeitet wird – und sie nennen die Stimmen, auf die gehört wird, genau wie ein Sidechain-Kompressor: Sie wählen die Spur, die leiser wird, und wählen aus, was sie leiser macht. Setzen Sie niemals einen Carve auf eine Voice-Spur. Eine Stimme, die gegen sich selbst gecarvt wird, ist ein Fehler, keine subtile Mix-Entscheidung.
Jede Stimme, nicht nur eine. sources ist eine Liste, weil ein Bett normalerweise unter
einer ganzen Sequenz läuft – einem Erzähler, einer Interviewantwort, einem zweiten Moderator.
Sie werden auf die eigene Uhr des Betts summiert, bevor etwas gemessen wird (mixCarveSources),
also deckt eine Analyse alle ab: Die Bänder stammen von der gesamten Sprache, und
die Hüllkurven steigen immer dann an, wenn etwas davon passiert. Stimmen, die nie spielen,
während das Bett läuft, werden weggelassen; sie können es nicht maskieren.
Ein Regler. strength ist 0..1 und leitet alles ab: wie tief zu schneiden, wie
viele Bänder, wie breit, wie sehr die Verständlichkeit gegenüber der rohen Sprachleistung zu
bevorzugen ist, wie weit der Pegel fallen darf, wie weit unter der Stimme zu zielen ist. Diese
sechs bewegen sich in jedem echten Mix zusammen – ein sanfter Carve ist ein flacher Schnitt in
wenigen Bändern mit wenig Ducking, ein harter ist tiefer in mehr Bändern mit mehr – also sind
sie eine Beziehung, die einmal in carveProfile geschrieben wird. Standard ist 0.25 – ein 6
dB Einbruch in drei Bändern mit 6 dB Pegelreserve, hörbar, ohne wie ein Loch zu klingen. Bei
0.5 erreicht der Einbruch 10 dB, was der Punkt ist, an dem ein Carve als Effekt und nicht
als Platz für die Stimme wahrgenommen wird; darüber ist bewusstes Terrain für ein lautes Bett
unter einer leisen Stimme. 0 ist nur spektral – ein Band, überhaupt kein Pegelabgleich.
Carve standardmäßig. Ein Bett, das unter einer Erzählung läuft, will einen Carve; es ist kein Polierschritt, den man macht, wenn Zeit ist. Platzieren Sie beide Spuren, führen Sie den untenstehenden Befehl aus, hören Sie zu. Überspringen Sie es nur, wenn es keine Erzählung gibt, unter der die Musik sitzen soll – ein Musikvideo, eine Titelkarte, ein Montageschnitt zum Track.
Es folgt immer der Stimme. Es gibt keinen statischen Modus: Eine feste Tiefe verdünnt das Bett durch jede Pause, und sobald man beide gehört hat, gibt es keinen Grund zu zögern.