Für die Zielversion wird ausschließlich das Format-Segment ersetzt: `9x16` → `4x5`. Alle anderen Segmente bleiben zeichengleich erhalten.
Für die Zielversion wird ausschließlich das Format-Segment ersetzt: `9x16` → `4x5`. Alle anderen Zeichen bleiben gleich erhalten.
**Schreibweisen:** Das Format darf groß oder klein (`9x16`, `9X16`, `9×16`) und mit `-`, `_` oder Leerzeichen abgetrennt sein; die Trenner bleiben in der Zielfassung erhalten (`Kampagne_9X16_v2` → `Kampagne_4x5_v2`). Ein Rest hinter dem Format ist nicht nötig.
**Kein Format im Namen:** Die App zeigt das schon beim Reinziehen und bietet „4x5 anhängen“ an. Dann wird der ganze Dateistamm zum Projekt, und `4x5` wird mit dem Trenner angehängt, den der Name schon benutzt (`Sommerfest Teaser.mov` → `Sommerfest Teaser/Sommerfest Teaser 4x5.mp4`). Ohne diese Wahl wird die Datei übersprungen.
**Abbruchbedingungen** — die App verarbeitet nicht und meldet es sichtbar:
- Dateiname entspricht nicht dem Schema (weniger als vier Segmente)
- Format-Segment ist nicht `9x16`
- Kein `9x16` mit Projektnamen davor im Namen (Ausweg: „4x5 anhängen“, s. o.)
- Quelldatei hat kein 9:16-Seitenverhältnis
- Zieldatei existiert bereits (überschreiben nur nach Rückfrage)
@ -57,15 +60,17 @@ Der 4:5-Ausschnitt behält die **volle Breite** und beschneidet oben und unten:
```
Breite bleibt unverändert
Höhe = Breite × 5 ÷ 4 (auf gerade Zahl gerundet)
Anker vertikal zentriert (Offset später konfigurierbar)
Anker vertikal zentriert (pro Datei verschiebbar, s. u.)
```
**Ausschnitt verschieben:** In der Review-Ansicht lässt sich der 4:5-Rahmen mit der Maus nach oben oder unten ziehen. Für Clips mit Szenenwechsel gibt es **Positionsmarken**: an die Stelle spulen, *Marke setzen* (Taste `M`), Rahmen ziehen. Jede Marke gilt ab ihrem Frame bis zur nächsten, als harter Schnitt ohne Fahrt dazwischen. Tasten: Leertaste spielt ab, `←`/`→` springen um ein Frame. Der Plan gilt pro Datei und wird mit *Übernehmen* gesetzt; die Dateiliste zeigt angepasste Ausschnitte in Gold.
| Quelle | Ziel |
|---|---|
| 1080 × 1920 | 1080 × 1350 |
| 2160 × 3840 | 2160 × 2700 |
**Codec-Verhalten:** Der Quell-Codec wird erkannt und passend ausgespielt — ProRes bleibt ProRes, H.264 bleibt H.264 mit vergleichbarer Bitrate. Die Audiospur läuft per Passthrough durch, ohne Neukodierung. Framerate, Farbraum und Dauer bleiben unangetastet.
**Codec-Verhalten:** Die 4:5-Fassung ist immer MP4 mit H.264 (High Profile) und AAC 128 kbit/s, das Zielformat für Feed und Meta Ads, egal ob ProRes, H.264 oder HEVC reinkommt. Die Bitrate richtet sich nach Auflösung und Framerate. Framerate und Dauer bleiben unangetastet.
## Funktionsumfang
@ -82,11 +87,11 @@ Anker vertikal zentriert (Offset später konfigurierbar)
- [x] Review-Ansicht: 9:16-Master mit eingeblendetem 4:5-Rahmen zur Framing-Kontrolle, scrubbar
- [ ] Menu-Bar-Betrieb mit Drop-Target
- [ ] Vertikaler Crop-Offset pro Datei justierbar
- [ ] In-App-Updates über Sparkle
- [x] Vertikaler Crop-Offset pro Datei justierbar, mit Positionsmarken für Szenenwechsel
- [x] In-App-Updates über Sparkle (automatisch plus „Nach Updates suchen …“ im App-Menü)
- [ ] Batch-Verlauf der letzten Durchläufe
- [ ] Hilfe-Bereich: klickbare Kurzanleitung zur Bedienung der App
- [ ] Rechtlich erforderliche Angaben (Impressum o.ä.) einbinden — Absicherung, wo genau (in-App, Download-Seite) noch offen
@ -198,7 +204,14 @@ DMG und `appcast.xml` landen anschließend auf dem eigenen Server. Der Code lieg
Die Seite unter [droptwo.zielke.studio](https://droptwo.zielke.studio) liegt in `site/` und wird nicht von `publish-release.sh` hochgeladen. Die Versionsnummer liest sie selbst aus `appcast.xml`, nach einem Release muss sie also nicht angefasst werden. Nach Änderungen an der Seite:
```bash
rsync -a --chmod=F644 site/index.html site/favicon.svg samuelzielke@10.0.5.223:/var/www/updates/droptwo/
rsync -a --chmod=D755,F644 site/index.html site/favicon.svg site/fonts site/og samuelzielke@10.0.5.223:/var/www/updates/droptwo/
```
Schriften liegen selbst gehostet in `site/fonts/` (keine Anfragen an Google). Das Vorschaubild für geteilte Links `site/og/og-de.png` entsteht aus `og-de.html`: