feat(video): add video upload with remux/transcode playback

Add video as a media kind in photos: streaming upload with per-kind
limits, ffprobe metadata, poster frame reusing the image variant
pipeline, and a playback object (remux when web-compatible, else
h264/yuv420p/aac transcode). Video jobs run on a separate pool with a
long lease. Frontend gains a video viewer, grid badge/duration and
video upload.
This commit is contained in:
iu
2026-10-11 20:37:53 +03:00
parent d059d042f0
commit d38ede0201
52 changed files with 2717 additions and 82 deletions
+15
View File
@@ -55,6 +55,21 @@ WORKER_BATCH=100
WORKER_CONCURRENCY=4
WORKER_PENDING_TTL=10m
# Upload size limits per media kind (plain bytes or KB/MB/GB suffix).
IMAGE_MAX_UPLOAD_SIZE=100MB
VIDEO_MAX_UPLOAD_SIZE=2GB
# Video processing toolchain. Video is prepared for browser playback with
# ffmpeg/ffprobe installed on the host (no Docker). When either binary is
# missing, video upload is disabled and /api/health reports video: unavailable;
# images keep working.
FFMPEG_PATH=ffmpeg
FFPROBE_PATH=ffprobe
# How many video transcodes run in parallel (kept separate from image workers).
VIDEO_TRANSCODE_CONCURRENCY=1
# Directory for temporary spool/transcode files (empty = system temp dir).
VIDEO_TEMP_DIR=
# Logging. LOG_LEVEL=debug adds per-request access logs and expected 4xx errors.
# LOG_FORMAT selects the output encoding.
LOG_LEVEL=info