Rendering Without Silent Failures
Once video-use has an approved edit decision list, the problem changes. The question is no longer which words or moments belong in the sequence, but whether the renderer can turn those choices into a playable file without introducing defects that the EDL could not express. This chapter follows the renderer's staged contracts—per-segment processing, fades, shared frame rate, format normalization, and focused tests—so readers can predict why operation order matters and what “correct” still leaves unproven.
The EDL becomes an execution contract
An EDL range looks simple: it names a source, gives a start and end, and may include a beat, quote, reason, grade, overlay, or subtitle reference. During rendering, those fields become assumptions that must hold simultaneously. The source must be accessible. The range must have a positive duration. The audio and video must be processed together. Every range must produce a segment compatible with the other segments, even when the original files came from different cameras or recording settings.
video-use does not send all ranges through one giant filter graph. It extracts each range into its own clip first. That choice gives the renderer a clear place to apply operations that belong to the source segment: scaling, optional HDR tone mapping, color correction, and audio fades. The result is a directory of intermediate segments whose order matches the EDL. The EDL remains readable as a set of decisions, while the intermediate files make the consequences of those decisions inspectable.
The architecture can be summarized as a sequence of contracts:
This is not merely a list of commands. Each transition answers a failure question. If a segment has the wrong color space, normalization belongs before it joins the base. If a cut produces an audio pop, the fade must be present in the segment that contains the boundary. If two sources use different rates, they must be made compatible before a copy-based join. The later composite stage can then add presentation layers without having to rediscover the source conditions for every range.
Why per-segment processing comes first
A video filter changes the decoded image, and an audio filter changes the decoded sound. Once such a filter is applied, the affected stream must be encoded into a new representation. video-use accepts that cost once per selected segment so it can apply the right correction at the right source range. It then uses the concat demuxer with -c copy to join those prepared clips without re-encoding the whole sequence merely to assemble it.
The word “lossless” needs careful interpretation here. The concat operation is a copy-based join, so that stage does not perform another generation of video or audio encoding. The individual extracts have already been encoded, however. The design avoids an unnecessary second encode during assembly; it is not a claim that the complete pipeline preserves the original compressed bits. That distinction matters when evaluating quality and when explaining why the staging exists.