2011年5月3日 星期二

libavcodec & libavformat 的 fps 偵測

以下的 code 利用 FFmpeg 的 API 去偵測影片檔中的 fps 值。

AVFormatContext* formatContext;

int videoStream;
int audioStream;
int i;
float fps;

av_open_input_file(&formatContext, "your_media_file", NULL, 0, NULL);
av_find_stream_info(formatContext);

videoStream=-1;

for(i=0; i<formatContext->nb_streams; ++i)
{
	if(formatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO)
	{
		videoStream=i;
	}
	if(formatContext->streams[i]->codec->codec_type == CODEC_TYPE_AUDIO)
	{
		audioStream=i;
	}
}

fps = formatContext->streams[videoStream]->r_frame_rate.num /
	formatContext->streams[videoStream]->r_frame_rate.den;