In general, ffmpeg
uses file headers for information where it can (when it recognises header formats), and otherwise falls back to calculating it from duration and file size.
Wrapper formats (eg. mov, mp4) don't have a bitrate of their own - the bitrate is a characteristic of the individual streams - but it would have a duration. ffmpeg
can then calculate the bitrate from filesize and duration.
The streams themselves, however, will have a bitrate specified in the stream headers, so it can be read straight from the metadata. This means the bitrate may be specified wrongly in the header, or it may be 9000kb/s at the start, and decrease to a lower bitrate, or the stream may be truncated so that the file is not complete, hence the maths not working as expected.
If you extract the video component (eg: ffmpeg -i myfile.mov -vcodec copy -an testfile.m2v
, usage varies with software versions), you may be able to investigate further and work out where the bitrate shown is coming from.