Словник

Що таке B-кадри у відео?

B-кадр це відеокадр, який може використовувати і попередній, і наступний кадр. Дізнайтеся, як працюють B-кадри та що означає значення Has B Frames у вашому файлі.

b-frames

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

У метаданих відеофайлу ви можете побачити поле Has B Frames, яке також записується як has_b_frames. Назва підказує відповідь "так" або "ні", але значенням є число. Це число показує, скільки кадрів декодеру потрібно тримати в пам'яті, щоб відтворити відео в правильному порядку.

Чим B-кадри відрізняються від I-кадрів і P-кадрів

Стиснення відео зазвичай працює шляхом порівняння кадрів і запису відмінностей між ними. Відео MPEG-2 визначає такі 3 типи кадрів:

  • I-кадр: кодується без посилань на інші кадри, тому декодування може початися з нього
  • P-кадр: може використовувати попередній I-кадр або P-кадр
  • B-кадр: може використовувати попередній і наступний I-кадр або P-кадр

B-кадр може залежати від кадру, що йде пізніше в часі, тому цей пізніший кадр спочатку має бути збережений. Отже, порядок зберігання відрізняється від порядку, який ви бачите на екрані. Типова послідовність MPEG-2 виглядає так:

  • Порядок відображення: B1 B2 I3 B4 B5 P6 B7 B8 P9 B10 B11 P12
  • Порядок зберігання: I3 B1 B2 P6 B4 B5 P9 B7 B8 P12 B10 B11

Як виглядають значення

Has B Frames є цілим числом. FFmpeg описує це значення як розмір буфера для перестановки кадрів у декодері. Для відео MPEG-2 FFmpeg визначає 2 значення:

  • 0: відео з низькою затримкою лише з I-кадрами та P-кадрами
  • 1: відео з I-кадрами, P-кадрами та B-кадрами

Кодери H.264 та HEVC також можуть зберігати деякі B-кадри як еталонні для інших кадрів. Тестові файли FFmpeg для H.264 показують, як це змінює значення. Назви файлів відображають параметри кодера:

  • Не більше 3 B-кадрів поспіль, жоден не використовується як еталонний: 1
  • Не більше 3 B-кадрів поспіль, деякі використовуються як еталонні: 2
  • Не більше 4 B-кадрів поспіль, деякі використовуються як еталонні: 2

Отже, це значення не є кількістю B-кадрів. Програма ffprobe показує тип кожного кадру як значення pict_type: I, P або B. Поле NB Frames містить кількість кадрів, але не їхні типи.

Звідки походить значення

Назва поля походить з FFmpeg, програма ffprobe якого виводить has_b_frames для відеопотоків. Потік H.264 може вказувати це число у власному заголовку. Якщо в заголовку число не вказано, FFmpeg обчислює його на основі кадрів та їхніх часових позначок.

Налаштування кодера визначають, чи використовує відео B-кадри. У FFmpeg та в кодері Microsoft H.264 значення 0 вимикає B-кадри.

Які файли містять його

Це поле існує лише для відеопотоків. Ви можете побачити його для відео у файлах MP4, MOV, MKV, WebM та AVI. Файл MOV з переставленими кадрами також зберігає таблицю з часом між декодуванням і відображенням для кожного кадру.

Кодек визначає, чи можливе використання B-кадрів. Відео MPEG-2 та профіль H.264 Main можуть їх використовувати, але профіль H.264 Baseline не може. VP8, кодек, що використовується у файлах WebM, не має B-кадрів, оскільки його кадри ніколи не передбачаються з майбутніх кадрів.

Чому це важливо

B-кадри допомагають зменшити розмір відео, але додають затримку. Кодеру потрібно переставити кадри перед збереженням, і ця затримка залежить від кількості B-кадрів поспіль.

У відео з переставленими кадрами кожен кадр має 2 різні часові мітки: коли його декодувати і коли показати. FFmpeg надає обидві як часові позначки в часовій базі потоку.

Мета ключі