エンコードされたドメインでビデオを読み込み、フレームのサイズや期間などの情報を取得できるコードを作成しました。 AVPacketクラスは変数としてデータで構成されます。私はそれを読むことができますが、それはバイト配列なので、私はそれを読みやすい形式で使うことはできません。このデータを別のビデオファイルとの比較に使用したいと思います。助けてください。FFMPEGを使用して、エンコードされたビデオからAVPacketの重要な情報を抽出する方法
void CFfmpegmethods::VideoRead(){
av_register_all();
avformat_network_init();
ofstream outdata;
const char *url = "H:\\Sanduni_projects\\Sample_video.mp4";
AVDictionary *options = NULL;
AVFormatContext *s = avformat_alloc_context(); //NULL;
AVPacket *pkt = new AVPacket();
//open an input stream and read the header
int ret = avformat_open_input(&s, url, NULL, NULL);
//avformat_find_stream_info(s, &options); //finding the missing information
if (ret < 0)
abort();
av_dict_set(&options, "video_size", "640x480", 0);
av_dict_set(&options, "pixel_format", "rgb24", 0);
if (avformat_open_input(&s, url, NULL, &options) < 0){
abort();
}
av_dict_free(&options);
AVDictionaryEntry *e;
if (e = av_dict_get(options, "", NULL, AV_DICT_IGNORE_SUFFIX)) {
fprintf(stderr, "Option %s not recognized by the demuxer.\n", e->key);
abort();
}
int i = 1;
int j = 0;
int64_t duration = 0;
int size = 0;
uint8_t *data = 0; //Unsigned integer type with a width of exactly 8 bits.
int sum = 0;
int total_size = 0;
int total_duration = 0;
int packet_size = 0;
int64_t stream_index = 0;
int64_t bit_rate = 0;
//writing data to a file
outdata.open("H:\\Sanduni_projects\\log.txt");
if (!outdata){
cerr << "Error: file could not be opened" << endl;
exit(1);
}
//Split what is stored in the file into frames and return one for each call
//returns the next frame of the stream
while(1){
int frame = av_read_frame(s, pkt);
if (frame < 0) break;
duration = pkt->duration;
size = pkt->size;
total_size = total_size + size;
total_duration = total_duration + duration;
cout << "frame:" << i << " " << size << " " << duration << endl;
data = pkt->data;
outdata << "Frame: " << i << " ";
outdata << data<< endl;
for (j = 0; j < size; j++){
}
i++;
//pkt_no++;
//outdata << sum << endl;
}
//make the packet free
av_packet_unref(pkt);
delete pkt;
cout << "total size: " << total_size << endl;
cout << "total duration:" << total_duration << endl;
outdata.close();
//Close the file after reading
avformat_close_input(&s);
}
あなたの質問がありますか?あなたは持っている問題について説明していますが、あなたの質問には質問はありません。 – tambre
「データ」パラメータの情報を印刷または使用し、それを比較に使用し、含まれている有用な情報を抽出します。 –
それはあなたがしたいことです。今質問を作成し、それをあなたの...質問に追加してください。 – tambre