Анализ ключевых кадров в видеопотоке

Категория: video for Linux

При просмотре видеофайла и его последующей перемотки или, скажем, при переключении с одного онлайн видеопотока в плеере на другой, можно заметить что в одних случаях воспроизведение начинается сразу, а в других по прошествие некоторого времени. Возникает вопрос - почему? Оказывается, нюанс заключается в так называемых ключевых кадрах или их еще называют кадры I-типа. Дело в том что, видеопоток состоит из кадров-статичных изображений быстро сменяющих друг друга, другими словами при просмотре мы видим пошаговую анимацию. Так вот, для экономии места и следовательно, для уменьшения битрейта обычно делаю так: записывают полный кадр (ключевой), а в последующих кадрах записывается информация об изменяющихся областях в сравнении с предыдущим кадром. Логично, что так долго продолжаться не может т.к. количество изменений увеличивается или вовсе требуется внести новые элементы, тогда кодер вставляет очередной ключевой кадр и процесс повторяется. При недостаточной частоте опорных кадров изображение может начать "сыпаться" или застывать.

Получается, что воспроизведение видеопотока не начнется до тех пор, пока декодер не получит ключевой кадр, с этим и связана пауза в начале просмотра.

Для анализа последовательности кадров в видеопотоке, можно воспользоваться Linux утилитой ffprobe:

ffprobe -i путь_до_видеопотока_или_файла -select_streams v -show_frames -show_entries frame=pict_type -of csv

На выходе в реальном времени можно наблюдать сменяющуюся последовательность кадров с указанием его типа:
frame,I
frame,B
frame,B
frame,P
frame,B
frame,B

Обычно ключевые кадры вставляют раз в секунду или, другими словами, через каждые 23 кадра. Но некоторые "деятели" для снижения битрейта и в конечном счете для экономии трафика, увеличивают интервал вставки ключевых кадров - в итоге приводящий к проблемам описанных выше.

 О других типах кадров можно почитать на википедии...

Комментарий:

Powered by emlog