2012-12-02 63 views
4

我有一个视频在.3gph.264编码的,我希望得到它在C.帧率和持续时间这里是我打开的文件,并找到合适的编解码器后,使用代码:libavcodec的视频获得持续时间和帧率

AVRational rational = gVideoCodecCtx->time_base; 

LOGI(10, "numerator is %i", rational.num); 
LOGI(10, "denominator is %i", rational.den); 
LOGI(10, "duration is %d", gFormatCtx->duration); 
LOGI(10, "fps is %d", (double)av_q2d(rational)); 

这里是输出:

12-02 12:30:19.819: I/FFmpegTest(23903): numerator is 1 
12-02 12:30:19.819: I/FFmpegTest(23903): denominator is 180000 
12-02 12:30:19.819: I/FFmpegTest(23903): duration is 6594490 
12-02 12:30:19.819: I/FFmpegTest(23903): fps is 1692926992 

从我的理解是时间,就是要“持续时间/基time_base”这给了我6594490/180000 = 36.6的文档。我的视频文件的持续时间是6 seconds,我不知道6的这个因子会来自哪里。

此外,framerate似乎完全关闭。

现在很难找到帮助,因为很多教程使用不推荐使用的方法,文档没有给出示例。

任何帮助,将不胜感激。

感谢

编辑: 多亏了评论下面我设法打印以下

12-02 18:59:36.279: I/FFmpegTest(435): numerator is 1 
12-02 18:59:36.279: I/FFmpegTest(435): denominator is 180000 
12-02 18:59:36.279: I/FFmpegTest(435): duration is 6594490 
12-02 18:59:36.279: I/FFmpegTest(435): fps is 0.000006 

我也设法找出一个帧的时间戳msec本:

int msec = 1000*(packet.pts * timeBase * gVideoCodecCtx->ticks_per_frame); 

这会返回给我的东西大概是33fps(我期望30)。但我不知道如何检索持续时间。该文件说“流的持续时间,在AV_TIME_BASE小数秒”,但6594490 * 0.000006 = 39.5 - 正确的持续时间是6.3秒)。另外,确切的FPS是30但也不知道如何从0.000006得到30与上述数字)

感谢

回答

0

你的FPS印刷是垃圾,因为它应该是%LF不是%d。 为什么不检查其他参数类型也一次。

+0

谢谢我已纠正并编辑上述文章 – tishu

+1

@Tishu,如果您对文件执行ffprobe或ffmpeg -i文件没有其他任何操作,您会得到什么结果。在控制台上,你会得到ffmpeg认为的帧速率等。 – av501

相关问题