Есть ли способ кодировать видео, чтобы воспроизведение вперед и назад было очень плавным? Возможно ли это в h264?
Мое понимание базовой структуры кодирования видео состоит в том, что если видео состоит из кадров
f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 ...
которые закодированы как
i1 d2 d3 d4 d5 i6 d7 d8 d9 d10 ...
где
i(k) == f(k), d(k) == f(k) - f(k-1)
т.е. i
- iframe, а d
- разница кадров, так что размер видео намного меньше размера всех изображений (кадров), потому что дельты меньше целых кадров. Затем, чтобы получить f8
, я должен транслировать и декодировать из ближайшего предыдущего iframe i6
и применять дельты.
Таким образом, стоимость декодирования / потоковой передачи на кадр в последующем не превышает стоимость фрейма. Но, возвращаясь назад, это может быть намного больше. Например, если на f6
я хочу перейти к предыдущему кадру f5
, мне нужно декодировать все из предыдущего фрейма f1
. Есть ли способ кодировать вещи так, чтобы этого не происходило, например, путем дополнительного описания удобной (и каким-то образом избыточной) информации f6 - f5
?
Я знаком с ffmpeg и в идеале хотел бы использовать его.
Мой вариант использования следующий:
Я передаю видео на мобильный клиент. Видео всегда ставится на паузу, и пользователь просматривает слайдер вперед и назад. Поиск в обратном направлении иногда зависает, и я считаю, что он проходит через ключевой кадр, и ему приходится много раз возвращаться и перекодировать, чтобы достичь предыдущего кадра. Вперед искать хорошо.