Термин
B-кадр
Кадр, предсказанный из прошлого и будущего reference-кадров. Самый маленький и эффективный – но добавляет задержку декодирования.
B-frame (B-кадр) – кадр видео, восстанавливаемый по и предыдущему кадру, и будущему: энкодер берёт от каждого по куску, наиболее похожему на текущий, и сохраняет только маленькую разницу. «B» означает bidirectional, двунаправленный. Так как B-кадр может занимать данные у двух reference-кадров, ему обычно нужно всего 25–30 % от размера P-кадра (который смотрит только назад) и совсем мало по сравнению с полным I-кадром.
B-кадры – главная причина, почему средний кино-файл такой маленький. Типичное сжатое видео может использовать один I-кадр раз в 2 секунды, несколько P-кадров на форвардные изменения и B-кадры между ними для дешёвого заполнения «промежутков». Энкодер фактически говорит: «чтобы нарисовать этот кадр, возьми силуэт человека из предыдущего кадра, смешай с новым фоном из следующего, вот маленькая поправка». Для большинства натурального движения это драматически эффективнее, чем описывать каждый кадр с нуля.
Trade-off – это задержка. Чтобы декодировать B-кадр, плеер должен уже получить будущий reference-кадр, а значит, энкодер должен подождать прежде чем его выпустить. Для VOD это нормально (закодировал один раз, задержка не важна) и приемлемо для большинства лайв-стримов (сотни миллисекунд редко замечают). Но именно поэтому в ultra-low-latency системах – WebRTC-звонки, облачные игры, стримы спортивных ставок – B-кадры либо отключают, либо используют по минимуму: каждый B-кадр в очереди – лишняя «glass-to-glass» задержка.
Считаете параметры для своего продукта?
Поможем собрать энкодер-леддер и посчитать стоимость доставки – до старта разработки.