Add MONTAGE_MUSIC_LOOPS per-movement music loop multiplier

Short adagio movements (Summer Mvt 2 at 107s, Winter Mvt 2 at 132s, etc.)
compress each day to only 3-5 seconds of screen time at 1×.  Looping the
music N times multiplies the per-day target duration proportionally so the
footage is less aggressively sped up and more watchable.

- sky-cam.conf: add MONTAGE_MUSIC_LOOPS and per-movement overrides
  (Summer Mvt2=3×, Winter Mvt2=3×, Autumn Mvt2=2×, Summer Mvt3=2×, Spring Mvt2=2×)
- 4-seasons.sh: multiply target_per_clip by loops
- montage-mvt.sh: compute effective_duration, use -stream_loop for audio,
  fix fade_out_start, -t, and post-build duration check
- make-finals.sh: multiply target by loops

https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
This commit is contained in:
Claude
2026-04-20 20:11:10 +00:00
parent 387b84f367
commit 0ccfb2dae0
4 changed files with 39 additions and 12 deletions
+18
View File
@@ -251,6 +251,24 @@ MONTAGE_FADE_DUR=2.0 # video + audio fade in/out (seconds)
MONTAGE_ATTR_DUR=6 # attribution overlay total duration (seconds)
MONTAGE_ATTR_FADE=1 # attribution fade-in and fade-out length (seconds)
# ── Music loop multiplier ─────────────────────────────────────────────────────
# Short movements (especially Mvt 2 adagios) give each day only 3-5 seconds of
# screen time. Looping the music N times multiplies the per-day target so days
# are less compressed and more watchable. Per-movement overrides take the form
# MONTAGE_MUSIC_LOOPS_<Season>_<MvtNum>.
#
# Recommended starting point based on movement durations:
# Summer Mvt 2 (107s) → 3× Winter Mvt 2 (132s) → 3×
# Autumn Mvt 2 (152s) → 2× Summer Mvt 3 (159s) → 2×
# Spring Mvt 2 (171s) → 2× others 1× (already ≥10 s/day)
#
MONTAGE_MUSIC_LOOPS=1 # default for all movements
MONTAGE_MUSIC_LOOPS_Summer_2=3
MONTAGE_MUSIC_LOOPS_Winter_2=3
MONTAGE_MUSIC_LOOPS_Autumn_2=2
MONTAGE_MUSIC_LOOPS_Summer_3=2
MONTAGE_MUSIC_LOOPS_Spring_2=2
# ── Direct RTSP capture (replaces MotionEye / any NVR) ────────────────────────
# capture.sh pulls frames directly from each camera's RTSP stream.
# No NVR software required — just ffmpeg and the camera's stream URL.