[Libav-user] Reading correct frame rate (fps) of input video
Taha Ansari
mtaha.ansari at gmail.com
Wed May 22 09:12:08 CEST 2013
I just noticed one more thing:
using:
AVStream *st = pFormatCtx->streams[your_video_index];
double frame_rate = st->r_frame_rate.num / (double)st->r_frame_rate.den;
gives me correct values for 3gp files. When I tried this code on an MP4
file, I got about 49.9 value, which was incorrect (actual was 25); looking
at other values, I tried following:
AVStream *st = pFormatCtx->streams[your_video_index ];
double frame_rate = st->avg_frame_rate.num /
(double)st->avg_frame_rate.den;
It worked fine for MP4: {num=25 den=1 }, and for 3gp, I get: {num=64350000
den=2139391 } (30.078 FPS), which is also correct.
So I assume this might be better structure to refer to, until it breaks
again on another video...?
On Wed, May 22, 2013 at 8:48 AM, Taha Ansari <mtaha.ansari at gmail.com> wrote:
> Hi Guohui Huan!
>
> Many thanks for your guidance, I have got it working now!
>
> Thanks once again...
>
>
> On Wed, May 22, 2013 at 5:58 AM, Guohui Huang <huanggh0108 at sina.com>wrote:
>
>> **
>> You can get frame rate as follow:
>> AVStream *st = pFormatCtx->streams[your_video_index];
>> double frame_rate = st->r_frame_rate.num / (double)st->r_frame_rate.den;
>>
>> 2013-05-22
>> ------------------------------
>> Guohui Huang
>> ------------------------------
>> *发件人:*Taha Ansari <mtaha.ansari at gmail.com>
>> *发送时间:*2013-05-21 23:04
>> *主题:*[Libav-user] Reading correct frame rate (fps) of input video
>> *收件人:*"This list is about using libavcodec, libavformat, libavutil,
>> libavdevice and libavfilter."<libav-user at ffmpeg.org>
>> *抄送:*
>>
>> Hi!
>>
>> I am trying to read exact values for frame rate (fps) from any input
>> video file. I have been trying to debug different structures like
>> AVFormatCtx, etc. but cannot seem to figure it out. For a test case, here
>> is the code I have managed (just the source snippet, include files etc. are
>> all understandable):
>>
>>
>> //---------------------------------------------------------------------------------------------------------------------------------------------------
>> // ++ test code begins ++//
>> av_register_all();
>> avcodec_register_all();
>> avformat_network_init();
>> avdevice_register_all();
>> AVFormatContext *pFormatCtx = NULL;
>> pFormatCtx = avformat_alloc_context();
>> string finalInputName = "test_input.3gp";
>> avformat_open_input(&pFormatCtx, finalInputName.c_str(), NULL, NULL);
>> if ( pFormatCtx == NULL ||
>> pFormatCtx->iformat == NULL )
>> {
>> return -1;
>> }
>> // Retrieve stream information
>> if(avformat_find_stream_info(pFormatCtx, NULL)<0)
>> return -1; // Couldn't find stream information
>>
>> // Dump information about file onto standard error
>> av_dump_format(pFormatCtx, 0, finalInputName.c_str(), 0);
>> // -- test code ends --//
>>
>> //---------------------------------------------------------------------------------------------------------------------------------------------------
>>
>> The output it gives me is (in debug console):
>>
>>
>> //---------------------------------------------------------------------------------------------------------------------------------------------------
>> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'test_input.3gp':
>> Metadata:
>> major_brand : 3gp4
>> minor_version : 0
>> compatible_brands: isom3gp4
>> creation_time : 2013-05-20 11:54:39
>> Duration: 00:00:23.77, start: 0.000000, bitrate: 5882 kb/s
>> Stream #0:0(eng): Video: mpeg4 (Advanced Simple Profile) (mp4v /
>> 0x7634706D)
>> , yuv420p, 640x480 [SAR 1:1 DAR 4:3], 5752 kb/s, 30.08 fps, 30.08 tbr,
>> 90k tbn,
>> 300 tbc
>> Metadata:
>> creation_time : 2013-05-20 11:54:39
>> handler_name : VideoHandle
>> Stream #0:1(eng): Audio: aac (mp4a / 0x6134706D), 16000 Hz, stereo,
>> s16, 127
>> kb/s
>> Metadata:
>> creation_time : 2013-05-20 11:54:39
>> handler_name : SoundHandle
>>
>> //---------------------------------------------------------------------------------------------------------------------------------------------------
>>
>> Like in above example, I can read that video is recorded at 30.08 fps,
>> question is: it is apparently very simple for FFmpeg to figure this out,
>> but how can I use this information from my own program? I was trying to
>> follow code from FFmpeg source file (utils.c): [void
>> av_dump_format(AVFormatContext *ic, int index, const char *url, int
>> is_output)], but was easily lost there.
>>
>> Can anyone kindly guide me how to intercept this problem?
>>
>> Thanks in advance for your time...
>>
>> _______________________________________________
>> Libav-user mailing list
>> Libav-user at ffmpeg.org
>> http://ffmpeg.org/mailman/listinfo/libav-user
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://ffmpeg.org/pipermail/libav-user/attachments/20130522/8a64afe9/attachment.html>
More information about the Libav-user
mailing list