The most useful timecode in a Transport Stream is either the PCR value or
the PTS values in the video or audio PES streams. PCR's and PTS's don't
get touched by null packet strippers, so they will always indicate the
correct time (in a contiguous stream).
GOP timecodes (in the video stream) are pretty much useless. There are streams
with no GOP headers and streams with the timecode always set to 0:0:0:0.
If you can parse out the first video PTS and last video PTS out of the
bitstream, you will have a very accurate measure of the file time length.
Intermediate PTS's will also work fine. The only time PCR's and PTS's don't
work is if the file is the concatenation of two or more different TS streams
(not usually the case with OTA capture).
PCR's are 42 bits and PTS's are 33 bits.
For a program that can parse PCR's and PTS's, see my TS demuxer source code
This code will also dump the instantaneous TS bitrate. There is no indication
of TS bitrate in a TS stream. It must be calculated.