Типи кадрів

Матеріал з Вікіпедії — вільної енциклопедії.
Версія від 21:51, 24 грудня 2016, створена Olexa Riznyk (обговорення | внесок) (вилучена Категорія:Стиснуті відео; додана Категорія:Стиснення відео з допомогою HotCat)
(різн.) ← Попередня версія | Поточна версія (різн.) | Новіша версія → (різн.)
Перейти до навігації Перейти до пошуку

Ти́пи ка́дрів відеопотоку — способи кодування і зберігання інформації про черговий кадр, які відрізняються один від одного наявністю або відсутністю залежностей цього кадру від попередніх і наступних.

Звичайно кадр розбивається на квадратні макроблоки, і тип посилання для кожного з макроблоків визначається індивідуально, однак з обмеженням, яке задається типом всього кадру:

  • I-кадри (також називаються ключовими (keyframes) або «опорними») можуть вміщати тільки незалежно стиснуті макроблоки.
  • P-кадри («різнісні» кадри) можуть вміщати як незалежно стиснуті макроблоки, так і макроблоки з посиланням на інший кадр
  • B-кадри («двонаправлені», «зворотні» кадри) можуть вміщати наступні макроблоки: незалежні (intra), з посиланням на один кадр (predicted) або з посиланням на 2 кадри (bi-predicted).

У новому стандарті MPEG-4 AVC/H.264 також вводиться поняття SI- і SP-кадрів.

У кодеках MJPEG і DV відеопотоку всі кадри — I-типу.

Сімейство кодеків MPEG4 «третьої версії» (найпопулярніший був DivX 3.11, також відомі DivX 4.12 і OpenDivX) мають два типи кадрів — I і P. B-кадри не передбачені. Така ж ситуація в сімействі кодеків від On2: VP3, VP6, VP8.

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

В стандартах на стискання відео, які були прийняті ITU-T VCEG і ISO/IEC MPEG, звичайно стискається тільки різність між кадрами. Наприклад, у сцені, де людина йде на тлі нерухомих об'єктів, потрібно зберігати тільки інформацію про області, які змінюються (наприклад, використовується компенсація руху, за якої зберігається вектор зміни положення блоку або, якщо схожа область в попередньому кадрі не знайдена, дана область стискається як незалежне зображення). Частини сцени, які не змінюються, не зберігаються у поток, за рахунок чого значно зростає степінь стискання у порівнянні з форматами, які використовують незалежне стискання кожного кадру.

Наприклад, для I- і P- кадрів у потоці створюються ланцюжки IPPPPPPPPPPPP, коли перший кадр стискається незалежно, а наступні — з посиланням на попередній кадр. Це найпростіший приклад використання різних типів кадрів у потоці.

В той час як основною перевагою використання P-кадрів є збільшення ступеню стискання, їх основним недоліком є різко зростаючий час доступу до кадру, оскільки для отримання потрібного кадру необхідно повністю розпакувати увесь ланцюжок кадрів від найближчого I-кадру. Зокрема, якщо при стисканні були задані параметри, які максимізують ступінь стискання, при яких I-кадри зустрічаються рідко, час затримки показу довільного кадру в потоці може бути дуже помітним.

У стиснутому відеокодеком потоці для стандартів MPEG-2, MPEG-4, H.261 і H.263 використовуються кадри трьох основних типів: I-кадры (від англ. Intra pictures), P-кадри (від англ. Predicted pictures) і B-кадри (від англ. Bi-predictive pictures або Bi-directional pictures).

Використання B-кадрів означає, що даний кадр посилається на два сусідніх I- або P-кадри в потоці, в цьому випадку вид ланцюжка кадрів може бути таким: IBPBPBPBPBPBPBPBP. Частіше використовуються ланцюжки (які називаються GOP — Group of Pictures або «структура групи кадрів») IBBPBBPBBPBBPBBPBBPBBPBBP, при якій B-кадри так само посилаються на два найближчих сусідніх I- або P-кадри та незалежні між собою.

Дана структура дозволяє в 2-3 рази прискорити час одержання довільного кадру у потоці, оскільки для його отримання необхідно розпакувати тільки кожний другий (третій) кадр, починаючи з I-кадра. Також в декілька разів зростає швидкість «швидкого перемотування з показом».

Цікаві факти

[ред. | ред. код]

Кодек Xvid при належному настроюванні дозволяє одержати 4 і більше поспіль B-кадри. І такий потік буде правильно відтворюватися ним самим, а також декодером ffdshow. Деякі ж декодери не можуть правильно відтворювати більше одного B-кадру поспіль.