Was macht Bildschirm-Tutorial auf einer Resolve-Timeline?
Wandelt eine Beschreibung eines Tutorials (film.json) sowie die dazugehörigen Screenshots in eine Timeline um, an der ein Editor weiterarbeiten kann. Clips haben gewöhnliche Inspector-Keyframes, Titel sind Fusion-Titel mit Steuerelementen im Inspector, und Szenen sind markiert. Es wird kein Audio hinzugefügt, sodass Erzählung und Musik später eingefügt werden können.
Die Resolve-API kann keine Keyframes oder die Länge eines Titels setzen, daher schreibt der Build diese in eine Timeline-Datei und importiert sie. references/how-it-works.md erklärt dies und listet bekannte Probleme auf. Lies es, wenn ein Schritt fehlschlägt oder Resolve neuer als 21.2 ist.
Bevor es losgeht
- Resolve Studio läuft mit einem geöffneten Projekt. Überprüfe mit
get_resolve_statusund rufeget_whats_neweinmal mitsinceauf21.0gesetzt auf, da der Resolve-Server dies verlangt. - Außerhalb von Resolve: Python mit
pillowund ffmpeg im PATH. - Das Timeline-Format des Projekts muss 1920x1080 sein.
preflightüberprüft dies.
Entscheidungen mit dem Benutzer
Kläre diese Punkte nach Möglichkeit aus dem Gespräch und frage nur nach, was fehlt:
- Das Projekt. Die Timeline wird in das geöffnete Projekt eingefügt. Benenne es nach dem Benutzer. Das Wechseln von Projekten könnte ungespeicherte Arbeit des Benutzers verlieren. Bitte ihn daher, zu wechseln, falls das falsche Projekt geöffnet ist.
- Die Screenshots. Sie kommen vom Benutzer oder du erstellst sie. Mit Playwright verwende ein Viewport von 1920x1080 mit
deviceScaleFactor: 2: Die Bilder werden mit 3840x2160 ausgegeben, undgetBoundingClientRectliefert Positionen, die bereits korrekt fürfilm.jsonsind. Sieh dir jedes gelieferte Bild an, verwende diejenigen, die zur Zielgruppe passen, und teile dem Benutzer mit, was du ausgelassen hast. - Die Marke. Farben, Schriftart, Wortmarke und etwaige Bezeichnungen wie Host oder Admin. Suche zuerst im Code des Benutzers oder in früheren Titeln. Text+ sieht nur installierte Schriftarten, und installiere keine ohne zu fragen.
- Der Timelinename. Wähle einen, der frei ist. Ersetze niemals eine Timeline, die du nicht erstellt hast.
Den Film schreiben
Erstelle einen Ordner für den Film und schreibe film.json darin. references/film-format.md enthält das Format. Lies es jetzt.
Einige Timings, die sich gut lesen:
- Zeige eine Szene für 6 bis 10 s und halte eine Caption lange genug, um sie zweimal zu lesen, etwa 1 s pro 8 Zeichen.
- Bewege die Kamera über etwa 1 s und lasse sie sich setzen, bevor sich der Cursor bewegt oder die Hervorhebung erscheint.
- Bewege den Cursor über etwa 0,8 s und klicke etwa 0,3 s nachdem er landet.
- Zeige das Ergebnis eines Klicks mit einer neuen Aufnahme direkt danach, wenn das Layout der neuen Aufnahme bei der aktuellen Zoomstufe passt. Wenn sich die Seite komplett ändert, beende die Szene direkt nach dem Klick und lasse die Überblendung zur nächsten Szene überleiten.
- Um den Cursor über eine Überblendung hinweg stillzuhalten, starte den Cursor der nächsten Szene an der gleichen Stelle auf dem Frame, mit
x' = tx + x * zoom. - Verwende am Anfang und Ende eine Karte von etwa 3 s.
Captions sollten nur das sagen, was die Screenshots zeigen oder der Benutzer dir mitgeteilt hat; alles, was du erschlossen hast, gehört in deinen Bericht.
Eine Hervorhebung, die ihren Button verfehlt, ist der sichtbarste Fehler, den dieses Format machen kann. Miss daher statt zu schätzen. Bilder können in einem anderen Maßstab angezeigt werden als ihrer tatsächlichen Größe. Lies daher keine Positionen direkt von ihnen ab:
python "<SKILL>/scripts/measure.py" grid shot.png grid.png
Öffne grid.png, das Framekoordinaten markiert, um einen groben Punkt auf der Füllung des Buttons zu finden. Ermittle dann sein exaktes Rechteck und überprüfe das Ergebnis:
python "<SKILL>/scripts/measure.py" at shot.png 1250 470
python "<SKILL>/scripts/measure.py" show shot.png check.png 1200,450,180,40
Ein Button, dessen Rand einer ähnlichen Farbe in der Nähe entspricht, kann auslaufen. Lies daher die Warnungen und senke die Toleranz, wenn das Rechteck zu groß erscheint.
Erstellen
SKILL ist der Ordner dieses Skills und WORK der Ordner des Films. Shell-Befehle werden von überall ausgeführt. Resolve-Schritte werden über run_script_unsafe ausgeführt. Übergib bei jedem Aufruf timeout: 60, da der Standardwert des Tools 10 s beträgt und die Schritte länger dauern können. Jeder beginnt mit:
SKILL = r'<dieser Skill-Ordner>'; WORK = r'<Film-Ordner>'
exec(open(SKILL + r'\scripts\resolve_steps.py', encoding='utf8').read())
Bevor film.json existiert, liefert project_format(project) die Größe, Bildrate und Timelines des Projekts, und fonts_available('Lato', ...) die installierten Schriftarten und ihre Stile. Setze fps auf die Bildrate des Projekts, es sei denn, es gibt einen Grund dagegen.
1. Überprüfe das Projekt. Behebe alles in problems, bevor du fortfährst, frage den Benutzer, wo seine Entscheidung nötig ist, und gib alle notes weiter. Es ändert nichts.
result = preflight(project, WORK)
2. Plane und installiere die Titel. Lese die Warnungen und behebe das Wichtige in film.json. Dies legt die Titel im Templates-Ordner von Resolve für die Marke ab und ersetzt dabei alle mit denselben Namen. Teile dies dem Benutzer mit.
python "<SKILL>/scripts/plan.py" "<WORK>"
python "<SKILL>/scripts/templates.py" "<WORK>" --install
3. Erstelle die Timeline. Dies exportiert die Bausteine, schreibt die Timeline-Datei, importiert sie, wendet die Einstellungen an, die die API setzen kann, überprüft das Ergebnis und entfernt die beiden temporären Timelines dieses Builds. Es ersetzt nur eine Timeline, die dieser Ordner erstellt hat. Bearbeitungen daran gehen verloren. Frage daher zuerst, ob der Benutzer sie möglicherweise bearbeitet hat.
result = build_film(project, WORK)
verify.problems sollte leer sein. Wenn done falsch ist, wiederhole result = finish_batch(project, WORK), bis es wahr ist, führe dann result = dict(verify=verify(project, WORK), cleanup=cleanup(project, WORK)) aus. Resolve kann einige Sekunden brauchen, um neu installierte Titel zu erkennen. Daher wartet build_film auf sie. Wenn es sie immer noch nicht einfügen kann, bitte den Benutzer, Resolve nach dem Speichern seiner Arbeit neu zu starten.
Lösche keine Bins, weder hier noch beim Aufräumen: Clips können von einem Bin mit Timelines an anderer Stelle verknüpft sein (siehe references/how-it-works.md).
4. Sieh es dir an. Dies exportiert beschriftete Bildtafeln direkt aus der Timeline: jede Szene, die Mitte jeder Hervorhebung und direkt nach jedem Klick. Es dauert einige Sekunden und benötigt kein Rendering, daher ändern sich die Rendereinstellungen nicht. Öffne die Bildtafeln in build/review/.
result = review_frames(project, WORK)
Überprüfe, ob die Hervorhebungen auf ihren Elementen sitzen, der Cursor landet, wo er soll, die Ripples sichtbar sind, die Captions passen und nichts schwarz ist. Für einen genaueren Blick verwende review_frames(project, WORK, seconds=[10.5, 20.2]), um diese Zeitpunkte in voller Größe in Timeline-Sekunden zu erhalten. plan.py gibt aus, wann jede Szene beginnt, um von Szenenzeiten umzurechnen.
Die Frames entsprechen einem Render desselben Frames, getestet auf Resolve 21.2. review_frames benötigt die Frame-Export-API, die 21.2 mitbringt. Bei einer älteren Resolve-Version wird ein Fehler ausgelöst. Das folgende Rendering erledigt die Aufgabe: Führe review.py ohne Referenz darauf aus, um dieselben Bildtafeln zu erhalten.
5. Rendern, wenn eine Datei benötigt wird. Rendere, um dem Benutzer ein Video zu geben oder für den Vergleich mit remotion-to-resolve. start_render ändert die Rendereinstellungen des Projekts, teile dies daher mit.
result = start_render(project, WORK, 'review')
result = wait_render(project, '<job id>', 50) # wiederholen, bis der Status Complete ist
python "<SKILL>/scripts/review.py" "<WORK>" "<WORK>/build/render/review.mp4"
Entferne deinen Job, und nur deinen, da die Warteschlange die des Benutzers enthalten kann:
result = remove_job(project, '<job id>')
Um etwas zu ändern, bearbeite film.json, führe plan.py aus und rufe erneut build_film auf, sieh es dir dann noch einmal an. Wenn du gerendert hast, entferne zuerst den Job. Führe templates.py erneut aus, wenn sich die Marke oder fps geändert haben. Wenn der Benutzer die Timeline von Hand bearbeitet hat, frage vor dem Neuerstellen oder nimm die Änderung von Hand auf der Timeline vor.
Abschluss
Überlasse das Speichern dem Benutzer, es sei denn, er bittet darum, da das Speichern auch alle anderen ungespeicherten Bearbeitungen übernimmt, die er geöffnet hat. Berichte:
- die Timeline und den Bin sowie die Spuren
- wo die Titel installiert wurden
- dass die neue Timeline jetzt die aktuelle ist, nenne die, die
preflightoffen vorgefunden hat, und falls du gerendert hast, teile mit, dass die Rendereinstellungen geändert wurden - jede Caption-Formulierung, die du erschlossen hast, und alles in den Screenshots, was im Widerspruch zur Aufgabenstellung steht
- was du überprüft hast und was nicht. Frames zeigen das Bild, aber nicht die Bewegung oder wie Inspector und Timeline in Resolve aussehen.
- alles Näherungswerte und diese Einschränkungen: kein Audio, nur Standbilder und Hervorhebungen, die während Kamerafahrten auf dem Frame bleiben
Clips stammen von ihren Dateien auf der Festplatte. Wenn du den Filmordner oder die Screenshots verschiebst, werden die Clips offline genommen. Behalte auch build/assets/, da sich dort Cursor und Hintergründe befinden.
Um die Titel einer Marke aus der Effektbibliothek zu entfernen, führe templates.py "<WORK>" --uninstall aus. Es entfernt nur die vier Dateien dieser Marke. Bereits erstellte Timelines behalten ihre eigenen Kopien: Ein Render nach dem Entfernen war identisch.