Speaker notes
This is tools/still-to-ts.sh, written out. GStreamer makes the H.264 stream and packs it in a plain TS on its standard output (fdsink); ffmpeg reads that, copies the video without re-encoding (-c copy) and muxes it again at a constant rate.
-muxrate is the useful bitrate of the channel, in bit/s. -muxdelay 4 sends every frame 4 s ahead of its decode time. -pat_period 1 sends PAT and PMT every second, -sdt_period 5 the SDT every 5 s, -pcr_period 500 the PCR every 500 ms.
-probesize and -analyzeduration make ffmpeg start after about a second of stream; with its defaults it waits for megabytes, which at this rate never come. The first packet still leaves about 15 s after the start: the encoder, the probe and the mux delay together.
pkt_size=1316 puts 7 TS packets in each UDP datagram, the usual size. Use the address and port your modulator listens on, or a file name to record.
Measured over 70 s: constant 16.18 kbit/s, PAT and PMT 1.5 kbit/s each, SDT 0.3, video 9.5, null packets 3.4; no continuity errors; every frame between 0.56 and 3.9 s early. The stream decodes with ffmpeg and with GStreamer.
For H.265: CODEC=h265 tools/still-to-ts.sh. Measured: the card's video was 11.6 kbit/s instead of 9.5, so on this picture H.264 is the better choice.