gpt4 book ai didi

c++ - 编码域中的DCT系数和运动 vector 提取

转载 作者:行者123 更新时间:2023-12-04 23:03:06 26 4
gpt4 key购买 nike

我想从 MPEG 4 视频中提取 DCT 系数和运动 vector 而不进行解码。我已经搜索了答案,但没有发现任何有用的东西。

请善意分享任何想法、执行此任务的可能性或代码。

我如何能够编写代码以使用 ffmpeg 读取编码代码。

void CFfmpegmethods::VideoRead(){
//cout << "this is video read" << endl;

const char *url = "H:/Sanduni_projects/ad_2.mp4";

AVFormatContext *s = NULL;
int ret = avformat_open_input(&s, url, NULL, NULL);
if (ret < 0)
//abort();

AVDictionary *options = NULL;

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();
}

avformat_close_input(&s);
}

最佳答案

我能够如下提取运动 vector 。在这里,我使用坐标生成一个数组。那是 vector 的初始位置和目标位置。

static int MV_generation(const AVPacket *pkt)
{
double x_src_val = 0;
double y_src_val = 0;
double x_dst_val = 0;
double y_dst_val = 0;

int ret = avcodec_send_packet(video_dec_ctx, pkt);

while (ret >= 0){

ret = avcodec_receive_frame(video_dec_ctx, frame);

if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}

if (ret >= 0) {
AVFrameSideData *sd;
sd = av_frame_get_side_data(frame, AV_FRAME_DATA_MOTION_VECTORS);

if (sd) {
const AVMotionVector *mvs = (const AVMotionVector *)sd->data;
int size_sd = sd->size;

}

av_frame_unref(frame);
}
}
return 0;

}

关于c++ - 编码域中的DCT系数和运动 vector 提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43648157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com