On Mon, Oct 31, 2016 at 10:07 PM, YIRAN LI <[email protected]> wrote:

> MediaInfo can show max/min frame rate for a variable frame rate video
>
>
> ​
> Can I get these info from AVCodec, AVCodecContext or AVFormatContext?
>

>From what I can see in the source, MediaInfo can only calculate min/max
frame rate in two situations:

For MPEG4 containers, in Source/MediaInfo/Multiple/File_Mpeg4.cpp, in very
specific situations:

    if (Temp->second.stts_Max)
        Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Minimum,
((float)Temp->second.mdhd_TimeScale)/Temp->second.stts_Max, 3, true);
    if (Temp->second.stts_Min)
        Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Maximum,
((float)Temp->second.mdhd_TimeScale)/Temp->second.stts_Min, 3, true);

For AVI containers, in Source/MediaInfo/Multiple/File_Riff.cpp, it appears
to just make something up; logic that is probably justified but beyond my
personal understanding:

    float32 FrameRateF=FrameRate.To_float32();
    Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Minimum,
FrameRateF/5, 3, true);
    Fill(Stream_Video, StreamPos_Last, Video_FrameRate_Maximum,
FrameRateF/4, 3, true);

In the MPEG4 case, stts_Min and stts_Max are filled by scanning the entire
file in File_Mpeg4_Elements.cpp.

In the AVI case, FrameRate is filled in various places in
File_Riff_Elements.cpp, I think by just reading a value from the file
somewhere.

So you would have to do something similar. To accurately determine the
value in all cases you'll have to demux the stream and examine all the PTS
values. Other than that, there are no ffmpeg struct fields that give this
information and no way for it to know without reading stream timestamps.

You can probably get away with just demuxing and taking a look at packet
PTS values, rather than decoding fully, if you want to do as quick of an
analysis as possible, although don't quote me on that, just test it: a lot
of video decoding things are beyond my understanding. Some confirmation
from somebody else here would be nice.

J
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user

Reply via email to