ccd70bd585f20cc77b43dd5982def1311e660757
Im Projekt lassen sich Intro, Outro, Beschleunigen, Stummschalten und Backing Track anhaken, Dateien hochladen und alle Tonspuren von 0 bis 100 regeln. Pro Clip nimmt der Browser ein Voice-over auf, während der Clip im späteren Tempo läuft. Einstellungen werden verzögert gespeichert; der Export zeigt Fortschritt, Vorschau und Download. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
FuerDieCuts
Schneidet aus einem WhatsApp-Chatexport automatisch ein YouTube-Video.
Der Export (ZIP mit Medien) wird hochgeladen, die Videos werden anhand der Zeitstempel im Chat chronologisch sortiert. Über eine Maske wählt man, was automatisch passieren soll:
- Intro und Outro einfügen (eigene Dateien)
- Clips chronologisch aneinanderreihen
- Clips über 10 Sekunden auf genau 10 Sekunden beschleunigen
- Ton der Clips stummschalten (Intro und Outro ausgenommen)
- Backing Track unter den Clip-Teil legen (wird wiederholt und passend gekürzt)
- Voice-over pro Clip aufnehmen oder hochladen
- Lautstärke jeder Tonspur von 0 bis 100
Ausgabe ist ein MP4 in 1920×1080 mit 30 fps. Hochkant-Clips werden mittig mit unscharfem Hintergrund eingesetzt. Zugang ist über eine PIN geschützt.
Voraussetzungen
- Node.js 20
- ffmpeg und ffprobe im
PATH(sudo apt install ffmpeg)
Installation und Start
npm install
cp .env.example .env # APP_PIN eintragen
npm run dev
npm run dev startet den Express-Server samt Vite im Entwicklungsmodus auf
einem Port (PORT, Vorgabe 3000) und liest dabei die lokale .env. In Produktion:
npm run build
NODE_ENV=production APP_PIN=… npm start
Umgebungsvariablen
| Name | Bedeutung |
|---|---|
APP_PIN |
PIN für die Anmeldung, Pflicht |
SESSION_SECRET |
optional; signiert die Sitzungs-Cookies, sonst wird eines erzeugt |
PORT |
Port des Servers, Vorgabe 3000 |
VCH_DATA_DIR |
Ablage für Projekte und Uploads, Vorgabe ./data |
Ablauf
- WhatsApp-Chat mit „Medien anhängen“ exportieren und entpacken.
- In der App „Neues Video“, den Exportordner wählen. Der Browser liest den Chat selbst; vorgewählt ist Montag bis Freitag der Vorwoche.
- Videos prüfen (Duplikate sind abgewählt) und hochladen. Nur die gewählten Videos werden übertragen, in Stücken von 8 MB; ein Abbruch lässt sich durch erneutes Wählen des Ordners fortsetzen.
- Im Projekt anhaken, was passieren soll, Intro, Outro und Backing Track hochladen, Lautstärken einstellen und pro Clip ein Voice-over aufnehmen (der Clip läuft dabei im späteren Tempo) oder als Datei hochladen.
- „Video erstellen“ rendert im Hintergrund; danach herunterladen.
Wie geschnitten wird
- Jeder Clip wird einzeln auf 1920×1080 bei 30 fps gebracht. Hochkant-Clips stehen mittig vor einer unscharfen, vergrößerten Kopie ihrer selbst.
- Clips über 10 Sekunden werden per
setptsauf genau 10 Sekunden beschleunigt; ihr Ton (falls nicht stumm) per verketteteratempo-Stufen. - Voice-over und Clip-Ton werden pro Clip gemischt und auf Clip-Länge gekürzt.
- Die Clip-Segmente werden aneinandergehängt, der Backing Track darunter wiederholt, gekürzt und über 2 Sekunden ausgeblendet; danach kommen Intro und Outro dazu.
- Segmente liegen zwischengespeichert unter
render/cache; wer nur die Musik ändert, wartet nicht auf alle Clips. Zwischenstände tragen unkomprimierten Ton, erst das Endergebnis wird AAC, damit sich über viele Übergänge keine Verschiebung aufsummiert. - Exporte laufen nacheinander, weil ffmpeg alle Kerne nutzt.
Befehle
npm test– Tests (Node-Testrunner)npm run lint– ESLintnpm run build– Frontend bauen
Aufbau
server/– Express-Server: Anmeldung, Projekte, Upload in Stücken, ffprobeserver/render.js– Schnittplan und ffmpeg-Ketteserver/renderQueue.js– Exporte im Hintergrundsrc/– React-Oberfläche (Vite)src/lib/whatsapp.js– liest den Chatexport und ordnet die Videossrc/lib/upload.js– Upload in Stücken mit Wiederaufnahmetest/– TestsDockerfile– Produktionsimage mit ffmpeg; Deploy über VCH (.vch/deploy.yaml)
Aufgebaut auf Node.js, Express, React, Vite und ffmpeg.
Languages
JavaScript
92.6%
CSS
6.7%
HTML
0.4%
Dockerfile
0.3%