Типи кадрів
Ти́пи ка́дрів відеопотоку — способи кодування і зберігання інформації про черговий кадр, які відрізняються один від одного наявністю або відсутністю залежностей цього кадру від попередніх і наступних.
Звичайно кадр розбивається на квадратні макроблоки, і тип посилання для кожного з макроблоків визначається індивідуально, однак з обмеженням, яке задається типом всього кадру:
- I-кадри (також називаються ключовими (keyframes) або «опорними») можуть вміщати тільки незалежно стиснуті макроблоки.
- P-кадри («різнісні» кадри) можуть вміщати як незалежно стиснуті макроблоки, так і макроблоки з посиланням на інший кадр
- B-кадри («двонаправлені», «зворотні» кадри) можуть вміщати наступні макроблоки: незалежні (intra), з посиланням на один кадр (predicted) або з посиланням на 2 кадри (bi-predicted).
У новому стандарті MPEG-4 AVC/H.264 також вводиться поняття SI- і SP-кадрів.
I P
Сімейство кодеків 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-кадри зустрічаються рідко, час затримки показу довільного кадру в потоці може бути дуже помітним.
I P B
У стиснутому відеокодеком потоці для стандартів 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-кадру поспіль.