feat: Hero-Video beim Upload automatisch fuers Web komprimieren (ffmpeg)
Docker Image bauen und veroeffentlichen / build-and-push (push) Successful in 4m35s
Docker Image bauen und veroeffentlichen / build-and-push (push) Successful in 4m35s
Ein direkt von Kamera/Handy hochgeladenes Video (57 MB) lud spuerbar langsam: keine Kompression, kein Ton entfernt, und ohne "faststart" musste der Browser oft die gesamte Datei laden, bevor die Wiedergabe ueberhaupt beginnen konnte. Neues lib/video-transcode.ts (ffmpeg-static, per pnpm-workspace.yaml allowBuilds freigegeben) enkodiert jedes hochgeladene Video jetzt zu einem web-optimierten MP4 neu: Ton entfernt (Hero-Video ist ohnehin stumm), auf max. 1920px Breite skaliert, CRF 26 mit Bitratendeckel, "+faststart" fuer sofortigen Wiedergabestart. Nebeneffekt: ein erfolgreicher Transcode validiert das Video jetzt genauso vollstaendig wie reencodeImage() das bei Bildern schon tut (nicht mehr nur Magic-Bytes). ffmpeg-static-Binary wird in der migrator-Docker-Stage mitinstalliert (Next.js' Standalone-Tracing erkennt den Pfad hinter dem pnpm-Store-Symlink nicht zuverlaessig), lokal per npm-Postinstall ohne manuelle Einrichtung. Getestet mit synthetischem Testvideo: Transcode laeuft durch, Ausgabe enthaelt keine Audiospur mehr, ist als H.264/MP4 dekodierbar. Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
1 parent
1acd8ed4b9
commit
8ddf781d9b
7 files changed
+301
-28
No files matched your search
+6
-5
@@ -36,11 +36,12 @@ export const MAX_UPLOAD_BYTES = 8 * 1024 * 1024;
|
||||
* 100 MB: deckt auch ein laengeres oder nicht web-optimiertes Hero-Video
|
||||
* (z.B. direkt von einer Kamera/einem Handy exportiert, oft 40-80 MB) ab.
|
||||
* Grosszuegiger als MAX_UPLOAD_BYTES (Bilder), weil Video-Dateien inhaerent
|
||||
* groesser sind — Videos werden aber (anders als Bilder) NICHT neu enkodiert
|
||||
* (dafuer gibt es hier keine sharp-Entsprechung ohne eine ffmpeg-
|
||||
* Abhaengigkeit), die Groessengrenze ist daher die einzige Bremse gegen
|
||||
* uebermaessig grosse Uploads. Muss zum "proxy-body-size" in
|
||||
* k8s/06-ingress.yaml passen (dort grosszuegiger bemessen).
|
||||
* groesser sind. Diese Grenze gilt fuer die ROHDATEI vor dem Transcoding
|
||||
* (siehe lib/video-transcode.ts transcodeVideoForWeb, aufgerufen in
|
||||
* app/api/admin/upload-video/route.ts) — das tatsaechlich gespeicherte,
|
||||
* web-optimierte Ergebnis ist danach in aller Regel deutlich kleiner. Muss
|
||||
* zum "proxy-body-size" in k8s/06-ingress.yaml passen (dort grosszuegiger
|
||||
* bemessen).
|
||||
*/
|
||||
export const MAX_UPLOAD_VIDEO_BYTES = 100 * 1024 * 1024;
|
||||
|
||||
|
||||
Reference in new issue
Block a user