0

カメラからビデオ ストリームを取得していて、フレームをファイルに書き込んでいます。問題は、それらが大きすぎるフレーム レートで書き込まれていることであり、プログラムで設定する方法が見つかりません。それで、コンソール命令「-r [framerate]」によって呼び出されるC関数を探していると思います

avFormatContext でオプションを設定しようとしましたが、効果がありませんでした。

AVDictionary *options=NULL; 
av_dict_set(&options,"r","1",0);
    avio_open2(&oc->pb, "path", AVIO_FLAG_WRITE,options);

その後、私はフレームを読んav_read_frame(context,&packet)で書いていますav_write_frame(oc,&packet);

私が間違っていること、またはこれにどのように取り組むべきか考えていますか?

4

1 に答える 1

0

カメラのフレームレートを自分で制御したい場合があります。

#include <stdio.h>
#include <windows.h>  
#include <time.h>
...
double ticks; 
int fps=25; //25 FPS for example
uint64_t  frequency;        // ticks per second
double freq,et; 
double mspf=1000.0/(double)fps;

QueryPerformanceFrequency((LARGE_INTEGER *) &frequency);
freq= (frequency * 1000); 

while(???) {
    ticks=GetTickCount(); // start tick 

    //Read/write function
    av_read_frame(context,&packet);
    av_write_frame(oc,&packet);

    et=(GetTickCount()-ticks)/freq; // elapsed time for current frame, in milliseconds 
    av_usleep((et+1<mspf?mspf-et:1) * 1000);
}
于 2013-02-04T15:19:44.270 に答える