Communitygithub.com

qiaomu-screen2video: Aufnahme → fertige zweisprachige Demo

Macht aus einer vorhandenen Bildschirmaufnahme mit Sprechertext ein fertiges Video: optionale Mikro-Synchronisierung und Entrauschung, Spracherkennung, bereinigte chinesisch–englische Untertitel mit Wort-Highlights, Pfeile, Spotlights, Kapitelkarten, Sticker, leichte Originalmusik und Cover, gerendert mit FFmpeg/ASS.

Was ist qiaomu-screen2video: Aufnahme → fertige zweisprachige Demo?

Schritt 2 des Rezepts Produkt-Demovideo (vollständige Demo), aus joeseesun/qiaomu-screen2video (erstellt am 2026-10-13, v0.16). Die README zeigt einen echten FFmpeg-Render mit hervorgehobenen zweisprachigen Untertiteln. Behält die Originalstimme, beschleunigt Tutorials synchron auf 1,35x, nutzt Bildschirm-OCR-Glossare und Bewegungserkennung und zählt nur tatsächlich erzeugte Assets.

Funktioniert mit✓Claude Code✓Codex CLI~Cursor
npx skills add joeseesun/qiaomu-screen2video

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Qiaomu Screen2Video

Bestehender Bildschirm-Mitschnitt + Erzählung → optionales Ausrichten/Rauschunterdrückung → ASR → Textbereinigung/Übersetzung → semantischer Bewegungsplan → ASS/FFmpeg-Final Cut. Titelbild und Hintergrundmusik können parallel nach der Transkription vorbereitet werden. Nur tatsächlich erhaltene Assets werden als abgeschlossen gezählt.

Standardeinstellungen

  • Originalton vollständig erhalten, keine Kürzung von Füllwörtern oder Pausen. Bildschirm-Tutorials standardmäßig mit speed: 1.35 synchron beschleunigt (Bild, Erzählung und Untertitel); wenn der Benutzer explizit Originalgeschwindigkeit wünscht, auf 1.0 setzen. Untertitel entfernen bedeutungslose „ähm, ah, dann“ usw., behalten aber logisch aufeinanderfolgende „dann“, Verneinungen, Zahlen und Eigennamen. Originaltranskription und Textabweichungen bleiben erhalten.
  • Feste Standardkombination signature: Chinesisch LXGW WenKai Regular 400 (霞鹜新晰黑 Regular 400), Englisch Atkinson Hyperlegible Next SemiBold 600. Chinesisch klar strukturiert, leicht menschlich, aber nicht übermäßig rund; Englisch verstärkt die Unterscheidung leicht verwechselbarer Buchstaben und Zahlen; geeignet für zweisprachige Untertitel auf kleinen Handybildschirmen. Beide Upstream-Schriften und ihre Lizenzen (Chinesisch IPA Font License 1.0, Englisch OFL-1.1) werden mit dem Skill geliefert und zur Laufzeit in den Cache kopiert.
  • Chinesisch weiße Schrift mit schwarzem Rand, Englisch schwarze Schrift mit weißem Rand; Chinesisch oben, Englisch unten. Einheitliche Untertiteleinheiten teilen sich Zeitcodes. Basis-Schriftgröße für 1080 Höhe: 56/38, Englisch etwa 68% von Chinesisch; Chinesisch verwendet 1.2px, 55% undurchsichtigen schwarzen Schatten, Englisch 0.8px, 40% undurchsichtigen schwarzen Schatten, Rand und Schatten werden proportional zur Bildhöhe skaliert. Zwei Zeilen mit kompaktem Film-Untertitel-Abstand, englische Basislinie am unteren Rand etwa im 7,5%-Sicherheitsbereich. Nicht die Jianying „Schriftgröße 7“ mit FFmpeg 7px verwechseln.
  • Standardmäßig inhaltsgesteuerte Bewegungen aktiviert: Stichwortwörter mit Zeitstempeln verwenden sonnengelbe Wort-für-Wort-Hervorhebung; Schlussfolgerungen, Zahlen und Produktnamen können kurze Blüten-Schriftzüge erhalten; explizite UI-Aktionen verwenden Pfeile, Rahmen und Spotlight-Masken; nur echte Strukturwechsel erhalten Kapitelkarten. Alle Dauern werden anhand der endgültigen Timeline des fertigen Videos gemessen und müssen speed berücksichtigen: Vollbild-Kapitelkarten mindestens 1,8 Sekunden, normalerweise 2,2–4,0 Sekunden je nach Textmenge; bei fertigen Videos unter 60 Sekunden standardmäßig maximal 1 Karte, andere Übergänge durch Blüten-Schriftzüge oder UI-Hinweise. Blüten-Schriftzug, Hinweis und Kapitelkarte gleichzeitig nur ein Hauptvisuell. Begleitende pop/click/whoosh/chime werden alle vom Skript originell synthetisiert, standardmäßig leicht eingemischt, ohne externe Soundeffekt-Copyright-Materialien. Markenfarben fest: Baum-Schwarz #111513, Sonnengelb #F05A3C, Warmweiß #F5F0E8. Zuerst Schnittmethode lesen, genaues Schema in Semantische Bewegungen.
  • Ursprüngliches Bildseitenverhältnis, Inhalt und Pixelgröße bevorzugt erhalten. Standardmäßig Film-Untertitel-Stil overlay, keine automatische Hinzufügung von schwarzem Balken unten. Chinesisch über Englisch, Englisch nahe dem unteren Bildrand im 7%-Sicherheitsbereich; bei tatsächlicher Verdeckung zuerst Untertitelposition oder Umbruch anpassen, nur bei expliziter Auswahl durch den Benutzer band verwenden.
  • Titelbild standardmäßig 0,7 Sekunden im Vorspann; verschiebt sowohl Originalvideo als auch beide Untertitel nach hinten. Wenn Benutzer nur separates Titelbild wünscht, intro_seconds: 0 setzen.
  • Abspann fix standardmäßig terminal 6 Sekunden: ca. 3 Sekunden für Einblenden des Avatars, Terminal-Tippen und Kontenzeilen-Einlauf, vollständiges Bild etwa 2,15 Sekunden gehalten, dann 0,7 Sekunden Überblende und etwa 0,15 Sekunden reines Schwarz am Ende. Text verwendet leicht transparenten, dunklen Schatten, der mit der Schriftgröße skaliert und sich sanft vom dunklen Hintergrund abhebt; keine Leuchtschrift. Kontenbereich fix: X, GitHub, öffentlicher Account „向阳乔木推荐看“ und Website qiaomu.ai, jedes mit entsprechendem Icon. Automatisch je nach Quellvideo-Seitenverhältnis in horizontales oder natives Hochformat umstellen; Zuschneiden des horizontalen Abspanns zur Vortäuschung von Hochformat verboten.
  • Alle fertigen Videos messen die endgültige Mischlautstärke und schreiben sie in output/render.json. Standardmäßig auf -17 LUFS-I, LRA Ziel 7 LU, True Peak nicht höher als -1,5 dBTP: zu leise wird angehoben, zu laut abgesenkt; bei Abweichung über ±1 LU oder True Peak über -1 dBTP wird nicht ausgeliefert. voice_lufs nur für besonders instabile Originalstimmen, standardmäßig null; siehe Lautstärke und Hörgefühl.
  • Hintergrundmusik standardmäßig reine Instrumentalmusik. Tutorials mit „klar, konzentriert, vorwärts treibend“, standardmäßig 96–112 BPM, leichte Percussion, einfache kurze Motive und zurückhaltende Bässe; „fröhlich“ nicht als heftige Beats, starken Drop oder dominante Melodie umsetzen. Leise Lautstärke, halbsinusförmiges Einblenden 0,5 Sekunden, Ausblenden 3 Sekunden, während des Sprechens Sidechain abgesenkt; Musik muss gesamten Abspann und schwarzes Ende abdecken, Sidechain nach Ende der Stimme natürlich lösen, Musik leicht ansteigen, gemeinsam mit Bild auf Null. Ausgewählte Tonspur ist Sidechain-Eingang.
  • Jeder Schritt aktualisiert review.html, ohne auf das Öffnen, Auswählen oder Bestätigen durch den Benutzer zu warten. Benutzerfeedback beeinflusst die folgenden oder eine Neuberechnung; HTML selbst kann keine Aufgaben starten.

Schnellpfad (Standardmäßig in dieser Reihenfolge, um Nacharbeit zu reduzieren)

  1. init → ASR (im Hintergrund); gleichzeitig visual.py analyze (ca. 0,4× der Quellänge): Kamerabewegung, stabiles Fenster, OCR-Bildschirmwortliste. ASR liest automatisch die Wortliste als Prompt und führt bei abnormalen Wortzeiten (einzelnes Zeichen über mehrere Sekunden) automatische Neuerkennung und Zeitkorrektur durch.
  2. Sobald Transkription vorliegt: Gegen work/visual-analysis.json.vocabulary korrigieren Produktnamen/Modell-Schreibweisen (Whisper-Prompt-Wörter reichen nicht, müssen manuell abgeglichen werden), captions.json schreiben (Zusammenführungen, Splits, neu getimte Untertitel erhalten neue ID + parent_ids), motion-plan.json, brief.json.
  3. Parallel: Drei Titelbild-Hintergründe generieren (einmal drei Aufrufe), music_synth.py für Hintergrundmusik, outro_compose.py.
  4. motion Validierung → einmal render → Einzelbilder extrahieren + segmentierte Lautstärkeprüfung → Auslieferung. Nur einmal Render des fertigen Videos; nach Benutzerfeedback erneuter Render.
  5. Vor Auslieferung dem Benutzer den Pfad des fertigen Videos mitteilen, dann Skill-Verbesserungen etc. durchführen.

Start und Ausführung

Der Skill-Pfad nimmt das Verzeichnis dieser SKILL.md als Basis. Persönlicher Quellcode nur unter /Users/joe/Nutstore Files/.agents/skills/qiaomu-screen2video; andere Fundorte verwenden symbolische Links. Portable Installation ist nicht auf diesen absoluten Pfad angewiesen.

# Umgebung nur einmal erstellen; Standardschriftarten für Untertitel sind mit dem Skill verpackt, andere optionale Schriftarten nach Bedarf cachen.
uv venv ~/.cache/qiaomu-screen2video/venv
uv pip install --python ~/.cache/qiaomu-screen2video/venv/bin/python 'fonttools[woff]' pillow numpy opencv-python-headless ocrmac
# Im Folgenden bezieht sich $PY auf das Python dieser Umgebung, $SKILL auf das Skill-Wurzelverzeichnis, $JOB auf das diesmalige Ausgabeverzeichnis.
"$PY" "$SKILL/scripts/fonts.py"
# Hintergrundmusik mit echten Instrumentenklängen (empfohlen, einmalig): FluidSynth + GeneralUser GS (32 MB, kommerziell nutzbar); bei Fehlen automatischer Rückfall auf reine Code-Synthese.
brew install fluid-synth   # Linux: apt install fluidsynth
mkdir -p ~/.cache/qiaomu-screen2video/soundfonts && curl -fL -o ~/.cache/qiaomu-screen2video/soundfonts/GeneralUser-GS.sf2 \
  https://raw.githubusercontent.com/mrbumpy409/GeneralUser-GS/684543d5e5efaef08d02be50dcda8d552478fa60/GeneralUser-GS.sf2
"$PY" "$SKILL/scripts/s2v.py" init "$VIDEO" --project "$JOB"
# Bei Bedarf Rauschunterdrückung oder unabhängige Tonaufnahme-Ausrichtung vorher das folgende local_audio.py ausführen, dann ASR starten.
"$PY" "$SKILL/scripts/visual.py" analyze "$JOB"   # Bildschirmwortliste und Kamerabewegung für ASR, Untertitel und Callout
"$PY" "$SKILL/scripts/asr.py" "$JOB" --engine auto --context 'Produktnamen und Terminologie dieses Videos'

System-FFmpeg muss libass enthalten; Skript erkennt bevorzugt ffmpeg-full auf macOS. Fehlende Abhängigkeiten nur nach Bedarf ergänzen, kein qiaomu-cut oder gesamtes Videoframework laden. Vor der Erkennung gemäß ASR Engine und Zeitgenauigkeit bestimmen.

Optionale Verarbeitung der Erzähl-Audio

Wenn der Benutzer Rauschunterdrückung oder eine externe Mikrofonaufnahme der gleichen Erzählung anfordert, Lokales Audio lesen. Nach init, vor ASR ausführen; derselbe verarbeitete Audiokanal wird für Erkennung, Mix und Sidechain verwendet. Audioänderungen machen alte Erkennungscaches/Untertitel/fertige Videos ungültig; ASR und Textbereinigung/Übersetzung erneut ausführen. Standardmäßig bleibt Originalton erhalten.

"$PY" "$SKILL/scripts/local_audio.py" "$JOB" --denoise
# Automatische Schätzung des Zeitversatzes der unabhängigen Tonaufnahme, gleichzeitig Rauschunterdrückung:
"$PY" "$SKILL/scripts/local_audio.py" "$JOB" --voice "$VOICE" --denoise
# Originalton wiederherstellen, anschließend ASR und Render erneut:
"$PY" "$SKILL/scripts/local_audio.py" "$JOB" --reset

Adapter unterstützt nur verifizierte Apple Silicon macOS Jianying 11.5.0 Bibliotheken/Modell-Hashes; native Inferenz ohne Internet; startet keine Jianying UI, packt keine proprietären Bibliotheken/Modelle. Fehler bei Erkennung klar melden, nicht Originalton-Video als erfolgreiche Rauschunterdrückung bezeichnen. Noch nicht durchlaufene oder qualitativ unzureichende Segmentierung, Sprechertrennung, automatische Cue-Punkte usw. gelangen nicht in diesen Workflow.

Vier Inhaltsaufgaben des Agenten

  1. $JOB/transcript.raw.json und repräsentative Frames lesen. $JOB/captions.json ausgeben: {"segments":[{"id":"c0001","start":0.1,"end":2.3,"zh":"Bereinigtes Chinesisch","en":"Natural English."}]}. IDs und Zeiten beibehalten; bei bewusster Neusegmentierung neue ID, parent_ids und Zeitcodes innerhalb des ursprünglichen Zeitbereichs verwenden, bevorzugt words nutzen, nicht Textlänge gleichmäßig aufteilen und als exakte Ausrichtung ausgeben. Leere Füllwörter können sowohl auf Chinesisch als auch Englisch leer bleiben. Mit ganzem Kontext übersetzen und dann auf diese IDs abbilden; nicht wortweise maschinell übersetzen, nicht Whisper turbo für Übersetzung verwenden.
  2. Vollständige Transkription, Wort-Zeitstempel und repräsentative Frames lesen, zuerst nach Schnittmethode Hook, Hauptteil, Beweis und Schluss bestätigen, dann nach Semantische Bewegungen $JOB/motion-plan.json schreiben. Zuerst verstehen, „warum dieser Satz eine Bewegung braucht“, dann wählen: Wort-für-Wort-Hervorhebung, Blüten-Schriftzüge für Schlüsselwörter (label / stroke / card, einheitlich im ganzen Film, ästhetische Regeln im semantischen Bewegungsdokument), Emoji/Meme-Sticker, UI-Hinweise oder Kapitelkarten; ohne semantische Funktion nicht hinzufügen. Blüten-Schriftzüge und Sticker mit at_word auf die Aussprache setzen, Dichte- und Positionsregeln im semantischen Bewegungsdokument. UI-Hinweise target muss aus tatsächlicher Bildbeobachtung stammen, normalisierte 0–1-Koordinaten verwenden, nicht Schaltflächenpositionen aus Untertiteln raten. Kapitelkarten-Dauer muss auf endgültiges fertiges Video umgerechnet werden und in den drei Phasen Einlauf, vollständiger Halt und Auslauf lesbar sein. Nach dem Schreiben motion-Validierung ausführen; Warnungen in HTML aufnehmen, blockieren aber nicht normale Generierung; Kapitelkarten, die weniger als 1,8 Sekunden sichtbar bleiben, verhindern direkt den Render.
  3. Aus der tatsächlichen Erzählung $JOB/brief.json schreiben, Format in Inhalt und Assets. Titelversprechung muss Transkriptionsbelege haben. Standardmäßig drei Titelbilder gleichzeitig entwerfen: Vorspann exakt nach Quellvideo-Pixeln und -Seitenverhältnis; Plattform-Thumbnails separat 16:9, Vertikaldistribution separat 9:16; alle neu komponiert, keine schwarzen Balken zur Proportionstreckung oder mechanisches Zuschneiden. Wenn Benutzer keine Kandidatenrunden anfordert, selbst das klarste YouTube/Bilibili-Richtung auswählen und fortfahren. Bevorzugt aktuelles Codex-eingebautes imagegen; falls nicht verfügbar, konfigurierte Drittanbieter-Bild-API/Skill aufrufen. Bildgenerierung nur für textlosen Hintergrund, genauer Titel wird von cover_compose.py gesetzt. Keine Tools, APIs, Auflösungen oder Erfolgsstatus vortäuschen.
  4. Hintergrundmusik standardmäßig mit Code originell komponieren: scripts/music_synth.py nach brief.json.music_profile Partitur schreiben, bei FluidSynth + Soundfont mit echten Instrumenten rendern (ca. 2 Sekunden), sonst reine Code-Synthese; provider als code-synth registrieren (Ergebnis-JSON engine zeichnet tatsächlichen Renderer auf). Nur wenn Benutzer explizit YuE2/Suno anfordert oder eigene Musik bereitstellt, entsprechenden Pfad gehen: YuE2 liest yue2-music reine Musik-Workflow (Apple Silicon mit --device auto für MPS, ein Track ca. 30+ Minuten, im Hintergrund, zuerst Code-Musik-Version ausliefern), Suno liest qiaomu-suno-master. Nur tatsächlich erhaltene und abspielbare Audiodateien registrieren. Nicht zur Musik-Integration den gesamten qiaomu-cut-Workflow laden.
"$PY" "$SKILL/scripts/s2v.py" asset "$JOB" cover "$INTRO_COVER" --provider codex-imagegen
"$PY" "$SKILL/scripts/s2v.py" asset "$JOB" music "$BGM" --provider yue2-music
"$PY" "$SKILL/scripts/s2v.py" motion "$JOB"
"$PY" "$SKILL/scripts/outro_compose.py" "$JOB"
# Code-originell komponierte Hintergrundmusik (Rückfall oder Benutzervorgabe); --seconds nimmt Enddauer des fertigen Videos:
"$PY" "$SKILL/scripts/music_synth.py" "$JOB/work/code-music/bed.wav" --seconds "$FINAL_SECONDS" --profile calm_explainer
"$PY" "$SKILL/scripts/s2v.py" asset "$JOB" music "$JOB/work/code-music/bed.wav" --provider code-synth
# Bei Bedarf plattformübergreifende Abspann-Assets:
"$PY" "$SKILL/scripts/outro_compose.py" "$JOB" --variants
"$PY" "$SKILL/scripts/s2v.py" render "$JOB"

Fehlschläge optionaler Assets blockieren nicht andere autorisierte Arbeiten. Bereits vorhandene Assets vor Export direkt verwenden; nur wirklich abhängige Transkription/Übersetzung muss gewartet werden. Wenn Benutzer alle Assets explizit anfordert, zuerst ausgegebene Version als „Untertitel-Vorschauversion“ kennzeichnen, nach erfolgreichen Assets erneut rendern.

HTML und Änderungen

review.html ist lokale Ansichts-/Entscheidungsseite; nach dem Öffnen können fertiges Video abgespielt, satzweises Untertitel und semantische Bewegungstimeline geprüft, Titelbild und Hintergrundmusik überprüft werden. Umschalten zwischen allen Bewegungen, Wort-für-Wort-Hervorhebung und leichten Soundeffekten sowie Anpassung der Soundeffekt-Lautstärke möglich. CSS-Untertitel der Anfangsseite sind schematisch, echte Schriftart, Rand, Zeilenumbruch, Zielposition und Bewegungen werden durch ASS-Rendering und Einzelbild-Extraktion verifiziert.

"$PY" "$SKILL/scripts/s2v.py" report "$JOB"
"$PY" "$SKILL/scripts/s2v.py" apply "$JOB" /path/to/decisions.json
"$PY" "$SKILL/scripts/s2v.py" render "$JOB"

Download-Einstellungen ändern keine Hintergrundaufgaben. Erst nach explizitem Anwenden durch Agenten wirksam; Änderungen an Eingabe, Einstellungen, Untertiteln oder Materialien machen alte fertige Videos als veraltet markieren. Standardmäßig keine Server, Dämonen oder Warten auf Bestätigung.

Auslieferung und Validierung

  • Skript überprüft Untertitel-Paarung, Zeitbereich/Überlappung, Schriftsatzabdeckung, Zeilenumbrüche, Dauer, Bildgröße, Audiospur und vollständige Dekodierung. Fehler hinterlassen Log; Wiederholung überschreibt Originalvideo nicht.
  • Tatsächliche Einzelbilder extrahieren (Vorspann, längster Untertitel, jede Bewegungsart mindestens eine, vorne/mitte/hinten im Hauptfilm) und komplettes fertiges Video mit finaler 1× Wiedergabegeschwindigkeit ansehen, nicht nur Originalmaterial-Zeitcodes prüfen. Wort-für-Wort-Hervorhebung muss mit Aussprache synchron sein; Hinweisrahmen müssen auf echte Steuerelemente zeigen; Kapitelkarten mindestens auf Einlauf-Mitte, vollständigen Halt und einen Frame vor Austritt prüfen, bestätigen dass Text lesbar ist und keine laufenden Schlüsselaktionen verdeckt. Dann ein Stück Sprache+Musik+leichte Soundeffekte anhören. visual_review/audio_review in output/render.json nur auf passed setzen, wenn tatsächlich überprüft; numerische Messung kann keine menschliche Hörprüfung ersetzen.
  • Ausliefern: output/final.mp4, zh.srt, en.srt, bilingual.srt, subtitles.ass, motion-plan.json, output/motion-qa.json, Titelbild, review.html. ASR-Engine und Zeitgenauigkeit melden, nicht erhaltene optionale Assets angeben.
  • Fertiges Video nicht auf Videoplattform hochladen/veröffentlichen; dies erfordert separate Benutzeranforderung.

Schnittentscheidung und Rhythmus: Schnittmethode. Stil-Grundlagen und Abwägungen: Untertitel-Methode. Bewegungstiming, Schema und Sicherheitsbereich: Semantische Bewegungen. Abspannregeln: Abspann und Call-to-Action. Audio-Abnahme: Lautstärke und Hörgefühl. ASR-Konfiguration: ASR. Titelbild/Hintergrundmusik: Inhalt und Assets.

Verwandte Skills