Files
FuerDieCuts/README.md
T
ferdi2goandClaude Opus 5.5 ccd70bd585 Schnitt-Oberfläche mit Optionen, Mixer, Voice-over und Export bauen
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>
2026-09-29 11:00:59 +00:00

97 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.