Communitygithub.com

vstoos/vlog-film

Bearbeite rohes Reise-/Autovlog-Material (Handy-HLG-Talking-Head-Clips während der Fahrt, Dashcam-Straßenaufnahmen, Fotos, OBD-/Torque-Bildschirmaufnahmen) zu einem fertigen HDR (HLG 10-Bit) YouTube-Film mit Teaser, Jump Cuts bei Sprache, Straßeneinschnitten unter Musik, Untertiteln, Routenkarte, Kennzeichen-Unschärfe, pegelfestem Ton, Kapiteln, Thumbnail, Untertiteln in mehreren Sprachen und synchronisierten Tonspuren mit der geklonten Stimme des Benutzers.

Was ist vlog-film?

Dieses Skill verwandelt einen Ordner mit rohem Videomaterial in einen vollständig fertiggestellten YouTube-Film im HDR-Format (HLG 10-Bit) und ermöglicht iterative Verbesserungen basierend auf dem Feedback des Benutzers. Es ist speziell für Autovlogs konzipiert und verarbeitet Talking-Head-Clips von Smartphones, Dashcam-Aufnahmen, Fotos und Bildschirmaufnahmen. Der Workflow umfasst die Bestandsaufnahme des Materials (Metadaten, Kontaktbögen, Transkription mit WhisperX), das Erstellen einer Bearbeitungsliste (EDL) mit Teaser und Erzählstruktur, das automatische Unschärfmachen von Kennzeichen und Gesichtern, das Einbrennen von Fotos/Bildern in Talking-Head-Clips, das Rendern des finalen Films und die Überprüfung auf Schnittfehler. Zusätzlich werden mehrere Sprachuntertitel, Thumbnails, Kapitelmarken und synchronisierte Audiospuren mit der geklonten Stimme des Benutzers (über Higgs TTS 3) erstellt. Das System ist plattformunabhängig (Windows/Linux/macOS) und wird über die Kommandozeile gesteuert. Es nutzt FFmpeg, MLT (Shotcut), WhisperX, ein Kennzeichenerkennungsmodell und Higg's TTS. Der gesamte Bearbeitungsprozess ist in einer `project.py`-Datei definiert, die als zentrale Konfigurations- und Ablaufdatei dient.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vstoos/vlog-film/tree/HEAD

In Ihrer bevorzugten KI fragen

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

Dokumentation

Was macht vlog-film?

Verwandle einen Ordner mit dem Filmmaterial des Benutzers in einen fertigen YouTube-Film und arbeite dann iterativ mit den Anmerkungen des Benutzers, bis dieser zufrieden ist. Die Pipeline wurde mit „Yaris farewell“ (24 Min., ukrainische Sprache, iPhone + Sony Dashcam) entwickelt; references/example_yaris.py ist die vollständige Projektdatei dieses Films und der beste Leitfaden für das Aussehen eines fertigen Schnitts.

Bevor Sie beginnen

  • Einrichtung. <skill>/config.json enthält die Pfade der Maschine (ffmpeg, melt, Python mit WhisperX, Kennzeichenmodell, Musikordner, Encoder, Sprachsprache). Fehlt die Datei oder schlägt ein Skript aufgrund eines fehlenden Tools fehl, führen Sie python <skill>/setup/setup.py (nur Prüfung) aus und zeigen Sie dem Benutzer, was fehlt; mit seiner Zustimmung führen Sie python <skill>/setup/setup.py --install aus. Führen Sie jedes untenstehende Skript mit dem Python aus config.json ("python") aus, da dort WhisperX und torch installiert sind.
  • Der Benutzer. Wenn <skill>/user.md existiert, lesen Sie es: Es sagt, wer der Benutzer ist, in welcher Sprache Sie antworten sollen und welche festen Präferenzen er hat. Ohne diese Datei: Antworten Sie in der Sprache des Benutzers, halten Sie die Antworten kurz und geben Sie Filmzeiten als mm:ss für alles an, was er sich ansehen soll.
  • In den folgenden Befehlen ist $K <skill>/scripts und python das konfigurierte Python.

Projektstruktur

Das Filmmaterial bleibt dort, wo der Benutzer es abgelegt hat; die endgültige mp4, die YouTube-Beschreibung, das Thumbnail und die Untertitel gehen ebenfalls dorthin, weil der Benutzer dort nachschaut. Arbeitsdateien kommen in einen Projektordner (z. B. C:/Data/<name>-video/):

<name>-video/
  project.py        Pfade, EDL, HOOK, Musik, Bildausschnitt, make_stills()   (Kopie von references/project_template.py)
  transcripts/      <clip>.json von transcribe_all.py
  film/             gerenderte Einschnitte, <clip>_blur.mov, <name>.mlt, <name>.mp4
  film_check/       Kontaktbögen, Test-WAVs, Prüfbilder (Zwischenspeicher)
  edit_notes.md     Die Überprüfungsnotizen des Benutzers und was dagegen unternommen wurde
  subs/, thumbnail/, route/

Arbeitsablauf

1. Bestandsaufnahme

  1. python $K/scan_meta.py <filmmaterial> film_check/meta.json: Zeit, Dauer, GPS jeder Datei. Nach Zeit sortiert ist dies die Reihenfolge der Geschichte.
  2. Schauen Sie vor der Entscheidung: python $K/contact_sheet.py <ausgabe.png> 6 <clips...> für Clips, ein gekacheltes Blatt für Fotos; sehen Sie sich die Bilder selbst an. Notieren Sie Porträt-Clips (Drehung -90/90), Clips, die Kennzeichen zeigen, die Dashcam-Dateien, Bildschirmaufnahmen. Tesla Dashcam / Sentry-Ereignisse von den Reisedaten: references/teslacam.md (Finden des Vorfalls, Farbe via teslacam_grade.py).
  3. python $K/transcribe_all.py <filmmaterial> transcripts: zeitgenaues WhisperX-Transkript jedes Sprechclips (fortsetzbar, Sprache aus der Konfiguration). Lesen Sie sie alle; sie sind das Rohmaterial der Geschichte.

2. Geschichte und EDL

Schlagen Sie dem Benutzer die Struktur in ein paar Zeilen vor dem Bauen vor: den Teaser, die Teile, welche Fotos, Karten oder Standbilder welches Gespräch veranschaulichen. Typische Form:

  • Teaser (HOOK): 4-6 kurze, starke Phrasen aus der gesamten Reise, jeder ein vollständiger Gedanke.
  • Titelkarte auf Straßenmaterial, dann Gesprächsblöcke, getrennt durch 4-10 s Straßeneinschnitte unter Musik.
  • Einschnitte, wo das Gespräch etwas erwähnt: die Quittung, wenn Benzin erwähnt wird; der Inspektionsstand, wenn die Inspektion erwähnt wird; eine Routenkarte zu Beginn jedes Abschnitts.
  • Bilder über der Stimme (B-Roll, Handy-Screenshots, Untertitel, während der Sprecher weiterredet): Brennen Sie sie mit burn_in.py in den Sprechclip ein, vor filmkit (es zeigt einen Sprechclip nur an, während gesprochen wird). Ein Hochformat-Bild (Screenshot, vertikaler Clip, Hochformat-Foto) steht in voller Bildhöhe auf der freien Seite des Gesichts des Sprechers, ermittelt durch Gesichtserkennung, sodass das Gesicht sichtbar bleibt; die Uhr und die Tasten des Telefons füllen ohnehin oben und unten. Ein Querformat-Bild füllt den Bildrahmen.
  • Straßeneinschnitte sollten zeigen, was die Geschichte an dieser Stelle braucht (die Abfahrt zur Tankstelle vor „wir hielten an“, der Flughafenparkplatz vor der Szene am Flughafen), nicht nur irgendeine Autobahn: Sehen Sie sich einen Kontaktbogen des Straßenclips um den richtigen Moment herum an.
  • Endkarte: 20 s auf Straßenmaterial, Text oben, die Mitte frei für YouTube-Endbildschirm-Kacheln; ein Empfehlungslink hier, falls der Benutzer einen hat.

Schreiben Sie project.py aus references/project_template.py; die EDL-Elementarten, Untertitel, Musikschlüssel und clip-spezifischen Optionen sind dort dokumentiert. Gesprächsbereiche stammen aus den Transkriptzeiten.

3. Bauen und Rendern

python $K/blur_plates.py <filmmaterial> <projekt>/film [--faces] IMG_0089 ...   # Kennzeichen; --faces: auch Personen
python $K/burn_in.py film/IMG_0089_blur.mov film/IMG_0089_over.mov spec.json   # Bilder über Sprache, falls vorhanden
python $K/filmkit.py <projekt>/project.py                        # rendert Einschnitte, schreibt film/<name>.mlt
python $K/render_final.py <projekt>/film <name> <filmmaterial>/<Name>_HLG.mp4   # langwierig: im Hintergrund ausführen

Führen Sie vor einem schweren GPU-Job (Rendering, WhisperX, Dubbing) nvidia-smi aus: Die Kartennummern ändern sich zwischen Sitzungen und unterscheiden sich zwischen Tools, und andere Jobs können eine Karte belegen (references/lessons.md, „GPUs and Hardwareencoders“). filmkit.py --no-media schreibt nur die .mlt neu (Sekunden). Der Renderer gibt Lautstärke, Dauer, Codec-/HDR-Tags und eine Anzahl grüner Frames aus: Erwarten Sie etwa -14 LUFS, Main 10, arib-std-b67, bt2020, 0 grün.

4. Überprüfung vor der Meldung an den Benutzer

Hören Sie mit WhisperX, anstatt der EDL zu vertrauen: Schneiden Sie für jeden neuen oder geänderten Schnitt dieselben Sekunden aus der fertigen mp4 heraus und transkribieren Sie sie (python $K/transcribe_window.py <wav> <offset>). Transkripte des ersten Durchgangs sind oft falsch, wo eine Phrase endet, besonders bei Zahlen, daher schneiden Schnitte, die daraus erstellt wurden, das Ende ab („не 144, а 147“ verlor „а 147“). Messen Sie auch die Lautstärke benachbarter Abschnitte (ffmpeg -ss A -t N -i film.mp4 -af ebur128 -f null -) und sehen Sie sich ein Bild jedes neuen Einschnitts an. Die anderen Fallstricke und deren Behebungen: references/lessons.md.

5. Überprüfungsrunden

Der Benutzer sieht sich das Video an und sendet Notizen mit Filmzeiten. Für jede Notiz:

  1. python $K/timeline.py film/<name>.mlt 12:22 benennt den Clip und die Quellensekunde.
  2. Überprüfen Sie die Quelle (transkribieren Sie ein Fenster, messen Sie die Lautstärke, sehen Sie sich Bilder an). Teilen Sie dem Benutzer mit, was tatsächlich vorhanden ist, und zitieren Sie die ursprünglichen Worte; seine Erinnerung weicht manchmal von der Aufnahme ab.
  3. Ändern Sie die EDL und protokollieren Sie es in edit_notes.md (Filmzeit, Clip und Sekunden, was gesagt wurde, Änderung).

Während der Benutzer noch zuschaut, sammeln Sie Notizen und bauen Sie nicht neu: Ein Bauvorgang am Ende spart lange Renderzeiten. Wenn er sagt, dass gebaut werden soll, bauen Sie einmal neu, überprüfen Sie jede geänderte Stelle wie in Schritt 4, aktualisieren Sie die Kapitel.

6. Liefergegenstände

references/youtube.md: Beschreibung mit Kapiteln (timeline.py), Thumbnail (make_thumb.py), Untertitel (make_subs.py auf dem fertigen Film, manuell korrigiert, dann Cue für Cue übersetzt, plus die Bildschirmtexte, übersetzt als eigene Cues mit onscreen_subs.py), YouTube-Auto-Dubbing. Der Benutzer kann Renderings auf einem Telefon ansehen durch python $K/media_server.py --port 8765 <filmmaterial> <projekt>/film (nur LAN / VPN; schreibgeschützt; auch auf github.com/vstoos/media-server).

7. Synchronisierte Audiospuren

Für eine Sprache, die der Benutzer hören, nicht lesen möchte: references/dubbing.md. Die Stimme ist Higgs TTS 3 (Standard seit 06.11.2026) mit der gespeicherten Referenz des Benutzers in dieser Sprache (C:/Data/voices, - übergeben); jede Filmbeschreibung mit einer Higgs-Spur nennt „Boson AI's Higgs Audio“. Die Untertitel durchlaufen dub.py gen, dub_check.py fängt die Fehler des Modells Take für Take ab, dub_regen.py ersetzt, was fehlgeschlagen ist, und dub.py mix erstellt die Spur und gibt aus, worauf zu hören ist. Korrigieren Sie die Aussprache in say.json. Voice-Over für stummes Filmmaterial (Dashcam-Clips) nimmt denselben Weg auf Ukrainisch, geschrieben als Untertitel. Bezeichnen Sie einen Dub nicht allein aufgrund der Prüfungen als sauber: Das Ohr des Benutzers ist der letzte Schritt.

Datenschutz

Kennzeichen: Der Benutzer macht keine gewöhnlichen Verkehrsteilnehmer unscharf (Polen; das schwebende Kästchen verdirbt Straßenaufnahmen). Machen Sie ein Kennzeichen nur dann unscharf, wenn der Clip einen möglichen Verstoß oder eine Beinahe-Kollision dieses Fahrers zeigt, damit der Film keine Beschwerde gegen eine Person nähren kann; Straßeneinschnitte werden via CLIP_SRC im Projekt unverändert eingefügt. Machen Sie die Gesichter von Personal, Passanten und Kindern unscharf (blur_plates.py --faces; überprüfen Sie die Bilder, Reflexionen in Autolack können es täuschen); beginnen Sie Routenkarten an einem öffentlichen Ort, niemals am Wohnort des Benutzers; setzen Sie keine Gesichter anderer Personen (vor allem Kinder) auf Thumbnails, es sei denn, Sie werden darum gebeten.

Referenzdateien

  • references/project_template.py: kommentierte Projektdatei zum Kopieren; EDL-Syntax.
  • references/example_yaris.py: der fertige Yaris-Film, alle Funktionen in Gebrauch.
  • references/lessons.md: HDR, Audio, Schnitt- und Bildausschnitt-Fallstricke, mit den funktionierenden Korrekturen.
  • references/teslacam.md: Tesla Dashcam / Sentry-Clips (HW3): Finden des Vorfalls in einem gespeicherten Ereignis und die Farbkorrektur (scripts/teslacam_grade.py).
  • references/youtube.md: Beschreibung, Kapitel, Thumbnail, Untertitel, Dubbing, Endbildschirm.
  • references/dubbing.md: Eigene Audiospuren in der geklonten Stimme des Benutzers und automatische Fehlerprüfungen.
  • references/example_make_route.py: animierte Routenkarte (Sentinel-2-Kacheln + OSRM-Straßen) aus dem Yaris-Film; passen Sie seine Konstanten (Grenzen, Städte, Pins, Abschnitte) für eine neue Reise an.

Verwandte Skills