Um entrelaçamento é um quadro que requer que o decodificador leia o quadro-chave anterior (intra-quadro) para poder construir a imagem. Isso ocorre porque uma inter-estrutura, grosso modo, contém apenas a diferença entre o quadro-chave anterior e a própria.
Quando você avança um vídeo para um determinado ponto, talvez você não acerte um quadro-chave. Na verdade, é mais provável que você acesse uma inter-estrutura, já que os quadros-chave são inseridos apenas em todos os quadros N (por exemplo, 16). Então, o que o jogador faz quando você acerta um entrelaçamento, é que ele tem que descartar esse quadro - e todos os posteriores - até encontrar o próximo quadro-chave. De lá, ele pode começar a decodificar e mostrar uma foto para você.
A implementação do VP8 no libavcodec (a biblioteca que o VLC usa para decodificar Vídeo WebM / VP8), menciona isso também:
// Given that arithmetic probabilities are updated every frame, it's quite
// likely that the values we have on a random interframe are complete junk
// if we didn't start decode on a keyframe. So just don't display anything
// rather than junk.
if (!s->keyframe && (!s->framep[VP56_FRAME_PREVIOUS] ||
!s->framep[VP56_FRAME_GOLDEN] ||
!s->framep[VP56_FRAME_GOLDEN2])) {
av_log(avctx, AV_LOG_WARNING, "Discarding interframe without a prior keyframe!\n");
return AVERROR_INVALIDDATA;
Ter que esperar por quadros-chave é o principal motivo pelo qual o avanço rápido e a continuação da reprodução podem demorar um pouco, a menos que o jogador mantenha um buffer para a área atrás do indicador de reprodução.
Para resumir: você não fez nada de errado. Você não pode codificar um vídeo sem quadros-chave nem remover quadros-chave à força. E como o VLC depende do libavcodec, onde o código acima é codificado, você não pode alterar essa mensagem de erro (na verdade, é apenas um aviso).
Se o VLC faz ficar parado por você por causa disso, pode haver um bug relacionado a essa parte do código, mas pelo que eu li que deveria ter sido corrigido .