5 Commits
Author SHA1 Message Date
Claude 1a1ff1a041 Fix one-frame bug; add --test mode to daily_sunrise_video.sh
Root cause: the concat list had no 'duration' entries, so all JPEG
frames collapsed to timestamp 0 and only one frame survived encoding.
Fix: add 'duration CAPTURE_INTERVAL' per entry in both scripts.

Also add fps=25 to the speed-adjust step so the VFR source is resampled
to a standard frame rate — without this, players see ~6fps and may drop
frames to reach the declared rate.

daily_sunrise_video.sh --test [MINUTES]:
  Skips sunrise.py lookup and capture-window wait. Uses the last MINUTES
  minutes of captured frames (default 2). Overlay shows the mid-point
  frame's timestamp. Audio grabbed live from RTSP immediately.
  Output: <date>-daily-sunrise-test.mp4 — no notifications or upload.

  Usage: ./daily_sunrise_video.sh east --test 2

https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
2026-04-21 17:52:29 +00:00
Claude 4c02de5fd4 Overlay: yellow text, lower-right position; test-sunrise uses captured frames
- fontcolor: white → yellow (both scripts)
- y position: (h-th)/2 → h-th-18 (vertically centered → lower-right corner)
- test-sunrise.sh: reverted to reading last 60 frames from capture directory
  (~10 minutes at 10s interval) instead of live RTSP capture

https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
2026-04-21 17:32:31 +00:00
Claude f3839ce1cf Fix overlay vertical text; test-sunrise captures fresh RTSP frames
Overlay fix (both scripts):
  Switch from text='...\n...' to drawtext's textfile= option. Writing
  each character on its own line eliminates the \n escape ambiguity in
  ffmpeg's filter-string single-quote parser, which was causing 'n' to
  appear literally instead of as a line break.

test-sunrise.sh redesign:
  Now captures NUM_FRAMES fresh RTSP frames (120s at default interval)
  at run time instead of reading pre-existing frames from the capture
  directory. The RTSP URL must be set in .env — the script fails early
  with a clear message if it is not.

https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
2026-04-21 17:14:17 +00:00
Claude eba8ddd550 Fix sunrise overlay vertical text and test-sunrise.sh pipeline bugs
- Overlay text was showing characters run together (e.g. '1n2n') because
  inside ffmpeg single-quoted filter text, \n is consumed as just 'n'.
  Fix: use \\\\n in bash double-quotes which stores \\n in the variable,
  which ffmpeg then parses as \n, which drawtext renders as a newline.
  Applied to both test-sunrise.sh (MID_VERT) and daily_sunrise_video.sh
  (SR_VERT, replacing the awk one-liner with the same bash approach).

- test-sunrise.sh concat list was missing per-frame duration entries,
  causing 12 frames to encode as 0.48s (25fps default) and then slow
  down instead of compress.  Fixed by writing 'duration INTERVAL' per
  frame so 12 frames × 10s = 120s raw → 12× compression to 10s.

- Removed 2>/dev/null from audio ffmpeg call in test-sunrise.sh so
  capture failures are visible for diagnosis.

https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
2026-04-21 16:35:25 +00:00
Claude 84fa60b857 Add test-sunrise.sh pipeline smoke test
Runs the same 4-step pipeline as daily_sunrise_video.sh but uses the
most recent ~2 minutes of captured frames instead of the sunrise window,
grabs live RTSP audio for the audio mix step, and accepts an arbitrary
output path — so it can be run at any time of day to verify the full
pipeline (speed-adjust, audio mix, vertical time overlay) without
waiting for tomorrow's sunrise.

https://claude.ai/code/session_01C4jbd3waXG3eKZYbGUjLUQ
2026-04-21 16:20:15 +00:00