Video To Shorts
Abhängigkeiten
/video-understand ist eine Voraussetzung. Führen Sie es zuerst aus, damit die Kurzclips das validierte
Quelltranskript und die kanonische Zeitleiste verwenden.
Überprüfen Sie vor dem Start, ob es installiert ist. Wenn nicht, warnen Sie den Benutzer, dass
diese Voraussetzung fehlt, und stoppen Sie, bevor Sie Medien verarbeiten.
Erfordert ffmpeg/ffprobe im PATH und Python mit Pillow. Überprüfen Sie diese, bevor Sie Medien verarbeiten.
Umfang
Dieser Skill hat zwei Projektphasen:
- Vor dem Rendern planen: das verstandene Transkript auf die Programmzeit abbilden, Kandidaten
autorisieren und genehmigen sowie
work/shorts/shorts-plan.jsonschreiben. Diese Phase schreibt kein endgültiges Video. - Nach dem Rendern finalisieren: nachdem jede ausgewählte Hauptsequenzbearbeitung genehmigt und
die gemeinsame Hauptauslieferung verifiziert wurde,
plan.pyerneut ausführen, um dieselben genehmigten Bereiche an diese Auslieferung zu binden, dann horizontale und optionale vertikale Ausgaben extrahieren.
Es besitzt die Beurteilung von Kurzclip-Kandidaten, die deterministische Qualifikation, die horizontale Extraktion, kurzclip-bezogene Transkripte und die optionale deterministische vertikale Auslieferung. Es transkribiert nicht im Projektmodus, ändert die Hauptsequenz, fügt keine Untertitel/Grafiken hinzu, bewertet nicht, veröffentlicht nicht und führt keine kontinuierliche Subjektverfolgung durch.
Ausgelieferte Kurzclips sind Ableitungen von final/final-video.mp4, aber die Kandidatenplanung geht
dieser Datei voraus. Zeichnen Sie den Vorgang im Projekt-DAG auf, aber fügen Sie ihn niemals zu
sequences.main.operations hinzu; die Hauptauslieferung und ihr Original-vs.-Final-Vergleich bleiben
unverändert.
Projekteingaben
work/project.json- die vom Projekt aufgezeichnete Quelle unter
project.source.path work/understand/transcript.jsonin Quellzeitwork/timeline.json- aktive Hauptoperationsrevisionen in jeder Phase
Die Planung erfordert nicht final/final-video.mp4. Die Finalisierung und Extraktion erfordern
dieses genaue Projekt-Render mit render.status: verified.
prepare_transcript.py --timeline ruft die gemeinsame Funktion
projectlib.map_transcript_to_timeline auf. Kandidaten-/Extraktionszeiten sind daher
Programmsekunden auf dem tatsächlichen endgültigen Video. Durch die Hauptbearbeitung entfernte Wörter sind nicht
für Kurzclips verfügbar. Jedes beibehaltene Wort behält seine source_range, program_range
und clip_id.
Projekttranskript-Metadaten binden die Projektquelle, das Quelltranskript und die Zeitleiste
mit absolutem Pfad, Größe, Änderungszeitpunkt und SHA-256. Kandidaten-Überprüfungsbilder bilden ihre
Programmzeitstempel über timeline.json zurück zum Quellvideo ab. Die Kandidatenvalidierung
lehnt eine geänderte Bindung ab.
Ausgabelayout
work/shorts/
|-- transcript.json
|-- transcript_metadata.json
|-- candidates.json
|-- shorts-plan.json
|-- review/
| |-- candidate_review.json
| `-- approved_candidates.json
`-- short-001/
|-- transcript.json
|-- extraction-report.json
`-- vertical-agent/
|-- agent_vertical_plan.json
|-- vertical_plan.json
`-- review/vertical_review.json
work/cache/shorts/ # Einweg-Frames/Blätter/Zwischenmedien
review/06-shorts/
|-- candidates-<review-id>.html # unveränderliche, maßgebliche Seite
|-- candidates-<review-id>-question.md
|-- assets/candidates-<review-id>/ # unveränderliche Start-/Mitte-/End-Frames
|-- candidates.html # nicht maßgeblicher, letzter Alias
|-- candidates-summary.md
|-- short-001-horizontal.jpg
|-- short-001-vertical-preview.mp4
|-- short-001-vertical-contact-sheet.jpg
|-- short-001-vertical-preview-summary.json
|-- short-001-vertical-preview-probe.json
|-- <short-id>-vertical-review-<review-id>.html # unveränderliche, maßgebliche Seite
|-- <short-id>-vertical-review-<review-id>-question.md
|-- <short-id>-vertical-review.html # nicht maßgeblicher, letzter Alias
|-- <short-id>-vertical-review-assets/
| `-- <review-id>/ # unveränderliche, maßgebliche Beweise
| |-- preview.mp4 # fehlt bei REVIEW_REQUIRED
| |-- contact-sheet.jpg # fehlt bei REVIEW_REQUIRED
| |-- preview-summary.json
| `-- media-probe.json
`-- shorts-summary.md
final/shorts/
|-- short-001-horizontal.mp4
`-- short-001-vertical.mp4 # nur wenn ausgewählt und genehmigt
Programm-Transkript
Ausführen vom Repository-Stammverzeichnis aus:
$RepoRoot = (Resolve-Path ".").Path
$SkillRoot = Join-Path $RepoRoot "skills\video-to-shorts"
$ProjectRoot = (Resolve-Path "<project-root>").Path
$Work = Join-Path $ProjectRoot "work"
$ShortsWork = Join-Path $Work "shorts"
$ProjectSource = (Resolve-Path "<project-source-from-work/project.json>").Path
$FinalVideo = Join-Path $ProjectRoot "final\final-video.mp4"
$ShortsReview = Join-Path $ProjectRoot "review\06-shorts"
New-Item -ItemType Directory -Force $ShortsWork,$ShortsReview | Out-Null
python "$SkillRoot\scripts\prepare_transcript.py" $ProjectSource `
--transcript "$Work\understand\transcript.json" `
--timeline "$Work\timeline.json" `
--out $ShortsWork
Der Projekt-Zeitleistenmodus erfordert das kanonisch bereitgestellte Transkript. Der Standalone-Modus
kann --timeline weglassen; er behält die eingabe-relative Zeit bei und kann den temporären
video-understand/scripts/transcribe.py Fallback verwenden. Es wird kein Transkript automatisch erkannt.
Kandidatenerstellung
Erzeugen Sie visuellen Kontext für lange Videos im Cache, überprüfen Sie jedes für eine Entscheidung benötigte Blatt und verfassen Sie Kandidaten-JSON manuell. Deterministischer Code validiert die redaktionelle Beurteilung; er erfindet keine Kandidaten oder Bewertungen.
python "$SkillRoot\scripts\prepare_visual_context.py" $ProjectSource `
--timeline "$Work\timeline.json" `
--out "$Work\cache\shorts\candidate-visual" --interval 15
Kandidateneingabe bleibt shorts-candidates.v2 aus Kompatibilitätsgründen. Setzen Sie
selection.evidence_mode und jeden Kandidaten evidence_mode auf text_visual.
Jeder Kandidat erfordert:
- stabile
candidate_id, Titel und Szenentyp; - vollständige
start_time/end_timein Programmzeit; transcript_excerptgenau gleich den überlappenden Transkriptwörtern, nicht ganzen überlappenden Segmenten;- alle sechs Bewertungseinträge und nicht leere Begründungen;
- nicht leeres
metadata.editorial_reason; - optionale überprüfte
filler_drop_spansund visuelle Beweisfelder.
Geben Sie keine Gesamt-score an; der Validator addiert die sechs Dimensionen:
| Dimension | Maximum |
|---|---|
hook | 20 |
completeness | 20 |
audience_value | 20 |
emotion_tension | 15 |
quotability | 15 |
pace_editability | 10 |
Bevorzugen Sie einen vollständigen, unabhängig verständlichen Gedanken gegenüber einem kürzeren Fragment. Behalten Sie eine abhängige Interviewerfrage, Prämisse, Behauptungsunterstützung, Umkehrung oder Auszahlung, wenn dies notwendig ist. Grenzen müssen auf ganzen Wörtern und Gedanken liegen.
Validieren Sie die erstellte Datei:
$CandidateDir = Join-Path $ShortsWork "preview\text_visual"
python "$SkillRoot\scripts\candidates.py" `
--out $CandidateDir `
--candidates "$CandidateDir\candidate-input.json" `
--transcript "$ShortsWork\transcript.json" `
--project-root $ProjectRoot
Dies schreibt die Kompatibilitätsvorschaudateien, dauerhafte work/shorts/candidates.json,
und review/06-shorts/candidates.{html,summary.md}.
Überprüfungsmodi
Die Kandidatenauswahl und der Auslieferungsmodus sind ein Hash-gebundenes Tor. Die Auslieferung ist genau
horizontal_only oder horizontal_and_vertical.
Öffnen Sie die gebundene interaktive Seite im menschlichen Modus:
python "$SkillRoot\scripts\interaction.py" candidate-open --out $ShortsWork --review-out $ShortsReview
Der Befehl gibt eine maßgebliche, auf die Überprüfungs-ID bezogene Seite aus. Die Quittung bindet diese Seite, ihr
Kandidaten-JSON, Transkript, Quellmedium, feste Frage und jeden extrahierten Frame
mittels SHA-256. candidates.html ist nur ein nicht maßgeblicher praktischer Alias zur
letzten Seite. Öffnen Sie den gedruckten maßgeblichen Pfad mit dem aktuellen natives Betriebssystembefehl:
# Windows PowerShell
Start-Process (Resolve-Path -LiteralPath "<printed-authoritative-page>")
# macOS
open "<printed-authoritative-page>"
# Linux
xdg-open "<printed-authoritative-page>"
# Agent: Präsentieren Sie die maßgebliche Seite und HALTEN Sie an.
Wenn das Öffnen fehlschlägt, wiederholen Sie den natives Befehl und melden Sie den Fehler, wenn er immer noch nicht geöffnet wird. Fahren Sie nach der Präsentation nicht fort. Die Seite beginnt mit allen Kandidaten-Kontrollkästchen und beiden Auslieferungsoptionen ursprünglich nicht ausgewählt. Der Benutzer muss 1-5 Kandidaten und einen Auslieferungsmodus auswählen. Die gebundene Seite wählt niemals stillschweigend Kandidaten aus.
Zur Genehmigung kopieren Sie diese genaue, von der Seite generierte strukturierte Zusammenfassung unverändert in
candidate-answer:
Shorts candidate review
Review: <review-id>
Candidates: text_visual/cand-001, text_visual/cand-002
Delivery: horizontal_and_vertical
Zur Überarbeitung kopieren Sie diese genaue, von der Seite generierte strukturierte Zusammenfassung unverändert:
Shorts candidate review
Review: <review-id>
Decision: revise
Changes: <non-empty requested changes>
Zeichnen Sie die spätere Antwort auf, ohne sie umzuschreiben:
python "$SkillRoot\scripts\interaction.py" candidate-answer `
--out $ShortsWork --response-file "<verbatim-summary-file>"
Wenn der Benutzer Entscheidungen explizit delegiert:
python "$SkillRoot\scripts\interaction.py" candidate-open `
--out $ShortsWork --review-out $ShortsReview --decision-mode agent `
--delegation-note "User delegated shorts selection and vertical approval."
python "$SkillRoot\scripts\interaction.py" candidate-agent-approve `
--out $ShortsWork `
--candidates "text_visual/cand-001" `
--delivery horizontal_and_vertical `
--rationale "The selected range has a self-contained hook, explanation, and payoff."
Der Agent öffnet und überprüft dieselbe maßgebliche Seite, verwendet explizite Kandidatenverweise,
einen expliziten Auslieferungsmodus und eine nicht leere Begründung. Er schreibt niemals eine gefälschte
menschliche Antwort oder user_response. Menschlicher und Agentenmodus schließen sich gegenseitig aus;
menschliche Antwortbefehle schlagen im Agentenmodus fehl und Agenten-Genehmigungsbefehle schlagen im
menschlichen Modus fehl. Die Quittungsverifizierung überprüft erneut Review, Seite und Medien-Hashes. Regenerierte
Quelle, Kandidat, Transkript, Seite, Frage, Frame oder genehmigte Kandidaten-Artefakte
machen die Genehmigung ungültig.
Kanonischer Plan
python "$SkillRoot\scripts\plan.py" `
--out $ShortsWork --project-root $ProjectRoot
work/shorts/shorts-plan.json verwendet die Ganzzahl schema_version: 1. Es zeichnet auf:
target: derived,timebase: programundtimeline_id;delivery_status: awaiting_main_renderwährend der Planung;- die für die Kandidatenüberprüfung verwendeten Projektquell- und Zeitleistenbindungen;
- genaue
depends_on/based_onRevisionen aus der aktiven Hauptsequenz; - Auswahlmodus, Begründung, Auslieferungsmodus und Überprüfungs-ID;
- stabile Kurzclip-IDs;
- explizite
program_rangeund abgebildetesource_ranges; - Bewertungs-/redaktionelle Beweise, genehmigte Füller-Drops und Programmzeit-Haltebereiche;
- Arbeits-Transkript-/Berichtspfade und
../final/shorts/*.mp4Auslieferungspfade.
Der erste Lauf ist das Ende der Planungsphase. Halten Sie hier an und fahren Sie mit den angeforderten
Untertiteln, Inhaltskarten, Grafikanimationen und anderen verbleibenden Hauptsequenzoperationen
in kanonischer Reihenfolge fort. Führen Sie extract_shorts.py nicht aus und erstellen Sie kein final.mp4 mit diesem Skill.
Nachdem der gemeinsame Renderer final/final-video.mp4 verifiziert hat, führen Sie denselben plan.py-Befehl erneut aus.
Er validiert die genehmigte Projektquelle und Zeitleiste erneut, aktualisiert die vollständigen
altiven Operationsrevisionen, fügt den verifizierten Haupt-Render-Fingerabdruck hinzu und setzt
delivery_status: ready. Eine Zeitleistenänderung erfordert neue Kandidaten und Genehmigung;
Pixel-nur-Operationen wie Inhaltskarten und Untertitel tun dies nicht.
Die Qualifikation bleibt deterministisch: Bewertung mindestens 70, Vollständigkeit mindestens 15, geschätzte Ausgabedauer 20-90 Sekunden, gültiger genauer Auszug, keine Überlappung von mehr als 50% mit einem höher bewerteten Kurzclip und höchstens fünf Ausgaben, sofern nicht konfiguriert.
Nur isolierte, semantisch leere Zögerungswörter mit sicheren Wortgrenzen dürfen als Füller-Drops genehmigt werden. Abgelehnte/unsichere Bereiche verbleiben mit Gründen im Plan. Die Gesamtentfernung darf 15% nicht überschreiten und kein Haltebereich darf kürzer als 0,15 Sekunden sein.
Horizontale Extraktion
python "$SkillRoot\scripts\extract_shorts.py" `
--video $FinalVideo --out $ShortsWork `
--project-root $ProjectRoot
Vor der Extraktion überprüft das Skript den Main-Render-Fingerabdruck, den Projekt-Render-Status,
die vollständige aktuelle Hauptoperationsliste und Revisionen, die Kandidatenquittung,
den genehmigten Kandidaten-Hash und das Quellvideo. Ein awaiting_main_render-Plan wird abgelehnt.
Jeder Haltebereich wird zu seiner eigenen gesuchten -ss/-t/-i Eingabe; ffmpeg verkettet
diese Eingaben und führt eine H.264/AAC-Kodierung durch. Es dekodiert das vollständige Hauptvideo
nicht einmal pro Haltebereich.
Das ausgewählte endgültige Transkriptwort und der Medien-Schnittendpunkt sind separate Grenzen.
Die Extraktion bewahrt mindestens 0,25 Sekunden Release-Audio nach dem ausgewählten Inhalt und zielt
auf 0,30 Sekunden ab. --no-refine-boundaries deaktiviert nur das semantische Phraseneinrasten;
es deaktiviert niemals den obligatorischen Release-Griff. Wenn die Quelle endet, bevor der erforderliche
Griff bewahrt werden kann, schlägt die Extraktion fehl, anstatt den Kurzclip als verifiziert zu markieren.
Das kurzclip-bezogene Transkript schließt gelöschte Wörter aus, verschiebt spätere Wörter auf eine
kontinuierliche, nullbasierte Uhr und behält Eingabeprogramm-/Quellbeweise bei. Horizontale Medien
gehen direkt nach final/shorts; Arbeit enthält nur ihr Transkript und ihren Bericht.
Vertikale Planung
Die vertikale Auslieferung beginnt mit dem genehmigten horizontalen Output. Generieren Sie dichte visuelle Beweise bei 1 Sekunde oder 0,5 Sekunden, wenn Bewegung dies erfordert. Überprüfen Sie jedes Blatt und verfassen Sie eines von:
STATIC_CROP: ein stabiler, fester 9:16-Zuschnitt.SCENE_CROP: szenenbegrenzte feste Zuschnitte, mit LETTERBOX nur für Szenen, die vollständige horizontale Informationen benötigen.LETTERBOX: vollständige scharfe Vordergrund über einer unscharfen/abgedunkelten Füllung.REVIEW_REQUIRED: Beweise können keine deterministischen festen Zuschnitte unterstützen; formales Rendern wird blockiert.
Präsentatorszenen sollten den Kopf und Oberkörper stabil und groß halten. Folien, Produkte, Gruppen und Diagramme müssen wesentliche Informationen behalten. Beanspruchen Sie keine kontinuierliche Verfolgung. Zuschnittsänderungen gehören an Szenengrenzen.
Jedes Plansegment deckt die Kurzclip-Zeitleiste vollständig ab, hat eine Strategie, c
…
[gekürzt für die Übersetzung]