Broadcast video travels as MPEG transport streams, and their program clock (PCR) has to be right or receivers stutter. upmux takes a stream apart and puts it back together with fixed timing, in a pipeline I built on the Upipe framework:
- It reads a transport stream from a file or from UDP.
- It demultiplexes the stream and frames the elementary streams: H.264, MPEG video, MPEG audio, A/52, teletext and DVB subtitles.
- It either passes them straight through, or decodes and re-encodes the video with libavcodec and x264 at a chosen quality (CRF).
- It muxes everything again and writes it to a file or UDP.
Under the hood it uses Upipe’s memory pools, a dejitter probe on the clock, and separate worker threads for the source, the codec stages and the sink. You set input, output, CRF, remux-only mode and log level on the command line.