Як видалити між веб-кадрами помилки?


2

У мене є веб-відео, які видають помилку:

Discarding interframe without a prior keyframe!

Коли грають у VLC. Як я можу перекодувати / виправити файли в Linux для вирішення цієї помилки.

Є спосіб перевірити ці проблеми у відео, не відтворюючи його?


Звідки у вас ця помилка? У VLC безпосередньо? Що це за файли? Вони не повинні (і не можуть) кодуватися відсутніми ключовими кадрами. Чи захоплюються файли з деяких потоків?
slhck

@slhck це відбувається, коли я перекладаю початок відео. У деяких відео. Я пам’ятаю, що кодував це сам рік тому з автів.
Чень

Відповіді:


3

Між кадр - це кадр, який вимагає, щоб декодер прочитав попередній ключовий кадр (внутрішньо кадр), щоб мати можливість сконструювати зображення. Це тому, що між кадр, грубо кажучи, містить лише різницю між попереднім ключовим кадром і самим собою.

Коли ви переправляєте відео до певного моменту, можливо, ви не потрапите на ключовий кадр. Насправді більше шансів на те, що ти потрапиш у міжкадр, оскільки кадри ключових кадрів вставляються лише у кожні 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 робить повісити для вас з - за того, що може бути помилка , пов'язана з цієї частини коду, але від того, що я прочитав , що повинно було виправлено .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.