Між кадр - це кадр, який вимагає, щоб декодер прочитав попередній ключовий кадр (внутрішньо кадр), щоб мати можливість сконструювати зображення. Це тому, що між кадр, грубо кажучи, містить лише різницю між попереднім ключовим кадром і самим собою.
Коли ви переправляєте відео до певного моменту, можливо, ви не потрапите на ключовий кадр. Насправді більше шансів на те, що ти потрапиш у міжкадр, оскільки кадри ключових кадрів вставляються лише у кожні N кадрів (наприклад, 16). Отже, те, що програвач робить, коли потрапляє на між кадр, - це те, що він повинен відкинути цей кадр - і всі наступні - доки не знайде наступний ключовий кадр. Звідти він може почати розшифровку і покаже вам картинку.
Реалізація VP8 у libavcodec (бібліотека, яку VLC використовує для декодування відео WebM / VP8), також згадує це:
// 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;
Необхідність чекати ключових кадрів є основною причиною швидкого перемотування вперед, а потім відновлення відтворення може зайняти деякий час, якщо гравець не підтримує буфер для області за відтворенням.
Підводячи підсумок: ви нічого поганого не зробили. Ви не можете кодувати відео без ключових кадрів, або примусово видаляти ключові кадри. А оскільки VLC покладається на libavcodec, де вказане вище твердо кодоване, ви також не можете змінити це повідомлення про помилку (насправді це лише попередження).
Якщо VLC робить повісити для вас з - за того, що може бути помилка , пов'язана з цієї частини коду, але від того, що я прочитав , що повинно було виправлено .