luvcraft/film.lisp
Film session for seconds of real time into an MP4 at pathname.
Frames are captured at frame-rate, paced against the wall clock so that
overlay animation driven by real time plays at its true speed. before-frame,
when given, is called with the frame index before each capture, and is the
place to move the camera. include-hud-p and include-viewmodel-p choose the
same compositing layers as a still capture. Returns pathname and the frame
count.
(session pathname
&key (seconds 8) (frame-rate 30) before-frame
(include-hud-p t)
(include-viewmodel-p t))Film SESSION for SECONDS of real time into an MP4 at PATHNAME. Frames are captured at FRAME-RATE, paced against the wall clock so that overlay animation driven by real time plays at its true speed. BEFORE-FRAME, when given, is called with the frame index before each capture, and is the place to move the camera. …
(application pathname
&key (seconds 8) (frame-rate 30) before-frame progress-function options
(label "application film"))Film APPLICATION offscreen into a real-time-paced H.264 MP4. The application chooses readiness, advancement, frame meaning, and cleanup; the shared implementation owns the fixed-size target, readback, ffmpeg writer, and absolute wall-clock pacing. Return PATHNAME and the encoded frame count.
Films of luvcraft sessions through
luv's shared application capture.A film never touches the swapchain. The shared capture transaction owns its offscreen target, readback, submission, video writer, pacing, and cleanup; the Luvcraft methods in CAPTURE.LISP own readiness and frame meaning.
Overlay animation (fireworks, gnomes, the marquee) advances by wall clock at each rendered frame, so a film loop paced against real time records the same motion a viewer would see, whether or not the session's own frame loop is running or its window is visible.