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>
97 lines
3.7 KiB
Markdown
97 lines
3.7 KiB
Markdown
# 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
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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
|
||
|
||
1. WhatsApp-Chat mit „Medien anhängen“ exportieren und entpacken.
|
||
2. In der App „Neues Video“, den Exportordner wählen. Der Browser liest den
|
||
Chat selbst; vorgewählt ist Montag bis Freitag der Vorwoche.
|
||
3. 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.
|
||
4. 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.
|
||
5. „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 `setpts` auf genau 10 Sekunden
|
||
beschleunigt; ihr Ton (falls nicht stumm) per verketteter `atempo`-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` – ESLint
|
||
- `npm run build` – Frontend bauen
|
||
|
||
## Aufbau
|
||
|
||
- `server/` – Express-Server: Anmeldung, Projekte, Upload in Stücken, ffprobe
|
||
- `server/render.js` – Schnittplan und ffmpeg-Kette
|
||
- `server/renderQueue.js` – Exporte im Hintergrund
|
||
- `src/` – React-Oberfläche (Vite)
|
||
- `src/lib/whatsapp.js` – liest den Chatexport und ordnet die Videos
|
||
- `src/lib/upload.js` – Upload in Stücken mit Wiederaufnahme
|
||
- `test/` – Tests
|
||
- `Dockerfile` – Produktionsimage mit ffmpeg; Deploy über VCH (`.vch/deploy.yaml`)
|
||
|
||
Aufgebaut auf Node.js, Express, React, Vite und ffmpeg.
|