2011-07-11 27 views
1

ビデオの特定の間隔でフレームを抽出する必要があります(たとえば、40秒から50秒)。 C++で作業しています。 は、最初に私は、私はその後、私はすべての連続したフレームを取得するためにav_read_frameを使用してFFmpeg現在のフレームタイムスタンプを抽出する

static double t = 10 ;//time in seconds 
int64_t timestamp = t * AV_TIME_BASE; //destination time 
av_seek_frame(pFormatContext , -1 , timestamp + pFormatContext->start_time ,AVSEEK_FLAG_BACKWARD); 

を読み始める必要がある位置を取得しています。 私が持っている問題は、いつ止めるべきかを知らないということです。私の終了間隔(例えば50秒)に達したことを確認するにはどうすればよいですか?

ありがとうございました。

答えて

1

秒あたりのフレームを検索し、

frame_absolute_time = frame_number/FPS 
+0

こんにちはダニエル、一般的にこのメソッドは動作しています。しかし、av_seek_frameという問題があり、タイムスタンプの前に最後のキーフレームを返します。したがって私は少し前に私の10秒を数え始めました。その結果、私はその区間の最後のフレーム(約49 ...)を逃すことができます。これを解決する方法はありますか?ありがとう – kirbo

+0

実際に求められているフレームのフレームインデックスを取得するAPI呼び出しがある場合を除いて、わかりません... –

6

av_read_frame()として、各フレームの正確な時刻を計算し、その番号を使用してみてくださいは、あなたのPTS(Presentation Time Stamp)を提供します。 AVPacketのメンバーptsです。おそらくその価値は、あなたがいつ読書を止めるかを決めるのに役立ちます。

関連する問題