Untertitel
Dies ist eine Aufgabe, kein Schritt in einem Ablauf. Sie wird immer dann ausgeführt, wenn der Nutzer danach ruft – direkt nach dem Schnitt, aber auch erneut, wenn nachträglich zwei Sätze gelöscht wurden.
Es gibt nur eine Voraussetzung: Die Edit-List („Konto“) muss existieren. Nicht, weil die Untertitel nach dem Schnitt kommen, sondern weil sie ohne die Edit-List nicht wissen, welche Sätze erhalten geblieben sind und an welcher Sekunde im Endvideo sie jeweils beginnen.
Benötigt edit-list.json (Edit-List), transcript.json (Wort-für-Wort-Transkript)
Erzeugt subtitles.json
Nach der Ausführung stoppt der Skill und gibt keine Anweisung, was der Nutzer als Nächstes tun soll.
Lies zuerst den Phasenvertrag des Geschäfts-Skills und führe ihn aus. Die Kriterien finden sich in Untertitel-Korrekturregeln, die Schreibweise von Eigennamen im KI-Wörterbuch.
Wer bestimmt was
Dies ist das Fundament des Abschnitts; alles andere leitet sich daraus ab.
Schnitt (Koubo) bestimmt „welche Sätze bleiben und zu welchem Zeitpunkt“ ← die einzige Wahrheit für Timing
Untertitel bestimmt „welcher Text auf dem Bildschirm erscheint“ ← die einzige Wahrheit für Anzeige
Ein Untertitel-Bildschirm speichert eine Liste von Wort-IDs + den anzuzeigenden Text, keine Sekunden. Die Zeit wird jedes Mal aus der Edit-List berechnet. Dadurch gibt es keine zweite Zeitquelle, die abweichen könnte. Fehler werden bildschirmgenau gemeldet: „Die Wörter des 7. und 12. Bildschirms wurden geschnitten“ – nicht die vage Aussage „Untertitel könnten veraltet sein“.
Die Untertitel speichern bewusst ihren eigenen Text. Das Transkript antwortet auf „Was hat er gesagt?“, die Untertitel auf „Was soll der Zuschauer sehen?“ – Satzzeichen, weggelassene Füllwörter, die korrekte Schreibweise von Eigennamen – das darf ruhig unterschiedlich sein. Wenn man einen einzigen String zwingt, beides zu tun, kann man nie ein Komma in den Untertitel einfügen.
0. Bereitschaft
Führe zuerst die „Bereitschaftsprüfung“ aus Aktualisierungsprüfung aus – ob die Skills aktuell sind und die Runtime kompatibel ist; das Plugin-Stammverzeichnis wird dort ebenfalls ermittelt (alle <Plugin-Stamm> in diesem Dokument werden durch diesen tatsächlichen Pfad ersetzt). Nur bei „Bereit“ wird fortgefahren; bei „Neue Sitzung erforderlich“ oder „Anhalten“ wird gemäß dessen Anweisung verfahren (einschließlich des Verbots, eigene Ersatzoberflächen zu erstellen). Der Geschäfts-Skill enthält keine eigene Umgebungslogik.
Wenn das Bereitschaftsergebnis runtime.kind=desktop-managed ist, verwende direkt die bereits installierte stabile CLI der Desktop-App und denselben launchd/windows-task-Dienst; parst keine Electron-Pfade, installiert keine zusätzlichen Abhängigkeiten und startet keine zweite Runtime.
1. Eingangsbehauptungen
node "<Plugin-Stamm>/scripts/ensure-running.cjs" --json
node "<Plugin-Stamm>/scripts/videocut-cli.cjs" inspect "<Projektverzeichnis>" --json
| Behauptung | Bei Nichterfüllung |
|---|---|
edit-list.json existiert und enthält Segmente | Sage klar, dass die Edit-List fehlt; der Nutzer soll zuerst den Schnitt-Skill aufrufen. Nicht selbst schneiden. |
transcript.json existiert | Das Projekt ist nicht bereit; anhalten. Kein eigenes Transkript erstellen. |
Behaupte nicht source_cut.mp4 und starte keine Transkription. Die Untertitel brauchen beides nicht – siehe nächster Abschnitt.
2. Textkorrektur: Erst Wörterbuch, dann Manuskript
Keine erneute Transkription erforderlich. Das vorhandene Wort-für-Wort-Transkript enthält bereits die Zeitstempel; die Edit-List weiß, welche Segmente erhalten geblieben sind – die Position jedes Wortes im Endvideo wird berechnet, nicht durch erneutes Abhören ermittelt:
Die Sekunde des Wortes im Quellvideo → steht im Transkript
Welche Segmente erhalten geblieben sind → steht in der Edit-List
Die Sekunde des Wortes im Endvideo → aus beidem berechnet
Ein erneuter ASR-Durchlauf würde lediglich dasselbe noch einmal abhören – Zeit- und Geldverschwendung, und das Ergebnis wäre schlechter, weil Eigennamen erneut korrigiert werden müssten. (transcript retranscribe ist ein Überbleibsel des alten Designs, bei dem die Untertitel ihre Zeitachse aus dem Transkript des geschnittenen Videos bezogen. Seit dem Wechsel zur Wort-ID-Methode ist dieses Problem gelöst. Verwende es nicht für die Untertitel.)
Es gibt zwei verschiedene Werkzeuge, beide müssen verwendet werden.
# Wörterbuch: Feste Schreibweise für diesen Sprecher, keine Belege erforderlich
node "<Plugin-Stamm>/scripts/videocut-cli.cjs" transcript dictionary "<Projektverzeichnis>" --dictionary "<Plugin-Stamm>/references/ai-term-dictionary.md" --json
# Manuskript: Nur wenn der Autor ein Skript hat, jeder Ersetzung müssen Belege beiliegen
node "<Plugin-Stamm>/scripts/videocut-cli.cjs" transcript align "<Projektverzeichnis>" --script "<Sprachaufnahme-Manuskript>" --json
Wörterbuch Immer so schreiben Ignoriert Kontext, ändert direkt, listet die geänderten Stellen auf
Manuskript Nur bei Kontextübereinstimmung Beleg für jede Stelle erforderlich; bei Nichtübereinstimmung wird „unsicher“ gemeldet, keine Vermutung
Warum das Wörterbuch zwingend erforderlich ist und das Manuskript allein nicht ausreicht: Bei Sprachaufnahmen wird oft wiederholt. In einem realen Projekt wurde derselbe Satz viermal aufgenommen, sodass Kontexte wie „Verbindungsgabel“ oder „Gabel ist“ mehrfach vorkommen. transcript align kann dann nur „unsicher“ melden – es vermutet nicht, denn ein falsch geschriebener Name ist schlimmer als ein falsch gehörtes Wort. Bei drei Vorkommen von „Gabel“ ändert es nur eines. Das Wörterbuch hat dieses Problem nicht: In den Werken dieses Sprechers ist „Gabel“ einfach „X“.
Es gibt nur ein Wörterbuch, auf Plugin-Ebene in references/ai-term-dictionary.md: Es korrigiert das Transkript, und sowohl der Schnitt-Skill als auch der Untertitel-Skill verwenden dasselbe Transkript. Erstelle kein zweites Wörterbuch innerhalb dieses Skills.
Nach der Korrektur muss die Liste der Änderungen geprüft werden. Das Wörterbuch ignoriert den Kontext und kann daher auch Fehler machen – z.B. wenn der Sprecher wirklich „Skills“ (Claude Skills, Plural-Eigenname) gesagt hat, normalisiert es zu „Skill“. Wenn du einen Fehler siehst, korrigiere das Wörterbuch; wende keinen Workaround über die Befehle an.
transcript align meldet nur, ändert nichts. Um seine Vorschläge anzuwenden, konvertiere die corrections in [{wordId, text}] und führe Folgendes aus:
node "<Plugin-Stamm>/scripts/videocut-cli.cjs" transcript correct "<Projektverzeichnis>" --file "<Korrekturdatei>" --json
Nachdem das Transkript korrigiert wurde, werden alle Untertitel-Bildschirme, die diese Wörter referenzieren, im selben Schritt aktualisiert und als subtitles.updated gemeldet. Wenn ein Bildschirm nicht geändert werden kann (weil die Zeile manuell überschrieben wurde), wird dies in needsAttention gemeldet, damit der Nutzer es sieht – keine Vermutung.
Wenn weder das Wörterbuch noch das Manuskript eine korrekte Schreibweise bestätigen können, darf nicht geraten werden. Melde es dem Nutzer, damit er das Wörterbuch ergänzt – beim nächsten Video ist es dann automatisch korrekt. Einmal richtig geraten bedeutet, dass man beim nächsten Mal wieder raten muss.
3. Bildschirmaufteilung
node "<Plugin-Stamm>/scripts/videocut-cli.cjs" subtitle build "<Projektverzeichnis>" --json
Vier Regeln, in dieser Reihenfolge:
① Hier wurde Text gelöscht Die gelöschten Passagen liegen zeitlich nebeneinander, sind aber inhaltlich unverbunden.
„Stummgeschaltet“ zählt nicht – das Entfernen einer Pause mitten im Satz darf den Satz nicht teilen.
② Jedes Satzzeichen Von Volcengine bereitgestellt, sowohl Satzpunkt als auch Komma zählen – **gleiche Granularität wie der Schnitt-Skill**,
beide Grenzen an derselben Stelle. Satzzeichen sind stärker als jedes zeitliche Indiz: Ein Sprecher kann
zwei Sätze ohne Atempause sprechen oder mitten in einem Satz eine Pause machen.
③ Absatzgrenze + Pause **Nur verwenden, wenn das Wort kein Satzzeichen hat.** Es gilt „Wenn kein Satzzeichen, wird anhand des Absatzes
das Satzende erraten“. Wenn ein Satzzeichen vorhanden ist, sollte Regel ② (mit Komma) greifen – diese berücksichtigt,
ob der Bildschirm lang genug ist; Regel ③ tut das nicht. (Wird Regel ③ auch bei Grenzen mit Satzzeichen ausgelöst,
führt das in realen Projekten von 40 auf 43 Bildschirme, also mehr unnötige Trennungen.)
④ Der Zuschauer hört eine lange Pause Für eine Trennung innerhalb eines Satzes ist eine deutlich längere Stille erforderlich.
Der Schnitt-Skill und der Untertitel-Skill verwenden dieselben Satzzeichen in derselben Granularität: Ein Komma = ein Absatz / ein Bildschirm.
Fragmente (ein oder zwei Zeichen) werden zusammengeführt, aber nicht über einen Satzpunkt hinweg – „Siehst du“ beginnt einen neuen Satz, ist kein Ende des vorherigen; wenn man es nach vorne anhängt, erhält man „…Grok CLI aufrufen Siehst du“ – zwei Sätze verschmelzen.
Kurze Sätze, die der Sprecher schnell spricht, bleiben erhalten (in einem realen Projekt: „jeden Morgen“ und „Aufgabe ausführen“ jeweils 0,6 Sekunden). Das ist die tatsächliche Sprechweise – kein Alarm notwendig. Ein Komma = ein Bildschirm führt zwangsläufig zu solchen kurzen Bildschirmen; sie zu alarmieren bedeutet, gegen normales Sprechen zu alarmieren – dann werden Warnungen bald ignoriert.
Bleibt ein Bildschirm länger als nötig, wird er gleichmäßig auf mehrere Bildschirme aufgeteilt, ein Bildschirm = eine Zeile. Entstehen dabei ein- oder zweizeichige Fragmente, war die Grenze bei Regel ② eigentlich kein Satzpunkt – das Fragment wird in den vorherigen Bildschirm zurückgeführt.
Der Befehl meldet vier Dinge, die alle geprüft werden müssen:
stale Bildschirme, die durch den Schnitt geändert wurden – genaue Angabe: welcher Bildschirm, welche Wörter fehlen
tooFast zu viele Zeichen, zu wenig Lesezeit
transcriptMoved Das Transkript ist nicht mehr das ursprüngliche
Falls bereits Untertitel existieren – hier anhalten und nachfragen
Ohne --replace wird der Befehl direkt abgelehnt. Dies ist der einzige Punkt in diesem Skill, an dem die Zustimmung des Nutzers eingeholt werden muss, denn --replace überschreibt die manuelle Aufteilung und Formulierung, die der Nutzer möglicherweise bereits vorgenommen hat – das Produkt kann dies nicht selbst rückgängig machen.
Der Nutzer möchte nur ein paar Zeichen ändern Nicht „build“. Lass ihn im Studio direkt bearbeiten oder sag ihm, welche Bildschirme er ändern soll.
Der Nutzer möchte komplett neu beginnen Erst nach Bestätigung mit --replace.
4. Überprüfung: Bildschirm für Bildschirm im Studio
node "<Plugin-Stamm>/scripts/videocut-cli.cjs" open "<Projektverzeichnis>" --json
Nach dem Öffnen zum linken Bereich „Untertitel“-Tab wechseln. Eine Zeile = ein Bildschirm: links die Nummer und die Zeit, rechts der Text – direkt anklicken und bearbeiten.
- Enter = neuen Bildschirm an der Cursorposition beginnen
- Rücktaste am Zeilenanfang = mit dem vorherigen Bildschirm zusammenführen
- Rechter Bereich „Parameter → Untertitel“: vier Voreinstellungen auswählen, ein Stil für das gesamte Video
- Die Untertitel sind direkt auf dem Bildschirm sichtbar; Position und Schriftgröße sind proportional zum Bild – Vorschau und Export verwenden dieselben Zahlen
Bei der Überprüfung sollte der Nutzer mindestens Folgendes bestätigen: Sind die Eigennamen korrekt? Fehlen Zeichen? Ist der Zeilenumbruch flüssig lesbar? Bleibt genug Zeit, um einen Bildschirm zu lesen?
5. Ende bei subtitles.json
Dieser Abschnitt ist abgeschlossen. Keine physikalischen Schnitte, kein Storyboard, keine Animationen, kein Rendering des fertigen Videos, und keine Aufforderung an den Nutzer, den nächsten Schritt zu tun.
Der Bericht muss getrennt ausgewiesen werden: Product-strukturiertes Readback ist API/readback PASS; die tatsächliche Frame-Prüfung im selben Projekt-Browser ist visual frame PASS; wenn niemand die Untertiltel tatsächlich mit dem Video abgeglichen hat, lautet der Status human listening UNVERIFIED. Keine Verwendung von DOM-, Screenshot- oder Datei-Scans als Ersatz.
Grenze: Einbrennen in das Video ist nicht Teil dieser Aufgabe
Die Ausgabemethode ist Einbrennen in das Video, aber das Video wird erst im Export-Schritt gezeichnet. Die Ausgabe der Untertitel ist subtitles.json – alle Angaben darin sind Prozentsätze des Bildschirms; der Export wandelt sie je nach Ausgabeauflösung in Pixel um. Beide Seiten verwenden dieselben Zahlen.
Im heute exportierten mp4 sind keine Untertitel enthalten – dieser Schritt wurde noch nicht durchgeführt. Der Bericht muss diese Konsequenz klar angeben. Sag nicht einfach „Untertitel fertig“ – der Nutzer würde annehmen, sie seien im Endvideo enthalten.
Wiederherstellung und Fehlerbehandlung
subtitles_exist: Es gibt bereits Untertitel. Erst nachfragen, nicht direkt--replace.revision_conflict: Eine andere Stelle schreibt gleichzeitig. Neu einlesen, nicht automatisch überschreiben.- Das Wörterbuch meldet „Zeile N nicht lesbar“: Das ist eine Tabellenzeile mit fehlerhaftem Format. Nur Zeilen im Format
| Korrekte Schreibweise | Häufig falsch erkannt |werden erkannt; Prosa und Listen werden ignoriert. transcript correctmeldet „must not change any word id, time or gap flag“: Der Korrekturvorschlag enthält Änderungen an der Zeit. Korrigiere nur den Text.runtime_unhealthy: Nicht in einer Schleife neu installieren.- Bei keinem Fehler darf „Transkription abgeschlossen“ als „Untertitel fertig“ gemeldet werden. ASR liefert das Rohmaterial, nicht das Endprodukt.