Это зависит от видео. Большая часть видео сжимается в «группу изображений», где первое изображение является ключевым кадром, а остальные являются прогнозируемыми кадрами. Ключевой кадр может быть декодирован сам по себе, но предсказанный кадр может быть декодирован только в том случае, если были декодированы все предыдущие предсказанные кадры вплоть до предыдущего ключевого кадра включительно (на самом деле это немного сложнее, но пока достаточно хорошо). Если видео, которое вы декодируете, это все ключевые кадры (например, MJPEG), да, вы можете пропустить любые кадры, которые захотите. Если это не так, и вы пропускаете кадр, вы должны пропустить все кадры до следующего ключевого кадра. Ключевые кадры обычно занимают от 2 до 10 секунд (60–300 кадров при условии 30 кадров в секунду). Но это может быть более или менее.
Вы можете проверить, является ли кадр ключевым, проверив для AV_PKT_FLAG_KEY & pkt.flags
Вы можете сделать:
if (AV_PKT_FLAG_KEY &pkt.flags) {
ret = avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &pkt);
...
}
Но тогда вы не можете решить, что кадры, которые вы декодируете, сам видеофайл делает.