Можно ещё так: перейти на ключевой кадр и \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"в холостую\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" считать/декодоровать несколько кадров , расположенных до нужного

Непосредственно декодировать произвольный кадр невозможно т.к. для этого нужна информация из соседних(обычно предидущих) кадров.
Спасибо. Не ожидал, что найду квалифицированную помощь так быстро

У меня есть ещё один вопрос. Допустим я хочу захватить сразу несколько кадров. Например, с интервалом в минуту. Первый кадр получаю нормально, но второй кадр идёт не через минуту, а почему-то практически сразу (скорее всего это следующий за первым). Все остальные кадры сдвинуты на минуту назад, но с нормальным интервалом в минуту. В чём тут может быть косяк? Вот кусок кода:
Код: Выделить всё
int minute = 5; // это с какой минуты начинаем
int64_t target_frame; // это тот кадр, куда прыгаем
int count = 4; // это количество кадров, которые нужно захватить
for (int j = 0; j < count; j++)
{
target_frame = pFormatCtx->start_time + minute * 60 * AV_TIME_BASE; // вычисляем нужный кадр
//seeking
av_seek_frame(pFormatCtx, -1, target_frame, AVSEEK_FLAG_BACKWARD); // прыгаем
while(av_read_frame(pFormatCtx, &packet) >= 0)
{
// Is this a packet from the video stream?
if(packet.stream_index == videoStream)
{
// Decode video frame
avcodec_decode_video(pCodecCtx, pFrame, &frameFinished,
packet.data, packet.size);
// Did we get a video frame?
if(frameFinished)
{
// Convert the image from its native format to RGB
img_convert((AVPicture *)pFrameRGB, PIX_FMT_RGB24,
(AVPicture*)pFrame, pCodecCtx->pix_fmt,
pCodecCtx->width, pCodecCtx->height);
// Save the frame to disk
SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, minute);
break; // после сохранения выходим на первый цикл
}
}
}
minute++;
}