Skip to content
andrew.dunn.dev

Playbill

Source

Playbill assembles a video programme from a manifest. program.toml names each segment in order and input/ holds the clips, photos and music; the output is one film with fade-to-black transitions, plus a file per act when the manifest defines acts. Pinboard is the sister tool: it renders the meandering photo wall, and Playbill joins everything around it.

temp filesPROGRAMprogram.tomlSOURCEvideo clipsPLAYBILLrendersix segment typesFFMPEGconcatfade to blackOUTPUTfinal videoacts optional
From TOML program to one video
  • The manifest and a folder of clips go in; nothing about the programme lives in code.
  • Each segment renders to its own file under output/segments/, picture and sound faded together.
  • ffmpeg concatenates the files, copying the video and re-encoding only the audio.

The join holds because every renderer writes the same kind of file. Sources arrive with stereo, surround or no sound at all; each is converted to one sample format, rate and channel layout, and silence is synthesized where a clip or card has none. The final pass runs the mix through a limiter and encodes it once.

Segment types

SEGMENT TYPESconcatPROGRAMprogram.tomlsegment definitionsTEXT CARDtitleVIDEO + TEXTintroPASS-THROUGHepisodePASS-THROUGHscenePHOTO + TEXTquotePHOTO WALLcreditsEach rendered to temp filewith fade-to-black transitionsOUTPUTfinal videoIF ACTS DEFINEDper-act files
Six segment types to one video
  • title: lines of text on black, with duration and fade timing; music under it is optional.
  • intro: a portrait clip on the left, title, subtitle and description on the right.
  • episode and scene: pass-through clips scaled and padded to the output frame, trimmed and optionally tailed with black.
  • quote: a photo or clip on the left, a name and quote on the right.
  • credits: a scrolling photo wall with quotes interspersed, the music ducking under each voice clip.

CLI

The flags are shaped for iteration:

  • --list prints the programme by act without rendering anything.
  • --segment N renders one segment.
  • --preview truncates long segments to about fifteen seconds, head, middle and tail.
  • --skip-render reuses the rendered segments and only re-concatenates.

Playbill does not edit clips. Trimming to a mark and padding with black is the extent of it; anything finer happens before a file lands in input/. Python, Pillow, NumPy and ffmpeg; MIT licensed.