Що ви обчислили, це бітрейт для сирого, нестисненого відео. Зазвичай ви їх не знайдете, окрім досліджень або інших спеціалізованих застосувань. Навіть мовники використовують стиснене відео, хоча і з набагато більшим бітрейтом, ніж ваше типове відео на YouTube.
Отже, якість відео має багато спільного з тим, як стискалося відео. Чим більше ви стискаєте, тим менше бітів потрібно на кадр. Крім того, чим більше ви стискаєте, тим гірша якість. Зараз деякі відеозаписи набагато простіше стиснути, ніж інші - по суті, саме тому вони мають менший бітрейт, хоча вони мають однакову роздільну здатність і частоту кадрів.
Для того, щоб зрозуміти, чому це, вам потрібно знати про два основні принципи, що використовуються для стиснення відео. Вони називаються "просторовими" та "тимчасовими надмірностями".
Просторові надмірності
Просторова надмірність існує у зображеннях із природним змістом. З цієї причини JPEG працює так добре - він стискає дані зображення, оскільки блоки пікселів можуть бути кодовані разом. Наприклад, це 8 × 8 пікселів. Вони називаються "макроблоками".
Сучасні відеокодеки роблять те саме: Вони в основному використовують аналогічні алгоритми JPEG для стиснення кадру, блокування за блоком. Таким чином, ви більше не зберігаєте біти на піксель, а біти на макроблок, тому що ви "узагальнюєте" пікселі в більші групи. Підсумовуючи їх, алгоритм також буде відкидати інформацію, не видиму людському оці - саме тут ви зможете зменшити більшу частину бітрейта. Це працює за допомогою квантування даних. Це дозволить зберегти більш помітні частоти і «викинути» ті, яких ми не бачимо. Коефіцієнт квантування виражається як "QP" у більшості кодеків, і це головна ручка управління якістю.
Тепер ви навіть можете вперед і передбачити макроблоки з макроблоків, які раніше були закодовані в одному зображенні. Це називається внутрішньопрогнозуванням . Наприклад, частина сірої стіни вже була закодована у верхньому лівому куті кадру, тому ми можемо знову використовувати цей макроблок у тому ж кадрі, наприклад, для макроблока прямо біля нього. Ми просто збережемо різницю, яку вона мала, до попередньої та збережемо дані. Таким чином, нам не потрібно кодувати два макроблока, дуже схожі один на одного.
Чому бітрейт змінюється на однаковий розмір зображення? Що ж, деякі зображення легше кодувати, ніж інші. Чим вище просторова активність, тим більше насправді вам доведеться кодувати. Гладкі текстури займають менше шматочків, ніж деталізовані. Те ж саме стосується і внутрішнього прогнозування: кадр сірої стіни дозволить вам використовувати один макроблок для передбачення всіх інших, тоді як кадр проточної води може не працювати так добре.
Часова надмірність
Це існує тому, що кадр, що слідує за іншим кадром, ймовірно, дуже схожий на попередника. Здебільшого, лише крихітна зміна змінюється, і не було б сенсу повністю кодувати її. Що роблять кодери відео, це просто кодувати різницю між двома наступними кадрами, як і для макроблоків.
Беручи приклад із статті Вікіпедії про компенсацію руху , скажімо, це ваш оригінальний кадр:
Тоді різниця до наступного кадру полягає лише в цьому:
Кодер тепер зберігає лише фактичні відмінності, а не значення пікселя за пікселем. Ось чому біти, що використовуються для кожного кадру, не є однаковими щоразу. Ці "різницькі" кадри залежать від повністю закодованого кадру, і саме тому існують принаймні два типи кадрів для сучасних кодеків:
- I-фрейми (ака-ключові кадри) - це цілком закодовані
- P-кадри - це ті, що просто зберігають різницю
Ви час від часу потрібно вставляти I-кадри у відео. Фактичний бітрейт також залежить від кількості використовуваних I-кадрів. Крім того, чим більше різниця в русі між двома наступними кадрами, тим більше кодер повинен зберігати. Відео з "нічого", що рухається, буде простіше кодувати, ніж спортивне відео, і використовувати менше біт на кадр.