Як бітрейт відрізняється за однакову роздільну здатність і частоту кадрів?


15

Читаючи про якість відео, я виявив, що це залежить від роздільної здатності, кадрів в секунду та бітрейта, який визначає розмір відео.

Моє запитання - як обчислюється бітрейт і як він може відрізнятися.

Скажімо, відео має роздільну здатність 360x240. Він займає 86400 пікселів на кадр. Частота кадрів - 30 Гц. Таким чином, відео займає 86400 × 30 = 2592000 пікселів в секунду.

Скажімо, 1 піксель - це 3 байти (24 біти) даних: у нас є 2592000 × 24 біт на секунду відео (62208000 біт), тобто 62208 кбіт (Це не звучить правильно, можливо, в моєму розрахунку є якась проблема).

Але як вона може відрізнятися і як це відрізняє якість?


Якщо відео являло собою послідовність растрових зображень. Ваша математика вже вимкнена для файлів зображень png / jpg.
Даніель Бек

Два існуючих відповіді не підкреслюють помітний атрибут щодо стиснення відео: більшість (якщо не всі) всі відео кодеки використовують стиснення втрат . Тобто, деяка інформація про зображення знімається, коли сире відео стискається та кодується. Кількість або ступінь викинутої та втраченої інформації / деталі зображення визначається коефіцієнтом якості . Що стосується стиснення звуку, то існують як методи втрати, так і без втрат.
тирса

@sawdust: Вони ні? Я думав, що мій третій абзац зробив це досить зрозуміло. У будь-якому випадку, давати занадто багато інформації іноді не так добре; Я вірю в те, щоб дати достатньо, щоб той, хто бажає, міг дізнатися більше, якщо потрібно. В іншому випадку я можу сказати, що ваш пост не підкреслює, чому хтось вибирає один компресор над іншим, або чому існує так багато різних методів тощо, тощо.
Марті Фрід

@sawdust Ви маєте рацію, це було дещо закопано у частині JPEG. Я додав ще трохи деталей.
slhck

Відповіді:


21

Що ви обчислили, це бітрейт для сирого, нестисненого відео. Зазвичай ви їх не знайдете, окрім досліджень або інших спеціалізованих застосувань. Навіть мовники використовують стиснене відео, хоча і з набагато більшим бітрейтом, ніж ваше типове відео на YouTube.

Отже, якість відео має багато спільного з тим, як стискалося відео. Чим більше ви стискаєте, тим менше бітів потрібно на кадр. Крім того, чим більше ви стискаєте, тим гірша якість. Зараз деякі відеозаписи набагато простіше стиснути, ніж інші - по суті, саме тому вони мають менший бітрейт, хоча вони мають однакову роздільну здатність і частоту кадрів.

Для того, щоб зрозуміти, чому це, вам потрібно знати про два основні принципи, що використовуються для стиснення відео. Вони називаються "просторовими" та "тимчасовими надмірностями".

Просторові надмірності

Просторова надмірність існує у зображеннях із природним змістом. З цієї причини JPEG працює так добре - він стискає дані зображення, оскільки блоки пікселів можуть бути кодовані разом. Наприклад, це 8 × 8 пікселів. Вони називаються "макроблоками".

Сучасні відеокодеки роблять те саме: Вони в основному використовують аналогічні алгоритми JPEG для стиснення кадру, блокування за блоком. Таким чином, ви більше не зберігаєте біти на піксель, а біти на макроблок, тому що ви "узагальнюєте" пікселі в більші групи. Підсумовуючи їх, алгоритм також буде відкидати інформацію, не видиму людському оці - саме тут ви зможете зменшити більшу частину бітрейта. Це працює за допомогою квантування даних. Це дозволить зберегти більш помітні частоти і «викинути» ті, яких ми не бачимо. Коефіцієнт квантування виражається як "QP" у більшості кодеків, і це головна ручка управління якістю.

Тепер ви навіть можете вперед і передбачити макроблоки з макроблоків, які раніше були закодовані в одному зображенні. Це називається внутрішньопрогнозуванням . Наприклад, частина сірої стіни вже була закодована у верхньому лівому куті кадру, тому ми можемо знову використовувати цей макроблок у тому ж кадрі, наприклад, для макроблока прямо біля нього. Ми просто збережемо різницю, яку вона мала, до попередньої та збережемо дані. Таким чином, нам не потрібно кодувати два макроблока, дуже схожі один на одного.

Чому бітрейт змінюється на однаковий розмір зображення? Що ж, деякі зображення легше кодувати, ніж інші. Чим вище просторова активність, тим більше насправді вам доведеться кодувати. Гладкі текстури займають менше шматочків, ніж деталізовані. Те ж саме стосується і внутрішнього прогнозування: кадр сірої стіни дозволить вам використовувати один макроблок для передбачення всіх інших, тоді як кадр проточної води може не працювати так добре.

Часова надмірність

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

Беручи приклад із статті Вікіпедії про компенсацію руху , скажімо, це ваш оригінальний кадр:

Тоді різниця до наступного кадру полягає лише в цьому:

Кодер тепер зберігає лише фактичні відмінності, а не значення пікселя за пікселем. Ось чому біти, що використовуються для кожного кадру, не є однаковими щоразу. Ці "різницькі" кадри залежать від повністю закодованого кадру, і саме тому існують принаймні два типи кадрів для сучасних кодеків:

  • I-фрейми (ака-ключові кадри) - це цілком закодовані
  • P-кадри - це ті, що просто зберігають різницю

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


+1 - це те, що я мав на увазі, але мій алгоритм стиснення трохи вийшов з ладу. :)
Марті Фрід

+1 Це все, що мені потрібно. Особливо компенсація руху. Дякую
Вінсент Матвій

6

Я вважаю, що ваша математика насправді правильна, але в цьому є трохи більше; стиснення тут відсутнє посилання.

Ви обчислили нестиснену швидкість передачі бітів і придумали причину існування стиснення. Швидкість передачі бітів стає неможливо великою, якщо відео не стиснене. Отже, вони стискають відео у джерелі та розтискають його у приймачі, і тоді швидкість передачі бітів стає керованою. Вам просто потрібен досить швидкий декомпресор, який може бути апаратним чи програмним забезпеченням.

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

Редагувати: забути додати, але частинами, які реалізують метод стиснення, є кодек; Я помітив, що ви використовували це як тег у своєму дописі.


3
Плюс той факт, що стиснення відео зазвичай не базується на пікселях, але працює на блоках пікселів, так званих макроблоках .
slhck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.