Communitygithub.com

clipwise

Verwendet, wenn der Benutzer eine Videodatei oder einen Link angibt und daraus Shorts/Reels/TikToks geschnitten werden sollen. Lädt herunter und transkribiert lokal, Sie wählen die besten 10–50-Sekunden-Momente mit einer Bewertungsmatrix aus, der Benutzer genehmigt, dann rendert es 9:16-Clips mit gesichtsverfolgtem Zuschnitt, Wort-für-Wort-Untertiteln, Soundeffekten, optionaler Musik mit Sidechain-Ducking und -14 LUFS Audio, plus Titeln und Hashtags.

Was ist clipwise?

clipwise ist ein lokales Tool zur Erstellung von vertikalen Kurzvideos (Shorts, Reels, TikToks) aus langen Videodateien oder Links. Es extrahiert und transkribiert das Video lokal, sodass der Benutzer die vielversprechendsten 10–50 Sekunden langen Momente auswählen kann, die dann automatisch in ein 9:16-Format mit Gesichtsverfolgung, dynamischem Zuschnitt, Wort-für-Wort-Untertiteln und Soundeffekten gerendert werden. Das Tool unterstützt die CPU-Verarbeitung (CUDA für die Transkription, falls vorhanden) und wird über die Befehlszeile gesteuert. clipwise ist ideal für Entwickler, die schnell und zuverlässig virale Kurzclips aus langen Inhalten wie Vorträgen, Podcasts oder Tutorials erstellen möchten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/RajkumarDake/clipwise/tree/main/clipwise

In Ihrer bevorzugten KI fragen

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

Dokumentation

clipwise: langes Video -> vertikale Shorts

Alles läuft lokal (CPU ist ausreichend; CUDA wird für die Transkription verwendet, falls vorhanden). SKILL_DIR bezeichnet den Ordner, in dem sich diese Datei befindet. Alle Befehle sind python3 SKILL_DIR/scripts/run.py ...; die Skripte wechseln selbstständig in die clipwise-Venv. Jobs werden nach ~/clipwise-work/<job>/ ($CLIPWISE_WORK) oder mit --workdir DIR geschrieben.

0. Setup-Prüfung (jede Sitzung, einmalig)

python3 SKILL_DIR/scripts/run.py check

Es muss mit ready enden. Falls nicht, teilen Sie dem Benutzer mit, dass clipwise ein einmaliges Setup benötigt (ca. 2 GB: Python-Pakete plus das Whisper-Modell), bitten Sie ihn, SKILL_DIR/setup.sh zu lesen und bash SKILL_DIR/setup.sh auszuführen, sobald er zustimmt. Fehlt ffmpeg oder Python 3.10+: setup.sh gibt den Installationsbefehl für das jeweilige Betriebssystem aus; installieren Sie keine Systempakete ohne Rückfrage.

Arbeitsablauf

  1. Vorbereitung (herunterladen + transkribieren, ein Befehl):
    python3 SKILL_DIR/scripts/run.py prep "<Pfad oder Link>" --job <Name> [--start S --max-seconds N] [--cookies cookies.txt] [--model large-v3-turbo] [--language xx]
    
    Ausgabe im Job-Ordner: source.mp4 (erstes Video + Audio-Stream, SDR, CFR 30 bei Neukodierung), probe.json, transcript.txt (eine [Start-Ende] (wN) Text-Zeile pro Segment, QUELL-Sekunden), transcript.json, words.tsv. Bei langen Videos verwenden Sie --start/--max-seconds für den zu clippenden Teil; die Transkription dauert auf CPU etwa 0,6-1x Echtzeit.
  2. Wählen Sie selbst die Momente aus. Lesen Sie transcript.txt (und alle # WARNING-Zeilen oben) mit SKILL_DIR/references/viral-rubric.md. Schreiben Sie <job>/picks.json: jeder Pick 10-50 s, zuerst der Hook, sauberes Payoff-Ende. Wie viele: siehe Regel unten.
  3. Holen Sie die Genehmigung vor dem Rendern ein. Zeigen Sie eine Zeile pro Pick: Zeitstempel, Hook, Titel, Einzeiler warum. Das Rendern dauert auf einer kleinen CPU etwa 1-2 Minuten pro Clip. Wenn Sie Untertitel manuell geschrieben haben (nicht-englische oder gemischtsprachige Rede), zeigen Sie auch diese Zeilen.
  4. Rendern:
    python3 SKILL_DIR/scripts/run.py render --job <Name> [--fast] [--only 2] [--music bed.mp3]
    
    Pro Pick in <job>/out/: clip_<ID>.mp4, clip_<ID>.txt (Titel, Beschreibung, angepinntes Kommentar, Hashtags, warum), clip_<ID>.json (Probe-Zahlen, Layout, Gesichtsbedeckung, SFX, Timings), clip_<ID>_cutmap.json, clip_<ID>_sheet.png. --fast = Vorschauqualität.
  5. Betrachten Sie jedes clip_<ID>_sheet.png mit Ihrem Bild-/Visionstool (10 Frames; rote Linie = y 1620, Plattform-UI darunter). Prüfen Sie: Gesicht im Bild, Untertitel lesbar, Untertitel nicht auf dem Gesicht, nichts Wichtiges unter der roten Linie, Farbe nicht ausgewaschen. Korrigieren Sie (Picks, Untertitel-Überschreibungen, --layout, --font-size) und rendern Sie mit --only <ID> neu.
  6. Übergeben Sie die MP4-Pfade und die .txt-Inhalte. Bieten Sie run.py clean --job <Name> an (löscht source.mp4 und tmp-Verzeichnisse, behält out/).

Wie viele Shorts pro Video

  • Der Benutzer hat eine Zahl genannt ("Mache 5 Shorts aus "): machen Sie genau diese Anzahl. Wenn das Video nicht so viele starke Momente hat, sagen Sie das vor dem Rendern und schlagen Sie die ehrliche Zahl vor ("Ich habe 3 Momente gefunden, die die Checkliste bestehen; die anderen 2 wären schwach").

  • Keine Zahl genannt: skalieren Sie mit der Länge der Quelle (oder des transkribierten Fensters):

    QuelllängeShorts
    unter 5 min1-2
    5-15 min3-5
    15-45 min5-8
    45 min+ (Podcast, Vortrag)8-15
  • Es zählen nur Momente, die die Rubrik-Checkliste bestehen. Füllen Sie nie mit schwachen Clips auf, um eine Zahl zu erreichen.

picks.json (minimal)

[{"id": "1", "start": 65.5, "end": 110.3, "title": "Wird jede Überschwemmung durch den Klimawandel verursacht?",
  "hook_start": 74.85, "hook_end": 80.1, "payoff_start": 102.0,
  "why": "Zuerst unerwartete Behauptung, wird am Ende aufgelöst.", "comment_bait": "Wusstest du das?",
  "description": "...", "hashtags": ["#shorts", "#climate"],
  "caption_overrides": [{"w": 219, "text": ""}, {"start": 90.1, "end": 92.4, "text": "exakte Wörter hier"}]}]

Erforderlich: id, start, end (Quell-Sekunden). hook_start/hook_end verschiebt eine 2-3 s lange Zeile nach vorne ("hook_mode": "repeat" behält sie auch im Hauptteil). payoff_start platziert den tiefen Ton. caption_overrides: {"w": N, "text": ""} bearbeitet/löscht Wort N ((wN) in transcript.txt, i in words.tsv); {"start", "end", "text"} ersetzt alle Wörter in diesem Bereich. Vollständiges Schema und Bewertung: references/viral-rubric.md.

Render-Flags

FlagWirkung
--fastx264 ultrafast CRF 24, 4 fps Gesichtserfassung (Vorschau). Standard: preset faster, CRF 20
--only IDnur einen Pick rendern (wiederholbar)
`--layout autocrop
--music DATEIbenutzerbereitgestellter Musik-Background, etwa 17 LU unter der Stimme, durch Sidechain-Kompression geduckt. --music-db 20 = leiser
--sfx-dir VERZverwenden Sie Ihre eigenen whoosh_fast, whoosh_soft, thud_low, pop, tick (.wav/.mp3/.flac/.ogg) anstelle der synthetisierten
--no-sfx, --no-silence-cutdiese ausschalten
--font "Lato Black", --font-size 84, `--highlight yellowgreen, --no-upper`
--preset, --crf, --keep-tmpEncoder-Überschreibungen; Voice/Mix-WAVs und captions.ass zu Debugging-Zwecken behalten

Umgebung: CLIPWISE_HOME (Standard ~/.clipwise), CLIPWISE_VENV, CLIPWISE_WORK, CLIPWISE_MODEL (Standard large-v3-turbo), CLIPWISE_DEVICE (auto|cpu|cuda).

Was das Rendern pro Pick macht

Hook nach vorne verschoben, Stille > 0,35 s geschnitten (Schwelle basierend auf den eigenen Sprach-/Geräuschpegeln des Clips), verbleibende Teile auf das 30-fps-Raster gerastert, sodass Audio-Samples den Frames entsprechen. Gesichtsverfolgung mit YuNet auf den nach dem Schnitt verbleibenden Frames: dominantes Gesicht, klebrig (ein neues Gesicht muss 1,6x größer sein und 1,2 s bestehen, um zu übernehmen), sanfte Kamera mit einer Totzone, Schnappschüsse nur bei Schnitten. Punch-In-Zoom 1.0/1.12 alle 2-4 s. Wort-für-Wort-ASS-Untertitel (maximal 4 Wörter, aktives Wort hervorgehoben) unterhalb des Kinns und oberhalb von y 1620 platziert. Sprachbereinigung, synthetisierte SFX, optionale geduckte Musik, zwei Durchgänge loudnorm auf -14 LUFS / -1,5 dBTP. H.264 + AAC 48 kHz, 1080x1920, 30 fps. Endgültige A/V-Stream-Dauern werden überprüft.

Gemessene Zeiten (2-Kern-CPU, keine GPU)

Schrittgemessen
Fetch: 85 MB 1080p VP9 Web-Download + 3 min Fenster-Neukodierung auf H.2647,7 min insgesamt (Download dominiert, etwa 5 min)
Fetch: 20 s 10-Bit-HDR-iPhone-Clip (Tone-Map + CFR)45 s (HDR kostet etwa das 2,3-fache der Dauer)
Transkribieren large-v3-turbo, 3 min Englisch110 s ASR (0,61x Echtzeit) + 19 s Modell-Ladezeit
Rendern Standard, 40,6 s Clip85 s
Rendern --fast, 26,4 s Clip / 17,1 s Pad-Clip32 s / 30 s

Fallstricke

  • YouTube-Bot-Wall ("Melden Sie sich an, um zu bestätigen, dass Sie kein Bot sind"): gelegentlich, IP-abhängig. fetch beendet mit Exit-Code 3. Bitten Sie den Benutzer um --cookies cookies.txt (aus dem Browser exportiert) oder die Datei selbst / einen Drive- oder Dropbox-Link. Wiederholen Sie keine yt-dlp-Player-Clients oder Proxys. Private Drive-Links beenden mit Exit-Code 2: Bitten Sie um Freigabe für "jeder mit dem Link" oder eine lokale Datei.
  • A/V-Synchronisation ist eine harte Regel. Jede Ausgabe-Audio- und Video-Stream-Dauer muss innerhalb von 0,1 s übereinstimmen (das Rendern prüft dies). Schneiden Sie niemals mit Stream-Kopie an einem Nicht-Null-Start, schneiden Sie niemals Audio mit aselect; verwenden Sie die Skripte.
  • ASR-Rezept ist festgelegt: Normalisieren Sie zuerst das Audio, erkennen Sie die Sprache automatisch, kein VAD, kein initial_prompt (es gelangt in das Transkript). Behalten Sie large-v3-turbo; small wiederholt sich und halluziniert bei akzentuierter oder gemischtsprachiger Rede (die Transkription warnt vor Wiederholungen).
  • Nicht-englische Sprache kann übersetzt zurückkommen. Für viele Sprachen, die in einer nicht-lateinischen Schrift geschrieben werden (und für gemischtsprachige Rede) gibt Whisper Englisch zurück. Das Transkript dient dann nur als Zeit- und Bedeutungsanleitung: Schreiben Sie die Untertitelzeilen in der eigenen Sprache des Sprechers und Schrift mit caption_overrides {"start", "end", "text"}-Bereichen und zeigen Sie diese dem Benutzer vor dem Rendern. Titel und Hashtags folgen ebenfalls der Sprache des Sprechers.
  • Untertitel: niemals über dem Gesicht und oberhalb der unteren ~300 px (Plattform-UI). Wenn das Sheet einen Konflikt zeigt, kürzen Sie den Pick, verwenden Sie --layout pad oder verkleinern Sie --font-size.
  • Tracker folgt dem größten Gesicht, nicht dem Sprecher. Verwenden Sie bei zwei Personen, die in einer breiten Aufnahme sprechen, --layout pad oder wählen Sie ein Fenster, in dem eine Person spricht.
  • Hochskalierung: Eine 1080p 16:9-Quelle wird auf 608x1080 beschnitten und 1,8x skaliert; 720p-Quellen werden 2,7x skaliert und sehen weich aus. Bevorzugen Sie 1080p+-Downloads.
  • Kleine CPUs: Führen Sie niemals zwei Kodierungen oder Transkription und eine Kodierung gleichzeitig aus; das Rendern verarbeitet Picks nacheinander (run.py macht das bereits).

Verwandte Skills