#ffmpeg #h.264 #libavcodec #libav #h.265
#ffmpeg #глава 264 #libavcodec #libav #глава265
Вопрос:
У меня есть файл .mp4, который содержит видео h.264 и аудио AAC. Я хочу извлечь информацию о макроблоке и векторе движения каждого кадра во время декодирования. Пожалуйста, найдите мой псевдокод ниже.
avformat_open_input(file_name) //opening file
avcodec_open2(pCodecContext, pCodec, NULL) // opening decoder
while (response >= 0) // reading each frame
{
response = avcodec_receive_frame(pCodecContext, pFrame);
if (response == AVERROR(EAGAIN) || response == AVERROR_EOF || response < 0) {
break;
}
// extract macroblock of pFrame here
av_frame_unref(pFrame);
}
Я видел в другом сообщении, в котором упоминалось, что мы можем получить информацию MB через структуру MpegEncContext, но я в замешательстве, и как создать экземпляр объекта этой структуры, как данные MB структуры обновляются для каждого кадра.?
В конечном счете, я хочу сравнить макроблок из одного кадра с другим кадром, используя SAD (сумма абсолютной разницы) и вызывать оповещения, если есть какие-либо искажения на уровне макроблока.
Я был бы очень признателен, если кто-нибудь поможет в этом.
Ответ №1:
Вы можете получить информацию о MB (MV и другую) из структуры AVFrame. В AVFrame есть элемент int16_t (*motion_val[2])[2], из которого вы можете получить MV.