A single ffmpeg filter graph with 84 inputs ate the machine. The fix was thirty lines and a different shape of graph.
The render finished with exit code 143 and no traceback. That is the signature of the kernel, not the program: the OOM killer picked the process and sent SIGTERM.
Measured before the fix: one filter_complex with 84 inputs peaked at 3.8 GB resident on a machine with 7.6 GB total. Nothing was leaking. Every input stream was decoded and held open simultaneously, because a single graph has to reference all of them at once.
The fix was not a bigger machine. It was a different shape of graph: merge pairwise, in rounds, so at most two streams are decoded at any moment. Peak dropped to about 1.0 GB across 30 clips at 1080p, and the duration stayed exact.
The general rule: a graph's memory is proportional to the number of simultaneously open inputs, not to the total work. Splitting the work into rounds costs a few intermediate files and buys back the machine.
